2012-09-02 105 views
74

這對網絡傢伙來說可能是一個愚蠢的問題。但我對此有點困惑。現在,我有一個應用程序,我正在使用幾個Javascript文件來執行不同的任務。現在,我正在使用Javascript bundler來合併和縮小所有文件。所以,在運行時只會有一個app.min.js文件。現在,Requirejs用於在運行時加載模塊或文件。所以,問題是如果我已經在一個文件中有所有東西,那麼我需要requirejs嗎?或者,我可以使用requirejs和/或bundler的用例場景是什麼?何時使用Requirejs以及何時使用捆綁的JavaScript?

請讓我知道是否需要任何進一步的細節。

+1

我不明白你爲什麼需要這兩個。你認爲你會嗎? – nnnnnn

+2

這是一個混亂。何時使用什麼?或者只需要選擇一個? – kunjee

回答

27

這是許多精通JavaScript開發人員之間的爭論激烈的話題。許多其他語言都有一個「編譯」階段,整個程序被捆綁部署(JBoss的.WAR文件出現)。來自更傳統背景的程序員通常喜歡這種方法。

的Javascript在最近幾年已經看到這樣的增長,這是很難準確的圖表的最佳做法,但那些欣賞的JavaScript功能更強大的性質往往更喜歡的模塊加載方式(如require.js使用)。

我寫Frame.js這很像require.js,所以我的偏見是對模塊加載程序的方法。

要直接回答你的問題,是的,它是一個或另一個。

,對於包裝你的腳本到一個文件中認爲大多數人認爲它使更多的壓縮,因此效率更高。我相信在大多數情況下,封裝的效率優勢可以忽略不計,因爲:(1)模塊加載時間分佈在整個會話中,(2)單個模塊可以壓縮到幾乎相同的百分比,(3)單個模塊可以被緩存服務器和路由器,以及(4)僅在需要時才加載腳本,最終可以讓您爲一些用戶加載較少的代碼,並在整體上編寫更多的代碼。

從長遠來看,如果你可以看到一個優勢,動態腳本加載使用它。如果沒有,請將您的腳本捆綁到一個文件中。

+5

雖然我瞭解分開保存文件的好處,但我認爲綁定還可以減少所需的http連接數。隨着瀏覽器和服務器的流水線變得越來越廣泛,這可能會更少,但目前這是一筆相當大的交易。 –

+4

如果應用程序很大,http連接開銷可以快速安裝。對於我們的應用程序,當我們在解包模式下運行它並單獨加載每個JS文件時,僅需加載頁面大約需要15-30秒。在打包模式下,它大約一秒鐘。 –

+0

單個打包的緩存文件顯然要比讀取幾十個或幾百個文件快得多,您永遠無法確定是否加載了這些文件,或者加載它們需要多長時間。因此將所有內容轉儲到客戶端更好。在大多數情況下,這個單個文件無論如何都不會通過1mb大小,在縮小和壓縮後可能會少得多。所以,單文件FTW。 – vsync

46

通常,您在開發過程中只使用RequireJS的加載形式。一旦網站完成並準備部署,您就可以縮小代碼。這裏的優點是RequireJS確切地知道你的依賴關係是什麼,因此可以很容易地按照正確的順序縮小代碼。下面是它說的RequireJS website

一旦你完成了做開發,並希望部署代碼爲最終用戶,則可以使用優化相結合JavaScript文件一起,然後再縮小它。在上面的例子中,它可以將main.js和helper/util.js組合成一個文件並縮小結果。

+4

我知道這是一個古老的線索,但我偶然發現,因爲我有類似的疑問。所以,後續問題,如果您不介意的話 - 如果我們最終將所有內容都捆綁到一個文件中進行部署,那麼我的整個應用程序會一次加載,而不是零碎(按需)加載。這與AMD不矛盾嗎? –

+5

是的,從某種意義上說。但AMD更理論化,因爲requirejs也關心現實世界的性能問題。單獨加載每個模塊肯定是更清潔,更純粹,但將永遠:) –

+1

我也把這個問題,所以看到http://stackoverflow.com/questions/20515679/requirejs-to-bundle-or-not-to-捆綁/ 20518314?noredirect = 1#20518314。也許這兩種方法之間的中點? –

11

這取決於您的應用程序。如果你只用適度的javascript製作一個服務器端應用程序(小於100kb縮小),然後去捆綁捆綁,你可能會沒事的。

但是,如果你正在做一個JavaScript應用程序,並有一噸的在它的代碼,那麼您的需求將是不同的。

例如,在我的應用程序中,我捆綁了所有的核心文件。有jQuery,下劃線,主幹,我的主要應用程序文件,我的用戶登錄系統,我的佈局系統,我的通知和聊天系統,都是我最大的初始文件的一部分。

但我有很多其他模塊,以及不是初始包的一部分,在那些之後加載。

論壇,維基,wysiwyg,顏色選擇器,拖放,日曆和一些動畫文件是第二類的一部分。您需要立即做出合理的決定,瞭解常用和需要的內容,以及可能推遲的內容。

如果我立即包括所有東西,我可以得到超過一大小的JavaScript,這將是瘋了,並使初始啓動無法接受的緩慢。

第二個類別在initSuccess事件從最初的文件觸發後開始下載。

但是第二類比第一類更聰明,因爲它首先加載了更重要的東西。例如,如果您正在查看wiki,它會在加載顏色選擇器之前加載wiki。

相關問題