【发布时间】:2014-03-21 11:58:53
【问题描述】:
通过标头中的性能优化和非阻塞脚本,我一直在尝试异步加载 jquery 本身。
我遇到了一个jQuery Loader 脚本,该脚本async 加载jquery,然后捕获jquery 文档就绪调用并将其排队。这似乎在大多数情况下都有效,但并非总是如此。
因此,如果加载器在 x 秒内没有完成,我创建了一个后备来加载本地 jquery 版本。回退有效,但不完全有效。有些部分可能有效,有些则无效。
到目前为止,在加载 jquery 加载器脚本后,在 head 中调用的脚本:
<script type="text/javascript">
function loadScript(url)
{
var head = document.getElementsByTagName('head')[0];
var script = document.createElement('script');
script.type = 'text/javascript';
script.src = url;
head.appendChild(script);
}
var fallback_timer = setTimeout(function() {
loadScript('/path/to/local/js/jquery.js');
},5000);
jQl.loadjQ('//ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js',function({clearTimeout(fallback_timer);});
</script>
问题:
任何有 jQuery Loader (jQl) 经验的人都可以帮助修复 经常失败的问题?
谁能告诉我为什么,万一失败,只有我的其他一些 js 脚本可以工作,但有些脚本一直失败?
我非常愿意异步加载 jquery 核心与其他一些 要查找的插件/脚本/方向。
澄清一下,我不是在看使用 jQuery 异步加载脚本,而是异步加载 jquery 本身,同时支持在未来某个地方加载 jquery 依赖的脚本。
【问题讨论】:
-
为什么不在 BODY 的末尾包含 jQuery,而是同步?顺便说一句,
defer|asyncHTML5 脚本属性呢? -
我认为异步加载 jQuery 没有任何意义。并且 jQuery 本身通常不会长时间阻塞加载。您真的认为通过异步加载可以显着提升客户体验吗?
-
@A.Wolff 原因是系统是模块化的,我无法预见可能的 jQuery 内联调用。我喜欢这个脚本的工作方式,因为它捕获和排队 jQuery 调用,因此系统不会中断。但也许我应该重新确定优先级并在所有这些问题出现时解决它们。
-
@Seb 确实感觉更快了,在 Google Pagespeed Insight 分析中分数上升了大约 10 分,这是一个很好的卖点。
-
您可以将
// @codekit-prepend "jquery.js"放入您的global.js并在html 末尾使用async属性调用它。
标签: jquery asynchronous pagespeed