JavaScript 优化,V8 引擎和 TypeScript

4
我阅读了关于V8引擎和JavaScript优化的以下文章。 JavaScript如何在V8引擎内部运行:优化代码的五个技巧 根据上述文章,这些是推荐的:
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);
});

2
如果第一个then()被触发,那个示例链将会记录第二个then()undefined。不过我理解你的意思,多个内联函数重复使用相同的实现并不是一件好事情。 - Patrick Roberts
@PatrickRoberts:是的。上面的代码是一个非常简化的例子。 - pdh0710
1
B) 没有意义。编写能够根据需要随时运行的代码。如果它只运行一次,速度也无关紧要。 - Bergi
@Bergi:矛盾的情况不在我的问题中,而在于“我同意你的评论,但你的评论并没有帮助到我的问题”。你是指你没有理解这一点吗?你怎么能要求我编辑我的问题呢?难道你不认为我已经尽力发表了我的问题吗? - pdh0710
@pdh0710 哦,我以为你指的是问题中描述的某些矛盾,而不仅仅是我的评论没有完全回答你的问题。下面Erik的答案应该包含了你需要的一切。 - Bergi
显示剩余5条评论
1个回答

1
首先,你的标题非常弱。标题应该几乎是一个问题的形式。例如:"是否可以优化javascript引擎的代码?"
“a”所述的内容,如'a'和'b'是否可以应用于其他浏览器的javascript引擎,比如Firefox的SpiderMonkey?
当然可以,但这取决于那些引擎的开发人员是否这样做。我认为在这里提出这个问题没有任何好处。
根据'a'所述,使用TypeScript对v8引擎进行优化更有优势吗?
TypeScript被编译成JavaScript。V8是一个JavaScript引擎,因此认为TypeScript的编译器对V8做了任何不同的事情,或者V8因为某种神奇的方式知道JavaScript来自TypeScript而做出任何优化,那么任何“有利”的推断都只能是猜测(除非熟悉代码的人知道不同)。
由于TypeScript编译器试图编写良好/优化的Javascript代码,因此V8只是利用了良好的代码。任何人都可以编写良好的Javascript代码,但编写糟糕的TypeScript代码就更难了。但需要注意的是,由于TypeScript每次编译代码的方式都相同,因此V8可以利用它,但只有当程序员喜欢使用TypeScript编写代码时才有益。
现代JavaScript代码使用了很多形式相似的内联和匿名函数,例如下面的示例代码。根据'b'的说法,使用单个预定义函数比较优越?
在什么方面更有优势?
您的匿名函数很可能已经被编译为console.log(),因为这是唯一被调用的内容,可以轻松地进行内联处理。所以这真的是一个不好的例子。
至于更复杂的函数,编写单个函数已经是一个良好的原则(不要重复自己-DRY)。因此,任何遵循DRY原则的程序员都不需要太担心,因为他们已经编写了良好的代码,随后V8会利用它。
无论使用哪种引擎,答案似乎真的是“只需编写优秀的代码”。

@JonasW.:在某些方面,你是对的。然而,为什么文章的作者(“JavaScript如何工作:V8引擎内部+ 5个编写优化代码的技巧”,链接包含在我的问题中)推荐这些技巧呢? - pdh0710
1
@pdh0710,你为什么认为这篇文章与这个答案相矛盾? - Jonas Wilms
1
@pdh0710 我知道这篇文章和讨论的内容,但我认为问题不够详细。你没有提供一个可以被检查的详细例子。你理解我的问题过于简单 - 这是你要让读者按照你想要的方式理解它的责任。问题基于你在阅读文章后对TypeScript的假设。详细说明你具体指的是什么将会很有帮助。读者可能知道文章中讨论的事情,但问题应该只通过在Stackoverflow上阅读其内容就能完全理解。 - Estus Flask
2
@phd0710 过早的优化是万恶之源。那些细粒度的性能技巧只有在你真正遇到性能问题时才适用。否则它们会带来更多的伤害而不是好处。 - Jonas Wilms
@JonasW.:我在某种程度上同意你的观点。我的问题意图是:“如果文章中推荐的技巧适用于其他浏览器的JavaScript引擎,那么这些技巧可能是普遍有用的。它们是吗?” - pdh0710
显示剩余8条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接