什么决定Require.js早期加载什么文件是必需的?脚本执行后是否立即执行加载? DOMContentLoaded之后?还有别的吗?Require.js何时加载文件?
我正在分析一个页面,我想优化,而且我经常注意到的一件事是,要求明显比其他脚本明显地熄灭,可能是什么原因?
什么决定Require.js早期加载什么文件是必需的?脚本执行后是否立即执行加载? DOMContentLoaded之后?还有别的吗?Require.js何时加载文件?
我正在分析一个页面,我想优化,而且我经常注意到的一件事是,要求明显比其他脚本明显地熄灭,可能是什么原因?
JRBurke有时会在这里挂起,所以他会比我更好地回答,因为我只是做一些假设。
听起来好像你在你的页面中使用了多个脚本标记,所以如果我不得不猜测,我会说RequireJS依赖只是比其他脚本标记更简单的加载。 Here's a whole bunch of info on the load and execute order of script tags。
否则,我对RequireJS的理解是,它会根据需要加载内容。想象一下,你RequireJS标签如下所示:
<script src="lib/require.js" data-main="main.js"></script>
如果您main.js
文件看起来像这样:
requirejs.config({ /*conf */ });
然后RequireJS加载主文件,它配置RequireJS,并不会仅此而已。后来,你的文件也许一个看起来是这样的:
/* code, code code */
require(
['dist/module'],
function(distModule){
/* code code code */
}
);
在这点,需要将开始发射了请求,以解决任何依赖关系链的dist/module
。如果在此之前的任何代码引入了延迟(如等待加载的东西,或者包含在jQuery DOMReady中),RequireJS将不会开始加载模块,直到所有这些延迟都解决为止。
我的情况有点不同,它可能会提供一些见解。 我只有一个脚本标签在我的整个应用程序:
<script src="vendor/require.js" data-main="build/app"></script>
我的主要文件是这样的:
requirejs.config({ /*conf */ });
require(
['dist/module1', 'dist/module2'],
function(distModule1, distModule2){
/* code code code */
}
);
distModule1
和distModule2
开球加载整个应用程序,并会火了每个请求获得主视图所需的内容。当我移动应用程序时,它会触发请求以获取后续视图所需的内容。实际上,我使用r.js whole-project optimizer将所有内容编译到一个文件中,因此只要加载完成,应用程序就会被加载(300kb左右)。
综上所述,RequireJS 库是只要浏览器遇到脚本标记加载。以这种方式加载的代码立即执行。假设我正确理解了RequireJS,库会立即尝试加载data-main
文件 - 我相信这是异步完成的。
每次遇到模块,RequireJS都会加载它们asynchronously。你看到的任何延迟都可能与此有关。
是的,由于服务器端(专有和)模块化,配置上的主要文件需要。然而,我所看到的行为是,下标(稍后遇到的)会在相对较早的时候被触发,但在任何实际加载开始之前闲置很长一段时间。另外,谢谢你的回答。 – Nit 2015-02-11 15:35:42