问题
为了提高页面性能,,我需要预加载脚本,这是我需要在底层页面上运行的脚本。
我想控制脚本何时被解析、编译和执行。
我必须避免脚本标记,因为它是通用渲染引擎的阻止程序 (geeko等)。
我不能使用延迟属性加载它,因为我需要控制脚本执行的时间。另外,异步属性是不可能的。
样本:
<html><head>
//preload scripts ie: a.js without use the script
</head><body> ..... all my nice html here
//execute here a.js
</body></html>这允许我最大限度地提高页面的呈现性能,因为浏览器将开始不加载脚本内容,并且它将同时并行地呈现页面。最后,我可以添加脚本标记,这样浏览器就可以解析、编译和执行代码。
我唯一能做到的方法就是使用隐藏的图像标记。(这是一个简化的斯托扬版本)
即
<html><head>
<img src="a.js" style=display:none;>
</head><body> ..... all my nice html here
<script src="a.js">
</body></html>问题
我没有发现使用这种技术有什么问题,但是有谁知道更好的方法吗?有元预取吗?
更多信息
我使用的是requirejs,所以我尝试预加载模块代码,而不执行它,因为这段代码依赖于DOM元素。
发布于 2012-06-19 20:30:28
您应该查看以下链接:
http://calendar.perfplanet.com/2011/lazy-evaluation-of-commonjs-modules/
http://tomdale.net/2012/01/amd-is-not-the-answer/
以及ember.js如何使用一个名为minispade的工具,并使用ruby进行预处理,使加载、解析和运行javascript模块的过程更快。
发布于 2012-06-19 14:25:26
使用类似的技术,您可以使用img为Internet预加载脚本和样式表,为其他浏览器使用object标记。
var isMSIE = /*@cc_on!@*/false;
var resources = ['a.js', 'b.js', 'c.css'];
for (var i=0; i<resources.length; i++){
if (isMSIE){
new Image().src = resources[i];
} else {
var o = document.createElement('object');
o.data = resources[i];
document.body.appendChild(o);
}
}有一篇博客文章描述了这种技术,并概述了警告:预加载CSS/JavaScript而不执行。
但是,为什么不像其他答案所建议的那样,只使用动态添加的脚本,这可能会带来一个更干净的解决方案,并具有更多的控制。
发布于 2016-08-10 13:25:40
您可以使用链接标记的prefetch属性预加载任何资源(包括javascript )。在本文撰写之时(2016年8月10日),Safari不支持它,但几乎在其他地方都支持它:
<link rel="prefetch" href="(url)">
有关支持的更多信息,请在这里:http://caniuse.com/#search=prefetch
请注意,IE9,10没有在caniuse矩阵中列出,因为微软已经停止了对它们的支持。
https://stackoverflow.com/questions/11102625
复制相似问题