2016-04-25 77 views

回答

0

這完全取決於你的項目設置和環境。

如果您利用http/2及其通過一個通道發送多個文件的能力,是否連接文件不會影響頁面加載性能。如果不這樣做,性能將通過加載一個大文件而不是多個較小文件來提高。

如果您考慮連接文件,則不使用依賴關係加載器。這是可以的,但這意味着你需要引用html頁面中的所有文件。這很簡單,如果你只有一個連接的文件來引用,並且如果你有數百個文件有點困難。你可以使用像gulp這樣的構建工具來構建你的html,並自動包含所有的引用,但是如果你不這樣做,你將會遇到一些皇家混亂。

關於調試,您可以使用源代碼表示您可以直接在瀏覽器中調試您的打字稿,這是一個非常好的主意。就像你可以調試C#而不是編譯的IL。如果你使用的是源代碼,無論你是否連接文件,你的調試體驗都是一樣的。使用TypeScript進行開發時使用源地圖。

+0

我將此標記爲答案而不是Chiru的一個,因爲它並不是說讓一個js文件是絕對的邪惡。至少我可以想到一些優點,例如使用lite服務器監視模式時編譯時間更快。我可以混淆我的代碼以及單個js文件輸出,以使我的應用程序尤其適合遊戲應用程序)難以破​​解。 – Nick

1

Transpiling你的源代碼到一個單一的文件...

  • ...使調試難度(是的,有sourcemaps,但那麼你就必須採取不包括他們在您的生產版本護理,導致更大的建立管道)。雖然,如果您使用good transpilers,您可能已經使用源映射。
  • ...導致網站/初始渲染性能不佳(特別是對於HTTP/2,大捆現在已成爲過去,只需使用HTTP/2和類似jspm的東西)。
  • ...阻止您以可接受的方式使用熱重新加載插件(即,一旦文件發生變化,插件會自動刷新您的瀏覽器)。如果只更改一個源文件,則只應該編譯該文件;沒有必要重新構建整個捆綁包。如果您將所有內容都捆綁在文件更改上,那麼大型應用程序就變得難以維護。
  • ...不會影響您需要放入HTML文件的多少。因此,@亞歷克斯說的並不完全正確。無論如何,你的HTML應該只導入一個核心模塊;如果你把所有東西捆綁起來都沒有關係。看看System.importWHATWG Loader specjspm。也看看Akamai HTTP/2 demo

TL; DR:請勿創建單個包。這是過去的事情,並可能會因HTTP/2優化的Web服務器(和瀏覽器)而死亡。

+1

「只使用HTTP/2」 - 我們有2016年,而不是2020年。大型服務器發行版(Debian,RHEL)甚至不提供支持HTTP 2的Web服務器。而且瀏覽器,以及... – jgillich

+1

@jgillich HTTP/2已經在nginx-mainline上; nginx已經專門爲Debian和[RHEL]提供了[mainline packages](http://nginx.org/packages/mainline/debian/)(http://nginx.org/packages/mainline/rhel/)。還有一堆HTTP/2兼容的C++和節點服務器。 Google,Cloudflare或Facebook等大公司已經使用HTTP/2來提供他們的產品代碼(使用curl進行檢查)。所有主流瀏覽器都已經提供了[HTTP/2](http://caniuse.com/#feat=http2),並且默認啓用(某些強制TLS,本身並不是壞事)。那麼爲什麼還要再等四年? – Chiru

+0

1:使用打字稿時應始終使用源地圖,因此調試永遠不會因爲您連接文件而變得更難。 2/3/4。如果有人正在考慮連接文件,那麼無論如何都不會使用異步依賴加載,這是可以的。但是,除非你連接它們,否則你必須將它們全部包含在你的html中。如果沒有使用依賴加載器加載依賴關係,那麼如果不使用http/2仍然不是事實上的標準,那麼加載很多較小的文件而不是一個大的頁面加載會更糟。 – Alex

相關問題