2012-05-08 41 views
0

任何人使用LabJs與JavaScriptmvc一起竊取?意思是在子級別尋找依賴加載,並利用LabJ的異步性能增益。實驗室js + Javascriptmvc竊取

a.js

.....

竊取(../ b.js) 。然後(../ c.js)//c.js要求b.js和d.js被加載之前可以加載

b.js

.....

竊取(../ d.js)//(需要加載d.js當b .js調用,加載d.js以獲得更好的分類和維護)

任何關於labjs + steal的文章或經驗都會很棒。

回答

0

竊取是要建立你的生產應用程序到一個單一的JS文件。你可以根據需要加載該文件。

0

撇開竊取建立你的單個文件的時刻...

嵌套每個腳本里面標註依賴的概念是指,其本身不能充分利用並行加載,這是因爲加載器不知道A依賴哪些腳本,直到完成加載A並可以看到它需要B和C.當然,一旦知道了B和C,它就可以並行加載這兩個腳本,但它不能加載B C和A並行執行。

另一個問題是LABjs(以及大多數其他動態腳本加載器)嚴格來說具有非阻塞行爲,所以如果加載一些類似這樣的腳本,您將遇到問題:

一個 - 依賴於B和C

d - 取決於A和E

當A完成加載,然後你開始加載B和C,你不能原生(沒有額外的預先努力)使D等到B和C(以及A)完成。

這背後的原因很難解釋,但足以說,這種情況對於使用嵌套依賴註釋的動態加載而言是有問題的。


但是,如果你知道在一開始的依賴關係樹(也就是,你不等待加載腳本來了解他們的嵌套依賴註解),您可以輕鬆地利用動態並行加載同時確保訂單得到保留。您可以容易做到這一點:

乙 Ç 一個 é d

與負載並聯他們所有5個,同時還確保他們在正確的順序執行的注意。找出依賴關係樹和必要的執行順序的最好方法是建立一個構建過程,遍歷所有腳本並計算出列表和必要的順序。

使用LABjs,高於鏈看起來像這樣:

$ LAB.setOptions({AlwaysPreserveOrder:真})腳本([B,C,A,E,d]);。

非常簡單直接,假設您一開始就知道該列表/訂單是什麼。只需讓你的構建腳本將這一行代碼放入你的HTML頁面,然後繁榮,你就很好。

如果你沒有這樣的構建腳本來做到這一點(我有我自己的,我已經建立了我需要這種類型的東西不同的項目),你有兩個選擇:

  1. 請勿使用嵌套依賴關係註釋。自己管理你的依賴列表(上面的列表),並確保它的順序是正確的。十年或更長時間以來,人們在瀏覽器中使用腳本標籤的方式工作得很好,因此對於大多數站點而言可能已足夠。我在我手動管理的許多網站上都有LABjs連鎖店,完全沒有問題,其他數千個使用LABjs的網站也是如此。

  2. 使用一個構建腳本(如Steal),將它們全部放在一個文件中(當然,它也必須找出正確的順序!)。你沒有得到並行加載的好處。遊民。

希望這可以解決眼前的問題。