跳到主要内容

V8发布v4.5

· 阅读需 4 分钟
V8团队

大约每六周,我们会根据发布流程创建一个新的V8分支。每个版本都是在Chrome为Chrome Beta里程碑分支之前从V8的Git主分支派生出来的。今天,我们很高兴地宣布最新的分支,V8版本4.5,这个版本将在Beta阶段,直到和Chrome 45稳定版同步发布。V8 v4.5包含了各种面向开发者的精彩内容,因此在几周后的发布之前,我们希望预览一些亮点。

改进的ECMAScript 2015 (ES6)支持

V8 v4.5增加了对几个ECMAScript 2015 (ES6)特性的支持。

箭头函数

通过箭头函数,可以编写更简洁的代码。

const data = [0, 1, 3];
// 没有使用箭头函数的代码
const convertedData = data.map(function(value) { return value * 2; });
console.log(convertedData);
// 使用箭头函数的代码
const convertedData = data.map(value => value * 2);
console.log(convertedData);

“this”的词法绑定是箭头函数的另一个主要优势。因此,在方法中使用回调变得更加简单。

class MyClass {
constructor() { this.a = '你好,'; }
hello() { setInterval(() => console.log(this.a + '世界!'), 1000); }
}
const myInstance = new MyClass();
myInstance.hello();

数组/TypedArray函数

在V8 v4.5中,ES2015规范中定义的所有新方法都得到了支持,它们使操作数组和TypedArrays更加方便。新增的方法包括Array.fromArray.of,还添加了许多在各种TypedArray类型上镜像Array方法的功能。

Object.assign

Object.assign让开发者可以快速合并和克隆对象。

const target = { a: '你好,' };
const source = { b: '世界!' };
// 合并对象。
Object.assign(target, source);
console.log(target.a + target.b);

此功能也可以用于混合功能。

更多JavaScript语言特性是“可优化的”

多年来,V8的传统优化编译器Crankshaft一直擅长优化许多常见的JavaScript模式。然而,它从未能够支持完整的JavaScript语言,在函数中使用某些语言特性(如try/catchwith)会阻止其被优化。V8不得不退回到较慢的基线编译器来处理该函数。

V8的新优化编译器TurboFan的设计目标之一是最终能够优化全部JavaScript,包括ECMAScript 2015特性。在V8 v4.5中,我们开始使用TurboFan优化一些Crankshaft不支持的语言特性,例如for-ofclasswith和计算属性名称。

以下是使用for-of的代码示例,它现在可以由TurboFan编译:

const sequence = ['第一', '第二', '第三'];
for (const value of sequence) {
// 此作用域现已可优化。
const object = {a: '你好,', b: '世界!', c: value};
console.log(object.a + object.b + object.c);
}

尽管初期使用这些语言特性的函数不会像Crankshaft编译的其他代码达到同样的最佳性能,但TurboFan现在可以将其速度提升至远超当前的基线编译器。更好的是,随着我们开发更多TurboFan优化,性能将继续快速提高。

V8 API

请查看我们的API变更摘要。此文档将在每次主要发布后的几周内定期更新。

拥有活动V8检出的开发者可以使用git checkout -b 4.5 -t branch-heads/4.5来尝试V8 v4.5中的新特性。或者你可以订阅Chrome的Beta频道,并很快自己尝试这些新功能。