所以在我的页面中,我有一些小脚本,一旦你访问网站我真的不需要加载,实际上用户可能在整个会话中根本不需要它们。
另外,根据这个:http://code.google.com/speed/page-speed/docs/payload.html#DeferLoadingJS它也不是一个好习惯。
因此,例如,目前我在'当dom ready'时已经拥有了所有内容:
$(function() {
// most of the code of which is not needed
});
如果我没有将代码放在Dom准备好的内容中,那么它在大多数情况下都不可执行。所以我想为每个片段做单独的功能。
例如:
function snippet1() {
// Code here
}
然后当我需要该片段时,我会在需要时使用鼠标点击加载它。 (并不总是一个mouselcick,取决于我需要加载)。
例如:
$('#button1').click(function() {
snippet1();
});
所以我的问题是:这是加载函数async的方式,这样可以减少页面加载时间或者有更好的方法吗?我没有在我的示例中读到这个,我只是想到了它
请注意,我知道asynch加载,但这不是我的选择,因为我可以将所有函数组合在一个将被缓存的js文件中,因此页面加载时间将小于每次加载asynch js时的加载时间文件。
答案 0 :(得分:6)
你混合了几件事:
由于您不想拆分脚本,因此无法对页面加载时间做很多事情。您可以考虑将其分为两部分:一部分是您总是需要的部分,另一部分是很少需要的“可选”部分。在后台加载罕见功能。
请注意,在访问过一次网站并确保浏览器可以缓存文件后,页面加载时间变得非常糟糕。
如果您想减少解析时间,您有两种选择:
最后一部分是执行时间。这些仅在函数被调用时以及它们执行很多时才有意义。在你的情况下,我想你可以忽略这一点。
答案 1 :(得分:1)
是的,您应尽可能在document.ready
包装器之外定义对象,函数等。一些开发人员将绝对定义包装器之外的所有内容,然后在包装器中调用init()
函数来加载其他所有内容。我是一个这样的开发者。
对于异步,这不会实现真正的异步加载,但它会加快页面速度,因为在页面加载方面的工作量要少得多。
一般情况下,如果您没有使用像requireJS或yepnope这样的脚本加载器,那么最好将所有脚本引用 - 或者至少那些不需要立即运行的脚本引用 - 放在body,所以页面在资源之前呈现,直到页面加载之后才会运行。
答案 2 :(得分:1)
我会使用RequireJS(http://requirejs.org/)或类似的库加载所有其他资源。
将您不需要的所有内容立即放在单独的脚本中,并在加载主内容后加载它。