2009-07-10 73 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線程不會因要求像長列表迭代等操作而被凍結。非常酷的東西......我寫的:)

僑現在