默认情况下,Javascript资源会阻止任何其他并行下载的发生。 因此,您可以想象如果头部有足够的<script>
标记,则调用多个外部脚本将阻止HTML
加载,从而使用空白屏幕向用户发出问候,因为页面上没有其他内容会加载, 直到 JS文件已完全加载。
为了解决这个问题,许多开发人员选择将JS放在HTML页面的底部(在</body>
标记之前)。 这似乎是合乎逻辑的,因为在用户开始与网站交互之前,大部分时间都不需要JS。 将JS文件放在底部也可以实现渐进式渲染。
或者,您可以选择异步加载Javascript文件。 有很多现有的方法可以通过以下方式实现:
XHR评估
var xhrObj = getXHRObject();
xhrObj.onreadystatechange =
function() {
if ( xhrObj.readyState != 4 ) return;
eval(xhrObj.responseText);
};
xhrObj.open('GET', 'A.js', true);
xhrObj.send('');
脚本DOM元素
var se = document.createElement('script');
se.src = 'http://anydomain.com/A.js';
document.getElementsByTagName('head')
[0].appendChild(se);
Meebo Iframed JS
var iframe = document.createElement('iframe');
document.body.appendChild(iframe);
var doc = iframe.contentWindow.document;
doc.open().write('<body onload="insertJS()">');
doc.close();
仅举几例......
注意 :在当前浏览器中,最多只能同时加载五个脚本。
对于IE
,你可以使用defer
属性,如下所示:
<script defer src="jsasset.js" type="text/javascript"></script>
设置时,此布尔属性向用户代理提供脚本不会生成任何文档内容的提示(例如,javascript中没有“document.write”),因此,用户代理可以继续解析和呈现。