需要时调用函数

时间:2012-01-13 14:17:02

标签: javascript jquery function asynchronous page-load-time

所以在我的页面中,我有一些小脚本,一旦你访问网站我真的不需要加载,实际上用户可能在整个会话中根本不需要它们。

另外,根据这个: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时的加载时间文件。

3 个答案:

答案 0 :(得分:6)

你混合了几件事:

  1. 页面加载时间
  2. JavaScript解析时间 - 加载脚本后,必须对其进行解析(错误检查,编译为字节代码等)
  3. 功能执行时间
  4. 由于您不想拆分脚本,因此无法对页面加载时间做很多事情。您可以考虑将其分为两部分:一部分是您总是需要的部分,另一部分是很少需要的“可选”部分。在后台加载罕见功能。

    请注意,在访问过一次网站并确保浏览器可以缓存文件后,页面加载时间变得非常糟糕。

    如果您想减少解析时间,您有两种选择:

    1. 请勿装入您不需要的部件。
    2. 压缩脚本。谷歌有一个很棒的工具:Closure Compiler。除了使脚本更快,它还会检查许多常见错误。
    3. 最后一部分是执行时间。这些仅在函数被调用时以及它们执行很多时才有意义。在你的情况下,我想你可以忽略这一点。

答案 1 :(得分:1)

是的,您应尽可能在document.ready包装器之外定义对象,函数等。一些开发人员将绝对定义包装器之外的所有内容,然后在包装器中调用init()函数来加载其他所有内容。我是一个这样的开发者。

对于异步,这不会实现真正的异步加载,但它会加快页面速度,因为在页面加载方面的工作量要少得多。

一般情况下,如果您没有使用像requireJS或yepnope这样的脚本加载器,那么最好将所有脚本引用 - 或者至少那些不需要立即运行的脚本引用 - 放在body,所以页面在资源之前呈现,直到页面加载之后才会运行。

答案 2 :(得分:1)

我会使用RequireJS(http://requirejs.org/)或类似的库加载所有其他资源。

将您不需要的所有内容立即放在单独的脚本中,并在加载主内容后加载它。