我阅读了关于V8引擎和JavaScript优化的以下文章。
JavaScript如何在V8引擎内部运行:优化代码的五个技巧
根据上述文章,这些是推荐的:
a. V8引擎使用隐藏类和缓存机制来处理隐藏类和属性。因此,避免动态添加对象属性,并避免动态更改属性类型。而是使用对象构造函数。
b. V8引擎对频繁使用的函数应用更多的优化。因此,避免生成许多仅执行一次的不同类似形式的函数。而是编写代码以重复执行相同的函数。
然后,我有3个问题:
i. 可以将“a”和“b”应用于其他浏览器的JavaScript引擎,例如Firefox的SpiderMonkey吗?
ii. 根据“a”,使用TypeScript对V8引擎进行优化更具优势吗?(使用TypeScript,可以生成具有较少动态更改对象和属性的JavaScript代码)
iii. 现代JavaScript代码使用大量内联和匿名函数,具有类似形式,例如下面的示例代码。根据“b”,使用单个预定义函数比使用多个类似形式的函数更具优势吗?(此示例代码是为了显示使用多次的类似形式函数而简化的)
a. V8引擎使用隐藏类和缓存机制来处理隐藏类和属性。因此,避免动态添加对象属性,并避免动态更改属性类型。而是使用对象构造函数。
b. V8引擎对频繁使用的函数应用更多的优化。因此,避免生成许多仅执行一次的不同类似形式的函数。而是编写代码以重复执行相同的函数。
然后,我有3个问题:
i. 可以将“a”和“b”应用于其他浏览器的JavaScript引擎,例如Firefox的SpiderMonkey吗?
ii. 根据“a”,使用TypeScript对V8引擎进行优化更具优势吗?(使用TypeScript,可以生成具有较少动态更改对象和属性的JavaScript代码)
iii. 现代JavaScript代码使用大量内联和匿名函数,具有类似形式,例如下面的示例代码。根据“b”,使用单个预定义函数比使用多个类似形式的函数更具优势吗?(此示例代码是为了显示使用多次的类似形式函数而简化的)
prm.then((res) => {
console.log(res);
}).then((res2) => {
console.log(res2);
}).catch((err) => {
console.log(err);
});
then()
被触发,那个示例链将会记录第二个then()
的undefined
。不过我理解你的意思,多个内联函数重复使用相同的实现并不是一件好事情。 - Patrick Roberts