前言
1995 年,网景公司一位名叫 Brendan Eich 的工程师,开始为即将发布的 Netscape Navigator 2 开发一个叫 Mocha(后来改名为 LiveScript)的脚本语言。当时的计划是在客户端和服务器端都使用它,它在服务器端叫 LiveWire。
为了赶上发布时间,网景与 Sun 公司结为开发联盟,共同完成 LiveScript 的开发。就在 Netscape Navigator 2 正式发布前,网景把 LiveScript 改名为 JavaScript,以便搭上媒体当时热烈炒作 Java 的顺风车。
-----《JavaScript高级程序设计》
发展史
注:ECMAScript,简称ES,是由Ecma国际(前身为欧洲计算机制造商协会,英文名称是European Computer Manufacturers Association)按照ECMA-262和ISO/IEC 16262标准制定的一种脚本语言规范。
一个完整的JavaScript的实现包含核心(ECMAScript)、文档对象模型(DOM)、浏览器对象模型(BOM)--其中BOM每个浏览器都会采用HTML5给它们定义属性和方法。
ECMA-262 第 5 版(ES5)定义的 ECMAScript,是目前为止实现得最为广泛(即受浏览器支持最好)的一个版本。第 6 版(ES6)在浏览器中的实现(即受支持)程度次之。到 2017 年底,大多数主流浏览器几乎或全部实现了这一版的规范。
以上文章原图可在 www.processon.com/v/64e5d60b9… 查看
浏览器对 ECMAScript 的支持
2008 年,五大浏览器(IE、Firefox、Safari、Chrome 和 Opera)全部兼容 ECMA-262 第 3 版。
网站:caniuse.com/ 提供了查看某个功能浏览器的支持情况。
针对IE浏览器:IE3、IE4采用自己的JScript,IE5才开始支持 ES 第 1 版,IE5.5~8支持 ES 第 3 版,IE9支持 ES 第 5 版(部分),IE10、IE11支持 ES 第 5 版,Edge 12+支持 ES 第 6 版。
推迟执行脚本 defer 属性
HTML 4.01 为 <script> 元素定义了一个叫 defer 的属性告诉浏览器立即下载,但延迟执行。这个属性表示脚本在执行的时候不会改变页面的结构。也就是说,脚本会被延迟到整个页面都解析完毕后再运行。
HTML5 规范要求脚本应该按照它们出现的顺序执行,因此第一个推迟的脚本会在第二个推迟的脚本之前执行,而且两者都会在 DOMContentLoaded 事件之前执行。不过在实际当中,推迟执行的脚本不一定总会按顺序执行或者在 DOMContentLoaded 事件之前执行,因此最好只包含一个这样的脚本。
HTML5 中明确规定 defer 属性只对外部脚本文件才有效,因此支持 HTML5 的浏览器会忽略行内脚本的 defer 属性。
对 defer 属性的支持是从 IE4、Firefox 3.5、Safari 5 和 Chrome 7 开始的。其他所有浏览器则会忽略这个属性,按照通常的做法来处理脚本。考虑到这一点,还是把要推迟执行的脚本放在页面底部比较好。
通过使用<noscript>元素,可以指定在浏览器不支持脚本时显示的内容。如果浏览器支持并启用脚本,则<noscript>元素中的任何内容都不会被渲染。
主流浏览器内核
Gecko:早期被 Netscape 和 Mozilla Firefox 浏览器浏览器使用;Trident:微软开发,被 IE4~IE11 浏览器使用,但是 Edge 浏览器已经转向Blink;Webkit:苹果基于 KHTML 开发、开源的,用于 Safari,Google Chrome 之前也在使用;Blink:是Webkit的一个分支,Google 开发,目前应用于 Google Chrome、Edge、Opera 等;- 等等...
浏览器内核指的是浏览器的排版引擎,排版引擎 (layout engine) ,也称为浏览器引擎 (browser engine)、页面渲染引擎 (rendering engine) 或样版引擎。
浏览器渲染过程
在浏览器渲染这个过程中,HTML 在解析的时候,如果遇到 JavaScript 标签,会停止解析 HTML ,而去加载和执行 JavaScript 代码(由 JavaScript 引擎来执行):
认识 JavaScript 引擎
- 高级的编程语言都是需要转成最终的机器指令来执行的;
- 事实上我们编写的 JavaScript 无论你交给
浏览器或者Node执行,最后都是需要被CPU执行的; - 但是
CPU只认识自己的指令集,实际上是机器语言,才能被CPU所执行; - 所以我们需要 JavaScript引擎 帮助我们将 JavaScript 代码 翻译成
CPU 指令来执行;
常见的 JavaScript 引擎
SpiderMonkey: 第一款JavaScript引擎,由Brendan Eich开发(也就是JavaScript作者);Chakra: 微软开发,用于IT浏览器;JavaScriptCore: WebKit中的JavaScript引擎,Apple公司开发;V8: Google开发的强大JavaScript引擎,也帮助Chrome从众多浏览器中脱颖而出;- 等等...
V8 引擎的原理
- V8是用 C++ 编写的 Google 开源高性能 JavaScript 和 WebAssembly 引擎,它用于 Chrome和 Node.js 等。
- 它实现 ECMAScript 和 WebAssembly ,并在 Windows 7 或更高版本,macOS 10.12+ 和使用x64,IA-32, ARM 或 MIPS 处理器的 Linux 系统上运行。
- V8 可以独立运行,也可以嵌入到任何 C++ 应用程序中。
您的支持是我最大的写作动力,更多内容请关注《JavaScript系列》集合!