我正在开发一个单页应用程序,我有许多格式如下的文件:
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 引擎(在本例中为 v8)解析并大概加载到内存中。您可以看出这种情况正在发生,因为如果您将 console.log 放入该文件中,它将在应用程序最初加载时触发。
如果将
console.log
放入函数中,它会记录吗?如果不是,你怎么知道它被“解析”了?解析器还可以跳过函数并搜索函数的结尾(好吧,它需要一些逻辑来找到结尾),并在稍后实际执行时完全解析该函数。所以,是的,它会花费一些时间扫描所有代码以查找所有函数和全局变量的名称,但它不一定会创建完整的 AST。
您可能有兴趣阅读https://v8.dev/blog/preparser。