chromium源代碼為什麼那麼大,我們用的不是只有幾十m嘛?

難道所有平台的都在一起?

也不至於這麼大吧


提高 target/source ratio 的利器是 table。像 Photoshop 1.0 里各種加速計算的 look up table。大的 string map。現在遊戲里的 texture(也是一種 table),普通 app 里的 icon 和 image。Chromium 里就是沒什麼 table 吧。


對於一個合理利用軟體工程的、面向全球用戶的項目來說,一大堆代碼編譯出exe只剩下一點點是正常現象。


引用一個國外網友的腦洞:

你用來擦屁股的衛生紙,10%是用來擦屎,90%是用來防止屎沾在手上。


幾十個MB其實都已經是失控了。一個項目如果用C寫,不包含圖像等非程序資源,編譯和鏈接出來的二進位代碼總量到1MB就是一個非常大的數字了,到10MB簡直是巨獸項目。複雜如Linux Kernel,也是10MB的量級(不算驅動模塊)。一個應用已經有了功能超級豐富的運行庫(操作系統內核)可以利用,還要變成巨獸項目,實在是很不應該的

當然C++項目另說,C++的模版是史上最差勁的設計決定之一。C++如果去掉模版回到CFront的設計,那麼要好上100倍。可惜沒有如果


chrome iOS源碼在2.3MB左右,而通過這個鏈接(https://chromium.googlesource.com/chromium/src.git/+/58.0.3029.45)下載的chrome v58tar.gz解壓前在875MB左右,解壓後會超過2GB

通過查看後者目錄結構,可以發現它包括了android、iOS、chromecast、chromeOS等各個平台的基礎模塊;

其中最大的目錄是chrome/目錄和UI目錄,chrome/目錄是Chrome瀏覽器最核心的部分,chromium內核。

而chrome/目錄中又包括了chromeOS、iOS、android、windows、Mac等各個平台的核心代碼


然而40GB的AOSP源碼編譯成image文件加起來大概也就不到2GB


努力寫出即便是release下面,也能編譯出來很大的dll的方法。。

免得被別人說沒幹活


哥們,你用的是二進位的

另外確實是所有平台都在一起,win,linux,chromeos,cocoa

然後這裡面還包含了一半多的thrid_party,大量的unittest


為什麼宇宙第二的計算機算了幾百年只得出一個42就沒了…


chromium編譯出來的50M大小。其中各國的翻譯文字和一些圖片資源佔了大頭……


除了包含多個平台的代碼,還有很多用於輔助和測試的代碼。

C/C++不方便用依賴管理工具來管理依賴庫,所以被chrome依賴的第三方庫的源代碼,也成了代碼的一部分。

功能測試需要輸入數據,對於一個可以播放視頻的瀏覽器,它的代碼也就存放了不少視頻文件,動輒幾十M。


裡面還有歷史版本


安卓6.0源碼大概五百多GB……想想你的刷機包多大……


chrome 的代碼讀的不多,但是我知道chrome項目依賴了上百個各種庫,那些庫基本上都是整個整個往裡拖的,不管最終用沒用到部分,反正是一個庫一個庫的代碼和相關資源都進來了……另外還有各種附屬工具、測試腳本,多了去了。

其實這也沒什麼不妥,畢竟人家的主要開發活在美帝,網速超好還沒有強。


Linux內核的源碼更大,而定製編譯一個最小可用的內核卻可以很小,可能不到1MB。。。

對了,android源碼更恐怖。。。


因為有test


為什麼iPhone設計團隊需要幾百幾千人外加各種大型機器運作最後用的時候只需要一個人操控手掌一樣的大小的機器?


推薦閱讀:

有哪些優秀、可以作為學慣用途的 C 語言源碼或開源項目?
自己寫的代碼太丑不敢開源怎麼辦?
GCC是在GPL協議下發布的,那麼使用了GCC標準模板庫的軟體也要受到GPL的傳染而被要求開源嗎?
請問陳碩博客中使用的繪圖軟體是什麼?

TAG:GoogleChrome | 開源 | 編譯 |