chrome使用的開源工程介紹

來源:互聯網
上載者:User

在chrome地址欄輸入about:credits就可以看到chrome使用的開源工程了,之前也有一篇介紹chrome開源工程的文章:Code Reuse in Google Chrome Browser,大家可以參考一下。

 

David M. Gay's floating point routines homepage

fp是netlib的一部分,主要用於浮點數運算,數的二進位與十進位的轉換以及字串和浮點數之間的轉換等。這種庫在程式移植到嵌入式裝置時非常重要,如果移植的不好,可能出現浮點運算錯誤,或者在進行浮點運算時非常慢的問題。這個庫裡面實現的比較重要的函數有:strtod,dtoa,pow5mult,diff,cmp,lshift等。David M. Gay的這個庫被廣泛使用,例如Apple Libc也是使用的這個。如果在移植瀏覽器時出現調用dtoa進入死迴圈的問題,就需要特別注意編譯fp庫時的宏定義了。chrome用這個庫的一個原因是js裡面的Number都是double類型的,所以js引擎必須能夠正確和快速的處理浮點數。chromde的V8還實現了FastDtoa用來更快速地處理字串和浮點數之間的轉換。

 

 

dynamic annotations homepage

這個庫主要用來檢測死結的。這個庫的另外一個作用是來讓代碼偵查工具(例如valgrind)智能點,並少報一些警告。例如下面是chrome裡面實現多安全執行緒singleton模式的一段代碼:

 // This annotation helps race detectors recognize correct lock-less      // synchronization between different threads calling get().      // See the corresponding HAPPENS_AFTER below and above.      ANNOTATE_HAPPENS_BEFORE(&instance_);      base::subtle::Release_Store(          &instance_, reinterpret_cast<:subtle::atomicword>(newval));      if (Traits::kRegisterAtExit)        base::AtExitManager::RegisterCallback(OnExit, NULL);

 

Netscape Portable Runtime (NSPR) homepage

NSPR是Mozilla開發的一個跨平台庫,它主要提供了類型定義,線程,線程同步,檔案,網路,時間處理,記憶體管理等的API,NSPR API比較明顯的一個特徵是以PR開頭,例如PRInt32,PRThread,PR_CreateThread。它在程式和系統之間的關係如:

NSPR被很多跨平台應用使用著,例如SpiderMonkey的安全執行緒就是依賴NSPR實現的,《C++跨平台開發技術指南》這本書裡面也提到了NSPR。chrome只是用到了NSPR的類型定義(prtypes.h)和時間處理(prtime.cc),chrome裡面用NSPR主要是因為NSS和NPAPI依賴其的緣故。

 

 

Network Security Services (NSS) homepage

NSS主要用來支援網路安全,例如SSL協議,S/MIME,一些密碼編譯演算法(SSL,TLS,PKCS等)。NSS是和OpenSSL差不多的東西,它比OpenSSL大,依賴的也比OpenSSL多,但是它支援PKCS #11,可以用於智慧卡的加密。既然用了NSS,Chrome也就沒必要用OpenSSL了。

 

 

purify headers homepage

Rational Purify是一個IBM出的自動化測試載入器,主要用來檢測記憶體相關的錯誤。

 

 

google-glog's symbolization library homepage

