我真的不明白RequireJS的好處。如果我使用UglifyJS縮小並連接所有文件,並在關閉</body>
標記之前放置單個生成的JS文件,那麼是否仍需要使用RequireJS?除了將15KB添加到我的頁面大小之外,RequireJS提供的UglifyJS無法獲得哪些好處?UglifyJS可以替代RequireJS嗎?
回答
使用requireJs的要點是要有一個模塊化代碼的理想方法。假設你有一個擁有數千行代碼的應用程序,你不想在一個文件中處理這一切。所以如果你開始把它分成不同的文件,你需要一種方法來以正確的順序加載所有的單個文件。當然,您可以創建20個腳本標記,並確保它們按照正確順序排列,但隨着代碼的增長,您必須添加更多腳本標記,並且必須爲每個文件找到正確的位置。這就是要求JJ有用的原因。
比方說你有一個3腳本A.js取決於B.js取決於C.js
與腳本變量:它會是這樣的:
<script src="C.js"></script>
<script src="B.js"></script>
<script src="A.js"></script>
//A.js
console.log('A' + B)
//B.js
B = 'B' + C
//C.js
C = 'C'
})
與requireJs
<script src="require.js" data-main="A.js"></script>
,並在每個腳本聲明的依賴條件:
//A.js
require(['B.js'], function (B) {
console.log('A' + B)
})
//B.js
define(['C.js'], function (C) {
return 'B' + C
})
//C.js
define([], function() {
return 'C'
})
這是一個非常簡單的例子,但重點是您不需要關心模塊的順序,因爲requireJs會以正確的順序加載。
回到你的問題,優化器更多的是附加的,所以如果你有一個適合單個文件並且仍然可以維護的小代碼庫,只需使用uglifyJs。但是,如果你想在模塊中分割你的代碼,requireJs是最好的選擇。
那麼,如果您的網站上的每個頁面使用單個文件,那麼代碼重用將會是糟糕的。
你不想複製/粘貼相同的代碼到每個頁面。這些文件也不會被緩存,這會大大增加您的頁面加載時間。
我假設OP意味着一個'main.min.js'網站包,而不是每頁一個腳本。 – Mathletics
隨着requirejs您可以在JS有你有其他編程語言相同的發展過程。
您可以編寫模塊,通過簡單地引用它們的包含文件,可以輕鬆地將這些模塊重新用於其他項目。
最終,當爲網頁寫作時,requirejs has an optimizer會將一些腳本中的模塊醜化和組合在一起。
UglifyJS和RequireJS有非常不同的用途,並且都可以適用於您的情況。
RequireJS和一般異步模塊定義背後的想法是將您的代碼分解爲更小的塊,以便於管理。在性能方面,它有兩個主要優點:
- 更快的加載,因爲你可以在平行
- 更小的空間加載多個塊,因爲你只加載你的代碼,你真的需要在當前的背景下 零件
一個很好的例子是圖表庫。瀏覽器使用不同的標準來渲染圖形:svg,vml,canvas等。圖表庫將爲每個標準提供代碼,但是在運行時它只會加載與特定設備和瀏覽器相關的部分。
- 1. webpack可以取代requirejs,commonjs嗎?
- 2. ViewPager可以替代ActivityGroup嗎?
- 3. `LockSupport.park()`可以代替Object.wait()嗎?
- 4. 可以用regex替代替換嗎?
- 5. SSRS - 我可以有替代參數嗎?
- 6. Java的FutureTask可以替代AsyncTask嗎?
- 7. CSS可以用於替代字體嗎?
- 8. `weakref`回調可以代替`__del__`嗎?
- 9. 我可以用代碼替換jaxb.properties嗎?
- 10. 可以使用Elmah代替try/catch嗎?
- 11. can tags可以代替分類嗎?
- 12. UITableViewAccessory上的圖標可以代替嗎?
- 13. redis可以完全替代mysql嗎?
- 14. 可以替代.NET的CryptoStream嗎?
- 15. Steema teechart可以替代Decision Cube嗎?
- 16. 我可以用JavaScript代替PHP,用Node.js代替Apache嗎?
- 17. 原子變量可以代替pthread_rwlock嗎?它可以鎖無
- 18. 我可以有兩個組頭文件嗎?我可以替代打印嗎?
- 19. UIWebView可以替換Safari嗎?
- 20. 我可以優化代替內容的代碼嗎?
- 21. $()總是可以取代反引號來代替命令嗎?
- 22. 可變長度參數可以代替單維數組嗎?
- 23. perl可以用自己的替代詞一次代替多個關鍵詞嗎?
- 24. 的WebPack替代RequireJS地圖配置
- 25. UglifyJS改變代碼bahaviour
- 26. UglifyJS轉換javascript代碼
- 27. 替代MySQL嗎?
- 28. requireJS - 參數替換
- 29. 我可以在移動Safari上使用user-css替代CSS嗎?
- 30. 可以使用REST代替CF10中的URL重寫嗎?
從[require.js主頁](http://requirejs.org/):「*使用像RequireJS這樣的模塊化腳本加載器可以提高代碼的速度和質量*」。我認爲這一切都說。也許還可以閱讀[Why modules](http://requirejs.org/docs/why.html)和[爲什麼選擇AMD](http://requirejs.org/docs/whyamd.html)。 – Bergi
另請參閱:http://stackoverflow.com/questions/11531091/how-much-speed-is-gained-with-requirejs-amd-in-js –
從上面的問題:「如果你的大webapp可以推遲加載您的模塊的一個子集,直到晚些時候(例如在特定的用戶操作之後),這些模塊可以單獨進行優化,並在生產中異步加載。「 –