在Javascript解析速度方面,类方法与顶级函数之间有区别吗?

问题描述 投票:0回答:1

我正在开发一个单页应用程序,我有许多格式如下的文件:

export function a() {
  // .. code here
}

export function b() {
  // .. code here
}

export function c() {
  // .. code here
}

因此,当用户首次加载应用程序时,所有这些函数都需要由 Javascript 引擎(在本例中为 v8)读取和解析并可能加载到内存中。您可以看出这种情况正在发生,因为如果您在该文件中放入

console.log
,它将在应用程序最初加载时被触发。

这会导致初始加载时间较长,因为我有接近 1000 个这样的顶级函数。

如果函数像这样位于类内部,加载速度会有什么不同吗?

export class Misc {
  a() {}
  b() {}
  c() {}
}

逻辑是,底层 Javascript 引擎可能会很懒,并推迟内部函数的加载,直到创建对象的第一个实例。此外,可能更容易判断函数何时不再在作用域内(不存在 Misc 对象),因此这些函数可以被垃圾收集并从内存中释放(而不是总是始终加载 1000 个函数)。

这种直觉有什么优点吗?还是真的没有区别?

javascript performance memory garbage-collection v8
1个回答
0
投票

并由 Javascript 引擎(在本例中为 v8)解析并大概加载到内存中。您可以看出这种情况正在发生,因为如果您将 console.log 放入该文件中,它将在应用程序最初加载时触发。

如果将

console.log
放入函数中,它会记录吗?如果不是,你怎么知道它被“解析”了?解析器还可以跳过函数并搜索函数的结尾(好吧,它需要一些逻辑来找到结尾),并在稍后实际执行时完全解析该函数。所以,是的,它会花费一些时间扫描所有代码以查找所有函数和全局变量的名称,但它不一定会创建完整的 AST。

您可能有兴趣阅读https://v8.dev/blog/preparser

© www.soinside.com 2019 - 2024. All rights reserved.