javascript - Requirejs 和浏览器内存管理

标签 javascript optimization browser requirejs

我第一次开始使用 requirejs,我发现我使用它的方式可能会对浏览器性能不利。情况如下:

我的应用程序的性质是我需要加载的 JavaScript 模块集必须在运行时决定。根据用户输入,我必须加载十个 js 文件 1.js...10.js 的任何子集。我用 requirejs 来加载。问题出现在编写 1.js...10.js 时:它们都使用 requirejs 来加载 React。我的理解是,加载的每个 React 模块都将是浏览器内存中的一个新对象。只有几个文件,这是一个令人担忧的问题。但是,我很好奇将其扩展到有 100 个动态加载的 javascript 文件的情况,我是否应该担心这个内存问题(特别是在移动浏览器上)?这种扩大规模并不一定会发生,所以把它当作一个思想实验来启发我。

谢谢!

最佳答案

RequireJS 的基本规则是模块创建一次且仅一次。它是在第一次请求时创建的,所有后续请求都会获得该模块的相同副本。

如果出现以下情况,则该规则不适用:

  1. 您创建 contexts除了默认的之外。您必须在传递给 requirejs.config 的配置中显式创建上下文,因此如果您现在不创建上下文,那么您仅使用默认上下文。如果您在两个不同的上下文中请求同一个模块,它将被加载两次。

  2. 如果您使用 requirejs.undef 。如果您取消定义一个模块并再次需要它,那么它将被重新创建。

现在,如果您调用特定于第三方库的函数,会发生什么取决于这些库。例如,如果一个库有一个被调用十几次的 init() 函数,那么它可能会在每次调用时分配新的结构。您必须通过阅读库的文档或阅读源代码来确定这一点。

关于javascript - Requirejs 和浏览器内存管理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26768402/

相关文章:

javascript - 如何实现上滑效果并重定向到另一个html页面

python - scipy.optimize.curve_fit 无法拟合曲线

Java 内联优化是否正确?

javascript - Chrome 没有将 cookie 路径设置为 root

c# - 如何将 JavaScript double 组转换为 .NET double 组?

javascript - 在订阅期间从 Observable 返回最新的发射值计数

javascript - 单击按钮显示 HTML 标记,一次一个

javascript - Node.js - 重复 require ('path'/'module' ) 语句

c++ - 使用指向成员的指针数组或开关更好吗?

javascript - 如何使用 Javascript 更改浏览器语言