2015-02-11 52 views
0

什么决定Require.js早期加载什么文件是必需的?脚本执行后是否立即执行加载? DOMContentLoaded之后?还有别的吗?Require.js何时加载文件?

我正在分析一个页面,我想优化,而且我经常注意到的一件事是,要求明显比其他脚本明显地熄灭,可能是什么原因?

回答

1

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 */ 
    } 
); 

distModule1distModule2开球加载整个应用程序,并会火了每个请求获得主视图所需的内容。当我移动应用程序时,它会触发请求以获取后续视图所需的内容。实际上,我使用r.js whole-project optimizer将所有内容编译到一个文件中,因此只要加载完成,应用程序就会被加载(300kb左右)。


综上所述,RequireJS 是只要浏览器遇到脚本标记加载。以这种方式加载的代码立即执行。假设我正确理解了RequireJS,库会立即尝试加载data-main文件 - 我相信这是异步完成的。

每次遇到模块,RequireJS都会加载它们asynchronously。你看到的任何延迟都可能与此有关。

+0

是的,由于服务器端(专有和)模块化,配置上的主要文件需要。然而,我所看到的行为是,下标(稍后遇到的)会在相对较早的时候被触发,但在任何实际加载开始之前闲置很长一段时间。另外,谢谢你的回答。 – Nit 2015-02-11 15:35:42