@a06062125
2016-01-16T17:42:01.000000Z
字数 2415
阅读 542
javascript,
浏览器引擎,
排版引擎,
图形引擎,
js引擎
市场份额
Browser | Rendering Engine | JavaScript Engine |
---|---|---|
IE and Edge | Trident | Chakra |
Chrome | Blink | V8 |
firefox | Gecko | Spidermonkey |
Safari | Webkit | JavaScriptCore |
Opera | Blink(早期presto) | JavaScriptCore |
360se | 混合 | V8 |
360cse | Blink | V8 |
sogou | 混合 | V8 |
混合 , Trident + Chromium 47 | V8 | |
2345 | 混合 | V8 |
猎豹 | 混合, Trident + Chromium 42 | V8 |
baidu | 混合, Trident + Chromium 42 (基于Blink) | V8 |
其中Chromium是基于Blink的
浏览器引擎(我们常说的'浏览器内核'), 也叫渲染引擎(rendering engine)、布局引擎(layout engine);
KDE的开放源代码KHTML引擎用于KDE的Konqueror网页浏览器,后来成为WebKit的基础,是Apple的Safari和Google的Chrome网页浏览器的渲染引擎,根据StatCounter的统计是目前最广泛使用的浏览器引擎。目前的Chromium/Chrome(iOS版除外)与Opera版本则是基于Blink,WebKit的一个分支。
Gecko,Mozilla开放源代码项目的网页浏览器引擎,被各种来自基于Mozilla代码的派生应用所使用,包括Firefox网页浏览器、Thunderbird电子邮件客户端以及SeaMonkey网络包。
Trident,Internet Explorer的网页浏览器引擎,使用于Microsoft Windows平台的许多应用程序,如netSmart、Outlook Express、Microsoft Outlook的一些版本和Winamp、RealPlayer中的迷你浏览器。
Opera软件公司的专有Presto引擎授权给其他一些软件供应商,使用Opera自家的网页浏览器,直到2013年它被Blink引擎取代。
Browser, Headless Browser, or Runtime | Layout Engine |
---|---|
Blink | Chrome (28+), Opera (15+), Amazon Silk, 其它的Chromium-based浏览器和框架, 如Android's (4.4+) WebView) |
Webkit | Opera, safari |
Trident | IE |
Gecko | Firefox |
Presto | 原来opera的浏览器引擎,2013年它被Blink引擎取代 |
JavaScript Engine | Browser, Headless Browser, or Runtime |
---|---|
V8 | chrome , Node.js, Io.js*, TrifleJS |
Chakra | IE and Edge |
JavaScriptCore | Safari, PhantomJS |
Spidermonkey | Mozilla |
Rhino(JavascriptCore升级版) | HTMLUnit |
将源代码编译(遵循ECMA-262 等规范)成机器码(parser可能会产生字节码), (优化)并执行
JavaScriptCore is the built-in JavaScript engine for WebKit. It currently implements ECMAScript as in ECMA-262 specification.
JavaScriptCore is an optimizing virtual machine. JavaScriptCore consists of the following building blocks: lexer, parser, start-up interpreter (LLInt), baseline JIT, a low-latency optimizing JIT (DFG), and a high-throughput optimizing JIT (FTL).
lint 可以检测代码中的常见错误:
1. 行尾没写分号;
2. 没有if , for, while等的花括号;
- JSLint 希望 if、while、do 和 for语句都由块生成,{也就是说,语句是被大括号包住的 }。
3. 无用代码(由return, throw, continue, 或者break 产生的);
4. 没有break声明的switch分支条件声明;
5. A leading zero that turns a number into octal (base 8)
6. 嵌套注释
7. 换行造成的两行代码是否为同一个语句声明的歧义
8. 无用声明;
9. 等等