google-glog主要用於日誌記錄,類似的工程有log4cpp,java中對應的叫做log4j。google-glog在google的工程中被廣泛使用,例如google-breakpad(一個用於崩潰報告的項目,對應的服務端有http://code.google.com/p/socorro/),當chrome出現下面的對話方塊時,就是google-breakpad檢測出來的。

 

 

valgrind homepage

Valgrind是一款用於記憶體調試、記憶體流失檢測以及效能分析的軟體開發工具。google的測試工作做的挺好的,不但測試載入器多,而且大部分cc檔案都有對應的測試代碼,一般和cc檔案處於同級目錄,名字叫做xxxxx_unittest.cc。

 

 

xdg-mime homepage

xdg-mime是一個根據檔案名稱和檔案內來判斷檔案類型(mime資訊)的工具。

 

xdg-user-dirs homepage

xdg-user-dirs是一個用於linux平台上管理案頭檔案夾,我的音樂,我的圖片等檔案夾的工具。chrome在linux上設定chrome下載檔案夾時用到了此功能。

 

BSDiff homepage

BSDiff是一個二進位比較工具,對應的還有bspatch。像svn diff這種工具只能比較文本等檔案,而不能比較二進位檔案。

chrome用BSDiff幹什麼呢?用來chrome的自動升級,具體請參考:Software Updates: Courgette,摘取其中一段來看看效果

Here are the sizes in bytes for the recent 190.1->190.4 update on the developer channel:

Full update                 10,385,920

bsdiff update              704,512

Courgette update      78,848

二進位比較還有一些其它的演算法,例如rsync,這個在同步檔案時非常有用,Dropbox同步採用的演算法也是rsync。自動升級其實就是一個同步操作。

 

 

XZ Utils homepage

XZ Utils是一種依賴於LZMA SDK(7z也是採用這個)的壓縮公用程式。chrome用XZ Utils做chrome安裝程式的壓縮。

 

 

google-jstemplate homepage

google-jstemplate是一個js模板處理庫,比較適合ajax程式,有點像struts。有一份介紹的ppt在http://google-jstemplate.googlecode.com/svn/slides/jstemplate.html。

 

 

Launchpad Translations homepage

Launchpad Translations是用於chrome多語言支援的檔案。chrome主要是通過GRIT (Google Resource and Internationalization Tool) 將xtb和grb檔案編譯成h檔案,然後放到資源檔(.rc)裡面。更多多語言支援的細節請參考http://www.chromium.org/developers/design-documents/ui-localization,Chromium本地化的方法和chromium之國際化。

 

 

Mozilla Personal Security Manager homepage

Mozilla Personal Security Manager主要用於linux系統的認證管理,文檔可以參考:http://www.mozilla.org/projects/security/pki/psm/arch.html。windows上與此相似的就是如下東西了:

 

gssapi homepage

gssapi的全稱是Generic Security Services Application Program Interface,它提供讓程式能夠訪問安全服務的應用程式介面,與它相關的技術有RADIUS,SASL,TLS和SSPI等。對於安全認證時的授權協商,在windows上chrome使用的是secur32.dll提供的SSPI(Security Support Provider Interface),而linux上則是使用gssapi。更多HTTP認證的資訊可以參考:http://www.chromium.org/developers/design-documents/http-authentication

 

 

Google Toolbox for Mac homepage

主要用於chrome在mac上的實現。當然Google Toolbox for Mac並不只是為了chrome,還用於google在iphone和mac上的其他產品。

 

WebKit homepage

webkit是什麼就不說了,chrome的核心就是WebKit。

 

ActiveX Scripting SDK homepage

還不清楚chrome用ActiveX Scripting SDK做什麼,也沒在chrome裡面找到相關代碼。可能和外掛程式相關,用於支援object標籤。

 

 

Almost Native Graphics Layer Engine homepage

簡稱叫做ANGLE。chrome用ANGLE主要是為了用DirectX 9實現WebGL功能。chrome為什麼不用opengl實現了?原因是windows opengl的各個版本是二進位不相容的。微軟的相關解釋在http://support.microsoft.com/kb/124034/zh-cn,“也就 OpenGL 程式二進位層級不相容,但在原始碼層級都相容”,也就是說一個opengl程式要能夠在特定版本的windows上運行,必須在那個平台上重新編譯。另外,各個顯卡的驅動對opengl的支援程度也不近相同。windows上3D編程的真正標準是DirectX,導致chrome也必須用WebGl來實現weebgl(safari也是如此)。DirectX和OpenGl之間的戰爭與IE和netscape的戰爭有得一拼,可以參考http://www.cppblog.com/xczhang/archive/2007/12/09/38105.html。linux和mac os上opengl就是其的主要3D API,所以不存在問題。

 

Apple sample code homepage

蘋果的開發人員中心,裡面有很多文檔和例子,相當於微軟的msdn網站。在mac和iphone上編程可以參考一下,寫html5的開發人員也可以看一下http://www.apple.com/html5/,裡面有很多蘋果的html5 demo。蘋果的開源工程也在裡面(http://developer.apple.com/opensource/,http://opensource.apple.com/source/)。另外,很多人抱怨webkit沒有文檔,其實蘋果寫了很多關於webkit的文檔,例如WebKit Objective-C Programming Guide。

 

Darwin homepage

Darwin是由蘋果電腦的一個開放原始碼作業系統. 蘋果和開源的關係很有趣,可以參考劉江寫的《蘋果的另一面:開源軟體重鎮》。

 

bsdiff homepage

Mozilla實現的前面提到過的BSDiff演算法。

 

bspatch homepage

Mozilla實現的前面提到過的BSPatch演算法。

 

bzip2 homepage

又一個壓縮演算法,比gzip壓縮率更高。bzip2主要用來支援HTTP裡面的內容編碼格式(Content Codings),chrome支援的Content Codings經常在變化,可以參考Google Chrome支援bzip2壓縮和chrome支援sdch壓縮,另外不再支援bzip2壓縮。從我使用的chrome 13版本看,chrome支援gzip,deflate,sdch,而不支援bzip2壓縮。

 

Google Cache Invalidation API homepage

用於chrome的緩衝管理。chrome使用的是disk cache來實現緩衝的,需要用Chrome Cache Viewer等工具才能看disk cache產生的檔案。

 

 

Compact Language Detection homepage

主要用來檢測是什麼語言,用於chrome的拼字檢查,更詳細的請參考http://www.chromium.org/developers/design-documents/advancedspellchecker。

 

codesighs homepage

又一個代碼偵查工具,Mozilla的,文檔在https://wiki.mozilla.org/Codesighs,主要作用是檢測代碼的大小。

 

expat homepage

一個xml解析庫,和libxml是一類的,不過要比libxml輕量。

 

 

ffmpeg homepage

主要用來音頻和視頻的處理,例如錄製和轉換。一些軟體具備將pc上的視頻轉換到手機上視頻的能力,很多用的就是ffmpeg,例如豌豆莢就是這麼乾的。chome用這個庫主要用來支援html的video和audio。

 

 

OpenGL ES 2.0 Programming Guide homepage

OpenGL教材。

 

OpenGL ES 2.0 Conformance Tests homepage

OpenGL相容性測試。

 

 

gpsd homepage

一個GPS服務,主要用來擷取地理位置。html5有擷取地址位置(geolocation)的API,可以參考http://dev.w3.org/geo/api/spec-source.html和http://diveintohtml5.org/geolocation.html。gpsd就是用來在linux上實現html5 geolocation的。

 

 

Harfbuzz homepage

用於文本渲染,不太熟。在搜尋Harfbuzz相關技術時找到了幾篇不錯的文章:閑聊文本渲染技術的近期發展,瀏覽器如何渲染文本,漢字的幾何中心 。

 

hunspell homepage

一個拼字檢測的庫。很多軟體都是用這個庫做拼字檢測,例如LibreOffice, OpenOffice和Firefox。

 

hunspell dictionaries homepage

hunspell的詞典。

 

hyphen-2.6 homepage

主要用於hunspell拼字檢測裡面的連文書處理。

 

IAccessible2 COM interfaces for accessibility homepage

Windows上用於殘疾人士的一些功能。

 

iccjpeg homepage

用於jpeg圖片的處理。

 

ICU homepage

國際化(I18N)的處理。ICU是最大的一塊,有12MB左右,如果只需要支援幾種特定的語言,可以用http://apps.icu-project.org/datacustom/來產生小尺寸的ICU。

 

Chinese and Japanese Word List homepage

中文字和日文字,ICU的一部分。

 

ISimpleDOM COM interfaces for accessibility homepage

用於殘疾人士,對於連結裡面有詳細的介紹。

 

jemalloc homepage

一個malloc實現,主要用在firefox上,比libc裡面的malloc快。

 

lcov homepage

程式碼涵蓋範圍測試載入器,下面的圖片應該熟吧:

 

 

libevent homepage

libevent是一個非同步事件處理軟體函式庫,對於伺服器編程的人應該熟吧,很多伺服器端就是用libevent來解決C10K問題的。chrome用這個好像是用於裡面的flip server,通過flip server可以實現spdy協議。spdy是google研究的新協議,比HTTP協議更高效,可以用來幹什麼自己google。

 

libjingle homepage

GTalk裡面實現視訊交談和P2P功能的庫。GTalk使用的XMPP協議,但XMPP對檔案傳輸和視訊交談支援都不行,Google就自己開發了一個,現在已成了XMPP標準的推薦擴充。chrome用這個幹什麼呢?用來同步書籤等。chrome最近還在做的P2P API也是基於這個庫。

 

libjpeg homepage

處理jpeg的庫

 

libjpeg-turbo homepage

用MMX, SSE,和SSE2 SIMD指令加速處理JPEG的庫。

 

libpng homepage

處理png圖片的庫

 

libsrtp homepage

libsrtp是一個實現SRTP協議(Secure Real-time Transport Protocol,安全即時傳輸協議)的庫。chrome的WebRTC就是基於SRTP協議實現的,libjingle也使用了libsrtp。

 

libvpx homepage

libvpx 是一個開源的WebM(VP8)編碼解碼器.WebM是一個由Google資助的項目,目標是構建一個開放的、免著作權費用的視頻檔案格式。該視頻檔案格式能提供高品質的視頻壓縮以配合HTML 5使用。

 

 

libwebpdecode homepage

與WebM對應,WebP是Google開發的一種新的圖片格式,屬於有損壓縮,影像檔大小平均比JPEG格式縮小39%。

 

libxml homepage

xml解析庫,webkit要用。

 

libxslt homepage

用於xslt處理,webkit要用。

 

LZMA SDK homepage

7z的sdk,用於安裝包的壓縮。

 

MesaLib homepage

3D圖形庫,OpenGL的一份實現。

 

modp base64 decoder homepage

用於Base64解碼。在處理data協議時有用。

 

NSBezierPath additions from Sean Patrick O'Brien homepage

用於mac os上的圓角矩形,陰影等的處理。

 

Mongoose homepage

一個web server。

 

Cocoa extension code from Camino homepage

Camino是Mac OS X上的一個開源瀏覽器,chrome在mac上的擴充實現參考了Camino。

 

npapi homepage

webkit和firefox的外掛程式API。

 

OCMock homepage

Mac上實現類比對象(Mock Object)的庫,主要用於測試。

 

OpenMAX IL homepage

多媒體應用程式的架構標準.

 

openssl homepage

實現了SSL及相關加密技術的軟體包.

 

OTS (OpenType Sanitizer) homepage

OpenType是一種可縮放字型,用來替代TrueType。OTS用於OpenType字型的處理。

 

pdfsqueeze homepage

mac系統上pdf檔案處理。

 

ppapi homepage

新的外掛程式API,比NPAPI有很多地方做了改進。

 

protobuf homepage

一種序列化協議,網上有很多介紹。

 

pyftpdlib homepage

python版的ftp server庫。

 

pywebsocket homepage

python版得websocket server服務端,用於測試websocket。

 

qcms library homepage

用於顏色管理,更詳細的介紹可以參考http://muizelaar.blogspot.com/2009/06/qcms-color-management-for-web.html。

 

Google Safe Browsing homepage

用於Google的安全瀏覽(Google Safe Browsing),至於安全瀏覽是什麼看下面的圖就清楚了:

 

simplejson homepage

用於JSON處理。

 

skia homepage

skia是什麼就不說了,android和chrome都在用。

 

speex homepage

用於壓縮聲音,對人的聲音壓縮率比較高。

 

SQLite homepage

本機資料庫,用於實現html5裡面的database api。

 

swig homepage

主要是為了方便Perl, PHP, Python,Java等語言調用C/C++,swig可以產生c/C++代碼的Perl, PHP, Python,Java等語言wrapper代碼。比Java產生JNI代碼的做法更進階。

 

talloc homepage

記憶體池。

 

tcmalloc homepage

malloc的實現,速度超快。

 

tlslite homepage

實現SSL 3.0, TLS 1.0, 和TLS 1.1的python庫

 

undoview homepage

gtk+擴充,用於支援文本編輯框的無效次數的undo,高亮等。

 

Webdriver homepage

Web應用程式測試載入器。

 

WTL 8.0 homepage

Windows Template Library,chrome在windows上的UI控制項是在此基礎上開發的,也就是windows上chrome ui = skia+WTL.

 

xdg-utils homepage

XdgUtils是linux上一系列工具,包括前面提到過的xdg-mime。

 

XUL Runner SDK homepage

主要用於XPCOM開發。

 

yasm homepage

NASM彙編器。

 

zlib homepage

壓縮和解壓庫。

 

Strongtalk homepage

StrongTalk是SmallTalk的變種,用了最佳化的類型系統。StrongTalk的優點是用類型反饋技術來加快運行速度,相關介紹可以參考http://blog.csdn.net/g9yuayon/archive/2006/09/13/1217364.aspx。chrome裡面的v8使用了Strongtalk assembler,可以參考V8 Javascript engine之所以快

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.