JavaScript发展史与主流浏览器之间的关系

184 阅读4分钟

前言

1995 年,网景公司一位名叫 Brendan Eich 的工程师,开始为即将发布的 Netscape Navigator 2 开发一个叫 Mocha(后来改名为 LiveScript)的脚本语言。当时的计划是在客户端和服务器端都使用它,它在服务器端叫 LiveWire。

为了赶上发布时间,网景与 Sun 公司结为开发联盟,共同完成 LiveScript 的开发。就在 Netscape Navigator 2 正式发布前,网景把 LiveScript 改名为 JavaScript,以便搭上媒体当时热烈炒作 Java 的顺风车。

-----《JavaScript高级程序设计》

发展史

image.png 注:ECMAScript,简称ES,是由Ecma国际(前身为欧洲计算机制造商协会,英文名称是European Computer Manufacturers Association)按照ECMA-262和ISO/IEC 16262标准制定的一种脚本语言规范。

一个完整的JavaScript的实现包含核心(ECMAScript)、文档对象模型(DOM)、浏览器对象模型(BOM)--其中BOM每个浏览器都会采用HTML5给它们定义属性和方法。

image.png

image.png

image.png 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>元素中的任何内容都不会被渲染。

主流浏览器内核

  1. Gecko:早期被 Netscape 和 Mozilla Firefox 浏览器浏览器使用;
  2. Trident:微软开发,被 IE4~IE11 浏览器使用,但是 Edge 浏览器已经转向 Blink;
  3. Webkit:苹果基于 KHTML 开发、开源的,用于 Safari,Google Chrome 之前也在使用;
  4. Blink:是 Webkit 的一个分支,Google 开发,目前应用于 Google Chrome、Edge、Opera 等;
  5. 等等...

浏览器内核指的是浏览器的排版引擎,排版引擎 (layout engine) ,也称为浏览器引擎 (browser engine)、页面渲染引擎 (rendering engine) 或样版引擎。

浏览器渲染过程

在浏览器渲染这个过程中,HTML 在解析的时候,如果遇到 JavaScript 标签,会停止解析 HTML ,而去加载和执行 JavaScript 代码(由 JavaScript 引擎来执行):

image.png

认识 JavaScript 引擎

  1. 高级的编程语言都是需要转成最终的机器指令来执行的;
  2. 事实上我们编写的 JavaScript 无论你交给 浏览器 或者 Node 执行,最后都是需要被 CPU 执行的;
  3. 但是 CPU 只认识自己的指令集,实际上是机器语言,才能被 CPU 所执行;
  4. 所以我们需要 JavaScript引擎 帮助我们将 JavaScript 代码 翻译成 CPU 指令来执行;

常见的 JavaScript 引擎

  1. SpiderMonkey : 第一款JavaScript引擎,由Brendan Eich开发(也就是JavaScript作者);
  2. Chakra : 微软开发,用于IT浏览器;
  3. JavaScriptCore : WebKit中的JavaScript引擎,Apple公司开发;
  4. V8 : Google开发的强大JavaScript引擎,也帮助Chrome从众多浏览器中脱颖而出;
  5. 等等...

V8 引擎的原理

  1. V8是用 C++ 编写的 Google 开源高性能 JavaScript 和 WebAssembly 引擎,它用于 Chrome和 Node.js 等。
  2. 它实现 ECMAScript 和 WebAssembly ,并在 Windows 7 或更高版本,macOS 10.12+ 和使用x64,IA-32, ARM 或 MIPS 处理器的 Linux 系统上运行。
  3. V8 可以独立运行,也可以嵌入到任何 C++ 应用程序中。

image.png

image.png

您的支持是我最大的写作动力,更多内容请关注《JavaScript系列》集合!