全局导出与作用域导出



假设我们有两个相似的es-module:

第一个导出一个大的静态数组,例如虚拟数据:

export default const dummyData = [ /* big data set */ ];

另一个导出返回虚拟数据的函数:

export default function getDummyData() {
const dummyData = [ /* big data set */ ];
return dummyData;
}

是否一种方法优于另一种方法,例如,因为运行时的内存使用?

首先考虑数据是否足够大,它所消耗的资源量是否值得担心。通常情况下,事实并非如此;许多现代的手机和电脑都能够在不明显影响用户体验的情况下使用大量

如果数据的数量大到足以让人担心,那么:导出函数将导致数据仅在需要时才放在堆上,但是(您当前的实现)也将导致每次函数运行时都创建数据。所以

  • 如果在许多情况下,数据从未被请求,那么使用函数可能会更好,因为这样数据就不会被不必要地加载到内存中
  • 如果多个其他模块使用这个,调用每个函数可能是一个问题,因为这样你就会为每个调用加载一个新的深度数据副本到内存中。(这可以通过在第一次调用函数时将数据保存到一个持久的外部变量来缓解,但这也会防止垃圾收集。)
  • 如果数据总是被使用,它只被使用一次,这无关紧要。也可以导出纯对象。

如果这段代码运行在前端,有些人可能会考虑调用一个返回数据的API而不是将其硬编码到源中,这是一个更好的方法。

最新更新