【发布时间】:2012-11-08 14:27:21
【问题描述】:
自从我从原型切换到 jquery 后,我遇到了很多以前从未知道存在的性能问题。
但这不是问题所在。问题是关于我正在使用的这个功能: (注意我们有一个巨大的网络应用程序) 我正在使用这个功能:
<!DOCTYPE html>
<html>
<head>
<link href="http://ajax.googleapis.com/ajax/libs/jqueryui/1/themes/base/jquery-ui.css" rel="stylesheet" type="text/css" />
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1/jquery.min.js"></script>
<script src="http://ajax.googleapis.com/ajax/libs/jqueryui/1/jquery-ui.min.js"></script>
<meta charset=utf-8 />
<title>JS Bin</title>
</head>
<body>
<div title="jquery ui exists" style="width: 500px; height: 500px; background-color: lightblue" >hover me</div>
<script>
var MyApp ={
loadJsNow: function(libFilename){
//the synchronous call ensures the library is in fact loaded before this
//(which does not work for crossdomain requests, just for docu)
//function returns:
$.ajax({
url: libFilename,
dataType: "script",
type: "GET",
async: false,
cache: true,
complete: function(data){
$("div").tooltip();
}
});
}
}
MyApp.loadJsNow("http://ajax.googleapis.com/ajax/libs/jqueryui/1/jquery-ui.min.js");
</script>
</body>
</html>
所以这个函数是用来加载网页的某个元素需要的js文件。由于我们有很多页面,有时很少,有时会加载,这种方法似乎很有意义。但: 由于此功能按需加载,而不像标头中的标准那样加载,我不确定这是否会自行造成性能问题。 在 FF 10 我得到 200-600 毫秒 see here
看看这里在标题中使用硬编码值的不同方法:
Hardcoded head js links 我得到〜100-300毫秒
放弃对按需加载的所有支持? 你得到类似的结果吗?
编辑我想crossreference this question,因为它似乎相关,因为 jquery / firefox 似乎没有正确处理按需 javascript 加载的缓存。有时它可以工作,但在同一页面上它又不能工作了。
【问题讨论】:
-
如果您知道页面上将需要它,那么动态加载脚本通常没有什么意义。不妨立即使用内联代码加载它并完成它。
-
不从 Google CDN 指定确切的版本几乎可以确保您的 sripts 无论如何都不会被缓存,所以首先定义版本而不是 /1/ 来确保最新版本过期日期并被缓存。如果不需要,也尽量不要加载整个 UI 库。您可以使用 jQuery UI 站点中所需的方法来构建它。
-
是的,把东西放在
</body>上面,而不是放在你的脑海里。 CDN 的东西很大,不知道有多少人意识到最新版本的链接没有被缓存。 -
@ŠimeVidas 我认为
<script>链接曾经被注释掉。 -
@RichBradshaw - 我真的不明白为什么 Google 会提供这种方法,因为它违背了使用 CDN 的全部目的,其中主要优点是用户已经将脚本缓存在浏览器。他们应该用一个巨大的警告来标记它“这个方法很糟糕,因为不会启用缓存”!
标签: jquery performance dynamic-loading