《V8、JavaScript的现在与未来.pdf》由会员分享,可在线阅读,更多相关《V8、JavaScript的现在与未来.pdf(89页珍藏版)》请在三个皮匠报告上搜索。
1、V8、JavaScript 的现在与未来History of JavaScriptV8 引擎针对 JavaScript 的性能优化TC39 的最新提案以及应用场景编写高性能 JavaScript 代码history of JavaScript1997LiveScript1996JavaScript1995EcmaScript2000ES32015ES6ES720162017ES8ES920182009ES5JScript2004FirefoxV82008IE62001IE72005Node.jsChromeEdge2006jQuerynpm2010Vue.js20142013ReactAngu
2、larI created JavaScript in 10 daysbug or feature?typeof null=object;/WTF?null instanceof Object=false;/WTF?null instanceof null;/TypeError:Right-hand side of instanceof is not an object WTF?图片来源:wikipedia.orgSchrdingers NullES201xletconstclassspreadtrailing commasSetMapPromisearrow functionSymbolTyp
3、edArraysIterationGeneratorsExponentiation Operatortagged templateV8 Release Process每天每周每6周每6周V8 引擎针对 JavaScript 的性能优化V8 概览快速的算术运算数组的高阶函数内联编译逃逸分析IgnitionTurboFan(since Chrome 59)Optimization Killers生成器和 async 函数for-of 和数组解构try-catch 和 try-finally复合 let 或 const 赋值包含 _proto、get、set 的对象声明debugger 或 with
4、 语句eval()TurboFan快速的算术运算const i=1;/SmallInteger(Smi)const d=1.1;/HeapNumber(Double)const o=;/JSObject(Heap)SMI vs Double代码:a+bmov eax,amov ebx,bcall RuntimeAdd代码:a+bmov eax,amov ebx,bcall RuntimeAddadd eax,ebxType feedback二元运算符可以收集函数的 typefeedback信息.function f(a,b)var c=a+a;return b+c;函数信息Feedbackve
5、ctor.StackCheck Ldar a0Add a0,2Star r0Ldar r0Add a1,3Return 2:unitialized3:unitializedType feedback二元运算符可以收集函数的 typefeedback信息.function f(a,b)var c=a+a;return b+c;f(1,2);函数信息Feedbackvector.StackCheck Ldar a0Add a0,2Star r0Ldar r0Add a1,3Return int+int-intint+int-intType feedback二元运算符可以收集函数的 typefeed
6、back信息.function f(a,b)var c=a+a;return b+c;f(1,2);f(1,0.1)函数信息Feedbackvector.StackCheck Ldar a0Add a0,1Star r0Ldar r0Add a1,1.1Return int+int-intnum+num-numType feedback二元运算符可以收集函数的 typefeedback信息.function f(a,b)var c=a+a;return b+c;f(1,2);f(1,0.1)/Deopt!函数信息Feedbackvector.StackCheck Ldar a0Add a0,1