【问题标题】:Javascript optimization, V8 engine and TypescriptJavascript 优化、V8 引擎和 Typescript
【发布时间】:2018-05-05 20:01:33
【问题描述】:

我阅读了以下关于 V8 引擎和 javascript 优化的文章。

How JavaScript works: inside the V8 engine + 5 tips on how to write optimized code

根据上面的文章,这些是推荐的:

一个。 V8 引擎使用隐藏类和隐藏类和属性的缓存机制。所以避免动态添加对象属性,避免动态改变属性的类型。而是使用对象构造函数。

b. V8引擎对常用功能进行了更多优化。所以避免生成许多只执行一次的不同的相似表单函数。而是编写代码来重复执行相同的功能。

那么,我有 3 个问题:

我。 'a' 和 'b' 是否可以应用于其他浏览器的 javascript 引擎,例如 firefox 的 SpiderMonkey?

二。根据'a',使用打字稿对v8引擎优化更有优势? (使用 typescript,您可以生成更少动态变化的对象和属性的 javascript 代码)

三。现代 JavaScript 代码使用了许多具有相似形式的内联和匿名函数,如下面的示例代码。根据'b',使用单个预定义函数更有利吗? (此示例代码非常简化,以显示多次使用的类似表单功能)

prm.then((res) => {
    console.log(res);
}).then((res2) => {
    console.log(res2);
}).catch((err) => {
    console.log(err);
});

【问题讨论】:

  • 如果到达第一个 then(),则该示例链将为第二个 then() 记录 undefined。我明白你的意思,重复相同实现的多个内联函数不是一件好事。
  • @PatrickRoberts:是的。上面的代码是非常简化的例子。
  • B) 没有意义。编写尽可能频繁地运行的代码。如果它只运行一次,那么速度无论如何都无关紧要。
  • @Bergi 我同意您的评论,但您的评论对我的问题没有帮助。这种矛盾的情况可能是我的英语不够造成的。请阅读文章(链接在我的问题中)并理解我的问题的意图。
  • @pdh0710 请edit你的问题解释一下你认为矛盾的地方

标签: javascript typescript optimization v8


【解决方案1】:

首先你的标题很弱。标题应该几乎是问题的形式。例如:“是否可以为 javascript 引擎优化代码?”

'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() 是唯一被调用的东西,并且可以很容易地内联。所以这确实是一个糟糕的例子。

对于更复杂的函数,编写单个函数已经是一个很好的原则,无论如何都要坚持(Don't Repeat Yourself - DRY)。因此,任何保持代码 DRY 的程序员都不会真正担心任何事情,因为他们已经编写了很好的代码,随后 V8 就利用了这一点。

不管引擎如何,答案似乎真的是写好代码

【讨论】:

  • 你理解我的问题太简单了。请考虑 typescript 生成的 javascript 代码具有较少动态变化的对象和属性。而上面的代码只是一个简化的例子。
  • @phd0710 这仍然可以回答您的问题。不要试图“优化”你的代码。这些引擎旨在尽可能快地运行“常规”javascript。只需编写“常规”代码。不管是不是打字稿。
  • @pdh0710 为什么你认为这篇文章与这个答案相矛盾?
  • @pdh0710 我知道这篇文章以及那里讨论的内容,我认为这个问题是不够的。您没有提供可以检查的详细示例。 你理解我的问题太简单了 - 你有责任让读者按照你想要的方式理解它。这个问题是基于您在阅读文章后对 TypeScript 的假设。详细说明你的意思会很有帮助。读者可能知道文章中讨论的内容,但只要阅读 Stackoverflow 上的内容,就应该可以完全理解这个问题。
  • @phd0710 过早的优化是万恶之源。这些细粒度的性能提示仅在您确实遇到性能问题时才适用。否则,它们弊大于利。
猜你喜欢
  • 2020-04-06
  • 1970-01-01
  • 2011-09-22
  • 2013-04-21
  • 2013-01-02
  • 2015-05-16
  • 1970-01-01
  • 1970-01-01
  • 2011-05-27
相关资源
最近更新 更多