列舉出時下最流行的Webkit內核瀏覽器,因此咱們並不會作出評測和對比。
PS:本文列舉的瀏覽器有一部分爲IE+Webkit雙核瀏覽器,若是您對其餘IE內核瀏覽器很感興趣《拋棄數據!用體驗和感受告訴你什麼纔是最好用的瀏覽器!》一文可能會對你有所幫助。
尖端技術的Webkit內核
WebKit 是一個開源的瀏覽器引擎,與之相對應的引擎有Gecko(Mozilla Firefox 等使用)和Trident(也稱MSHTML,IE 使用)。
同時WebKit 也是蘋果Mac OS X 系統引擎框架版本的名稱,主要用於Safari,Dashboard,Mail 和其餘一些Mac OS X 程序。
WebKit 前身是 KDE 小組的 KHTML,WebKit 所包含的 WebCore 排版引擎和 JSCore 引擎來自於 KDE 的 KHTML 和 KJS,當年蘋果比較了 Gecko 和 KHTML 後,仍然選擇了後者,就由於它擁有清晰的源碼結構、極快的渲染速度。Apple將 KHTML 發揚光大,推出了裝備 KHTML 改進型 WebKit 引擎的瀏覽器 Safari。
1.Google Chrome 谷歌瀏覽器
2 億活躍用戶,全球成長最快,來自 Google 的新型瀏覽器。
Chrome谷歌瀏覽器下載:http://www.jisuxz.com/down/533.html
官方網站:http://www.google.cn/chrome
2.Safari瀏覽器
它的創新功能將改進你瀏覽網頁的方式。功能強大的新工具可以幫助開發人員提高用戶的瀏覽體驗,令其更具個性化。
Safari瀏覽器下載:http://www.jisuxz.com/down/598.html
官方網站:http://www.apple.com.cn/safari/javascript
3.搜狗高速瀏覽器
以快速做爲主打的國產雙核瀏覽器,搜狗瀏覽器作的很不錯,3.1版本也升級了Webkit內核。
搜狗高速瀏覽器下載:http://www.jisuxz.com/down/598.html
官方網站:http://ie.sogou.com/
4.傲遊瀏覽器3
搭載獨立瀏覽核心,上網速度全面提高。專爲國人習慣優化,更高效,更安全,更私密!
傲遊瀏覽器3下載:http://www.jisuxz.com/down/2077.html
官方網站:http://www.maxthon.cn/mx3/html
5.QQ瀏覽器
QQ系列的新一代雙核瀏覽器產品,更多對QQ產品的支持。
QQ瀏覽器下載:http://www.jisuxz.com/down/210.html
官方網站:http://browser.qq.com/java
6.360極速瀏覽器linux
360極速瀏覽器採用了最新的Webkit內核技術,速度更上一層樓。
360極速瀏覽器下載:http://www.jisuxz.com/down/2094.html
官方網站:http://chrome.360.cn/
7.世界之窗瀏覽器(極速版)
世界之窗瀏覽器極速版基於 Chromium 瀏覽器開源項目開發,是此開源項目的一個並行分支。鳳凰工做室將逐漸參與到 Chromium 開源項目中,這樣既能夠打造更適合國內用戶使用習慣的優秀瀏覽器,也爲互聯網發展作出本身的貢獻。
世界之窗瀏覽器(極速版)下載:http://www.jisuxz.com/down/7382.html
官方網站:http://chrome.theworld.cn/
8.阿里雲瀏覽器
阿里巴巴自主開發的阿里雲瀏覽器浮出水面。產品包括PC端和手機端瀏覽器。近來,各大互聯網巨頭都開始研發自有瀏覽器,阿里巴巴在瀏覽器的佈局,有利於鞏固阿里巴巴的用戶入口,在整個「大阿里」的內循環中起到數據保護的做用。
阿里雲瀏覽器下載:http://www.jisuxz.com/down/6930.html
官方網站:http://browser.aliyun.com/index.htmlandroid
爲何搞WebKit 如今研究WebKit的人愈來愈多,俺不能免俗,也加入其中。WebKit的火爆也是得益於瀏覽器和WebOS的混戰,隨着Palm WebOS, Chrome OS, Firefox OS和Ubuntu Mobile相繼發佈,WebOS逐漸成爲Android和IOS以外的第三世界,而WebKit也隨之從瀏覽器內核晉升爲Mobile OS的內核,除了IE和Firefox以外,市面上叫得上名字的都是基於WebKit發展起來,Chrome, Safari, Opera, 360......。所以,不管你是從事瀏覽器仍是Mobile的開發,WebKit都是不二的選擇。而我目前是由於須要在WebOS上提供一個相似與Chrome for android那樣能夠遠程debug的功能,而接觸到WebKit,隨着不斷深刻,也逐漸步入WebKit的開發正軌,也是想把最近的學習歷程記錄下來,也是幫助其餘朋友進這個大門,WebKit的資料實在很少。 如何起步 我就假定你和我同樣,從沒接觸過WebKit,沒寫過c/c++,被Java/PHP等傻瓜式語言慣壞了,對設備底層技術不甚瞭解,在這種狀況下(不可能比這個更糟了),也是能夠在一週左右入這個門檻的。正式開工以前先準備如下幾步: 學習文章:http://paulirish.com/2013/webkit-for-developers/,固然也有中文版本:http://www.infoq.com/cn/articles/webkit-for-developers,弄清楚WebKit的幾個概念 準備一臺CPU和硬盤較好的電腦,CPU是爲了應付編譯,硬盤是爲了應付大規模代碼的訪問(去年7月份買的mac已不夠用,特意爲此換了SSD) 開發平臺最好是Xcode,Visual Studio也行,不過可能會遇到不少坎、 準備一本C++ Primmer Plus放在手邊,研究WebKit同時順便把C++也給攻克了 給予足夠的耐心,應付漫長的源碼下載和編譯 好了,就這麼多,能夠開工了。關於如何編譯和調試等問題,我會在後續文章中詳細介紹。 開工以前的掃盲 WebKit port WebKit已發展爲相似與Linux這樣平臺性的框架,已不是單一產品類型的開源項目。它是一個標準和變異的結合體。下面這張圖能很好說明這點: WebKit提供了像這張圖這樣的標準架構和WebCore這樣的核心庫,但灰色的其餘部分都是要根據各自平臺的不一樣而進行替換和移植,也就是談及不少的port,這裏談的平臺就是各自設備的運行環境,好比mac os x,Android和IOS,所以雖然咱是用WebKit,但能夠作的事情還有不少,WebKit只是提供了流程和框架,裏面有不少洞須要咱本身去填補的。好比,我如今作的遠程調試功能,在WebKit裏面已在流程上支持,但具體實現上是須要port的,也就致使了只有chrome for android和safari for IOS支持遠程調試。開頭介紹的文章中已羅列出哪些點是標準已實現的,哪些點是差別化的,從這裏面大概就能預計到須要作哪些東西。 學習平臺的選擇 官方的WebKit是以Safari for Mac OSX爲基礎的,Chromium雖然也是基於WebKit,但基本上已經是另一套,還有QT和GTK平臺,有不少瀏覽器,好比Opera和360都選擇了基於Chromium,那對於咱們這些初學者來講該如何選擇學習的起點呢?個人感受是,標準的WebKit門檻低一點,文檔要豐富一些,但做爲未來工程的方向,Chromium更受歡迎一些,因此,我推薦以官方的WebKit爲起點,而後再延伸到Chromium。後面我會談開發環境的搭建,基於官方的WebKit,再加上XCode,會感受手上很順滑,不至於像大多數大型開源項目那樣在最開始就把你拒之門外。 開始動手 下面我介紹動手的幾個步驟,能夠在你無需瞭解細節的狀況下,把環境搭起來,大多數包括我本身,都仍是習慣於代碼和環境搭建好狀況下,比較有心情和底氣去往下深刻,因此耐心地完成下面幾步,你就能夠在開發環境中啓動WebKit,這裏我介紹的是Mac下的狀況,但在windows和linux會困難一些,起碼我是受阻後就放棄了: 升級Mac OSX和Xcode至最新版本,個人是Mountain Lion 10.8.3和Xcode 4.6。作這個是由於個人一個哥們用的是lion,用的同樣的步驟,但啓動後一直報內存訪問錯誤,升級系統至最新後就解決了。固然,別忘記了xcode command line 取得最新代碼:svn checkout https://svn.webkit.org/repository/webkit/trunk 固然,這個過程是須要耐心的,特別是下載layout test時,爲了未來的一馬平川,忍忍吧 Xcode的菜單File->Workspace Settings->Build->Derived Data Location一欄選擇Workspace-relative,並輸入WebKitBuild->Done Xcode的菜單Product->Scheme->Edit Scheme->選擇scheme: All Source(target WebProcess), Exceutable選擇WebProcess.app 若是你是下載的是最新代碼,環境搭建僅僅只須要以上幾步,當你點擊Run後,就能夠開始順利編譯,最後會彈出Safari,實際上它的run的是webkit內核,須要一個Safari來做UI層。WebKit也提供了一個MiniBrowser,這就和Safari不要緊了,啓動方法就是在第四步上的Exceutable選擇MiniBrowser.app便可。我當初基於的代碼會有些其餘的問題,這裏就不干擾你們了,若是有遇雷的請把錯誤貼出來,我看看遇到過沒。 OK,瞭解基本概念,搭建好了開發和調試環境,我敢相信任何級別菜鳥,都會有信心往下繼續深究了。個人理念就是這樣,無論後面有多難,千萬不要把開頭搞得太複雜,這樣會拒不少人之門外,這也是我爲何推薦最開始用xcode的緣由,WebKit官方已把編譯中全部細節都隱藏在xcode的項目設置和腳本中了。後面,我會基於源碼,逐步深刻,和你們一塊兒探究WebKit內核的神奇和偉大。
WebKit最神奇的一點是JS能調到內核部分(c/c++),這是WebOS向外提供擴展能力的關鍵(實現或擴展W3C API)。要搞清楚一個JS的方法是如何調到後面c/c++的實現頗費周折,其實就是要把IDL和Bindings弄懂,先解釋一下這兩個名詞:c++
我這麼解釋估計仍是一頭霧水,那就看看WebKit爲啥須要這兩個概念。首先咱們得明白WebKit的世界裏只有DOM和DOM相關的行爲,它不認識Script,例如:web
document.getElementById('domId')chrome
WebKit知道document,也知道getElementById該作什麼事兒,但它不認識getElementById這個函數,不具有script解析和執行的能力,所以它須要第三方的解析器來幫助,這也就是JavascriptCore(JSCore)或V8須要乾的事兒。但JavascriptCore或V8很薄,能解析和執行javascript語言自己,不知道getElementById的具體實現,因此須要WebKit把具體實現注入進來,好了,說到這裏你們就大概明白爲啥須要IDL和Bindings了,其實就是爲了提供一個標準的方式(IDL),讓WebKit把JS API背後的實現注入給javascript解析器,另外,各個解析器的具體註冊和執行機制是不一樣的,因此須要有Bindings來動態生成與各個解析器結合的部分,這樣同一套標準的WebKit就能與各類解析器整合了。說了半天,看個圖就清楚了:windows
其中,V8/JSCore Bindings中包含的是基於IDL規範爲各個JS實現動態生成的產物,這些產物是會註冊到各個DOM上,並能被V8/JSCore識別,因此以v8上的document.getElementById爲例,調用流程以下:xcode
對於JSCore,流程和原理相同,只是具體的實現細節不一樣,而這個不一樣就是在bindings和JSCore中來體現,對於WebKit自己是徹底相同的,一樣的Document.cpp和Document.h標準實現能適配到不一樣的解析器上去解析和執行,這就是IDL和Bindings的精妙之處,讓WebKit既能單一又能海納百川。
以上流程中的關鍵有兩點,一是動態生成bindings這塊,另外是如何註冊和執行bindings,後面這一點因爲c/c++功力有限,沒徹底看懂,留到後面再仔細琢磨,前面這一點是WebKit強大的編譯體系中的一部分,下面詳細解釋一下。
先抽出各個不一樣編譯平臺的差別點,WebKit就是經過WebCore/bindings/scripts/中的generate-bindings.pl perl腳本生成bindings中的代碼,它在Android平臺上會被Android.derived.v8bindings.mk調用到,在mac上被DerivedSources.make調用到,其大致流程是很是清晰的:
見下圖所示:
具體的實現邏輯就看看各個腳本源碼,這裏就很少說了。另外,對於腳本的註冊和執行那塊能夠看看bindings下的ScriptController.cpp,固然,如何想看V8/JSCore中是如何調用對照表中的代碼,就須要再看看V8/JSCore自己的源碼,V8就看execution.cc,JSCore就看JITCode.h。
綜上所述,WebKit利用IDL和Bindings把本身從JS語言自己中脫離,讓本身既能夠不需瞭解JS語言,又能實現JS API背後的邏輯,妙哉!