2009-07-10 75 views
12

我想知道是否有可能以不妨碍用户体验的方式加载JavaScript。我不知道如何实现,但我正在寻找一种跨浏览器的解决方案。我想知道是否有人能指引我走向正确的方向。将js放在页面的底部并不适用。无阻塞Javascript

谢谢你的时间。

+0

Blargh,我有一个很好的链接,这一点,但我不能找到它 – Greg 2009-07-10 07:45:05

+0

需要澄清:你说的是加载javascript文件资源如`

2

当网页加载它只能并行下载2个JavaScript文件在任何一个时间,试图保持的JavaScript文件下来,它们的大小记下电话号码(与缩小,obsfucation和gzip压缩)将有助于加载体验。

在JavaScript中使用回调函数还有助于处理javascript运行时的非阻塞项。

在jQuery的一个例子是

$('#id').click(function(){ 
    $.post('url',data,function(callbackdata){//do something 
     }); 

}); 
3

报价this answer

的Javascript资源请求 确实堵,但有办法 解决这个(即:DOM注入 脚本标记在头,和AJAX 请求)其中没有看到 页我自己很可能是什么 发生在这里。

包括相同 JS资源的多个副本是非常糟糕,但并不 不一定是致命的,而且是典型的 较大的站点可能已经 从单独 团队,或者只是普通的老坏的编码工作增生, 规划或维护。

至于雅虎的建议,在 体的底部 代替脚本,这提高percieved响应 时间,并能提高实际负荷 时间在一定程度上(因为所有的 以前的资源被允许 异步第一个),但它永远不会像 那样有效,因为非阻塞请求 (尽管它们具有技术能力的高障碍 )。

你可以看看关于Non-Blocking Javascript的YUI博客条目。

1

带有小延迟的setTimeout将允许控制流继续进行,同时调度另一个函数稍后执行。这对防止UI被阻塞或无意中依赖于其他函数的成功执行特别有用。

我觉得它是非常有用的,以防止JavaScript错误干扰绑定事件。例如,安装一个表单上的提交处理程序:

$('#form').submit(function() { 
    setTimeout(function() { 
    // Submit handler function, i.e. do an ajax submission of the form 
    $.ajax(...etc...); 
    }, 1); 
    // Return false before the handler executes, ensuring the form won't manually submit 
    // in the event of a js error in the handler 
    return false; 
}); 
-1

看一看这个jQuery plugin(http://code.google.com/p/funky-jq-plugins/wiki/nonblocking)。

它旨在使用计时器来模拟多线程环境,其中UI线程不会因要求像长列表迭代等操作而被冻结。非常酷的东西......我写的:)

侨现在