都用WebKit并不意味著Web的統(tǒng)一
WebKit究竟是什么?
最近WebKit這個(gè)詞鋪天蓋地,它究竟是什么意思呢?
官方解釋:WebKit是一個(gè)開源的Web瀏覽器引擎。WebKit同時(shí)也被MacOS X系統(tǒng)的Safari、Dashboard、Mail和很多其他OS X程序選用為引擎。WebKit的HTML解析器和JavaScript解析器代碼分別源自KDE的KHTML和KJS代碼庫。
這就是在說,WebKit是Safari背后的瀏覽器引擎。還需要補(bǔ)充的是,Apple在Safari里面使用了自己的Nitro JavaScript引擎(只用WebKit來渲染HTML)。
有意思的是WebKit現(xiàn)在已經(jīng)不僅僅是蘋果在使用,它現(xiàn)在還是Google Chrome的內(nèi)核:
Google官方說明:Chromium使用WebKit做為渲染引擎。與其打造Chromium特有的實(shí)現(xiàn)方式,我們更希望去盡可能多的去為使用WebKit核心的瀏覽器做貢獻(xiàn)。
這是說Chrome也在使用Nitro JS引擎?不,Chrome有他自己的V8 JavaScript引擎。簡單的說,Chrome也使用WebKit,但是它也實(shí)現(xiàn)了自己的JavaScript處理方式。V8同時(shí)還是驅(qū)動(dòng)Node.js的JavaScript引擎。
Opera會(huì)使用Chromium實(shí)現(xiàn)的WebKit,也會(huì)使用V8引擎。這就是說雖然Opera在宣稱自己使用WebKit,但事實(shí)上它使用WebKit和Safari與其他瀏覽器使用的WebKit并不完全一樣。如果你想客觀了解現(xiàn)狀,這是必須清楚的概念。
現(xiàn)在WebKit究竟有多少分支?
所以我們知道現(xiàn)在WebKit正在驅(qū)動(dòng),或者將會(huì)驅(qū)動(dòng)3個(gè)主流瀏覽器。但是WebKit還有多少其他類型的實(shí)現(xiàn)?
確實(shí)還有很多很多WebKit的變種,特別是在移動(dòng)領(lǐng)域。他們都是WebKit的分支。
這些WebKit的分支有多少差別?
有一種假設(shè):因?yàn)檫@些瀏覽器都在使用WebKit,所以他們也會(huì)以同樣的方式去支持相同的特性。對(duì)于很多基本的特性來說,確實(shí)是這樣。但是對(duì)于很多小眾特性,就未必如此了。
舉例來說,當(dāng)Chrome開始支持游戲手柄API的時(shí)候,Safari不但還沒開始支持,而且以后也不太可能支持。另一個(gè)例子是WebGL。做為在 Chrome已經(jīng)支持了很久的特性之一,Safari卻才剛剛看到了曙光(而且還是在開發(fā)者選項(xiàng)里)。當(dāng)然,這些還都是比較出名的例子。還有很多試驗(yàn)性的 例子潛伏在大眾的視野之下。
甚至很多基礎(chǔ)的、日常的功能,在不同的代碼分支下都有所不同。PPK完整的總結(jié)了這些WebKit的差異。
新特性如何加入到WebKit中,誰又來負(fù)責(zé)審核?
現(xiàn)在有許多公司正在為WebKit項(xiàng)目貢獻(xiàn)自己的力量。
WebKit項(xiàng)目提交和審查頁面提到只能有老的代碼提交員和審核員才能提名新的新的代碼提交員與審核員。這比較合理。然而,無論WebKit項(xiàng)目決定讓誰參與進(jìn)來,最終都還是要讓Apple來做審核:
當(dāng)有人被WebKit代碼提交員成功提名后,Apple會(huì)處理發(fā)送代碼提交員協(xié)議,在簽署協(xié)議之后,Apple會(huì)繼續(xù)開通SVN賬戶。
對(duì)于這一點(diǎn)并沒有什么隱秘的動(dòng)機(jī),但這確實(shí)在告訴大家,WebKit和很多開源項(xiàng)目一樣,并不是真正分散和民主的。權(quán)利是且必須是集中的——只有這樣才能保證能做出決定,并且把事情做成。
如果一個(gè)瀏覽器遷移到了WebKit,那是不是意味著(在編寫代碼的時(shí)候)可以少測(cè)試一個(gè)瀏覽器了?
不。每個(gè)瀏覽器都有它自己的怪異模式、性能差異、設(shè)計(jì),和功能。所以每個(gè)瀏覽器都要測(cè)試。
當(dāng)一個(gè)功能加入到WebKit的時(shí)候,是不是意味著在其他瀏覽器里就可以使用這功能了?
當(dāng)然不是。比如游戲手柄API的例子。Paul Irish強(qiáng)調(diào)了這樣一個(gè)事實(shí):WebKit瀏覽器們可以挑選究竟把哪些API放入他們的版本。比如Chrome選擇支持游戲手柄API。很多API在WebKit的層面就已經(jīng)被實(shí)現(xiàn)了,但是WebKit項(xiàng)目書允許關(guān)閉這些功能。(編者注:Paul Irish是Google Chrome的員工,他曾在jQuery團(tuán)隊(duì)工作兩年。)
Opera遷移到WebKit究竟意味著什么?
它意味著Opera將會(huì)為WebKit項(xiàng)目投入開發(fā)精力,但是更可能的是,意味著這Opera將會(huì)在有經(jīng)歷為自己的瀏覽器打造一些其他的功能。
遷移到WebKit意味著我們可以把更多開發(fā)資源投入到新功能和增進(jìn)用戶體驗(yàn)的解決方案上去。
這也意味著他們不會(huì)再繼續(xù)開發(fā)他們的自有Web渲染引擎Presto。
同源和多樣化
上面的問題和回答告訴我們,WebKit們很明顯有著相同的源頭。在不同的瀏覽器版本里他們又有著不同的實(shí)現(xiàn),但是歸根結(jié)底,他們共享著相同的代碼庫。
這意味著你可以為移動(dòng)互聯(lián)網(wǎng)、為性能、為任何你能想到的目標(biāo)來優(yōu)化WebKit。這是件好事兒。而且這必然會(huì)帶來各種各樣的WebKit實(shí)現(xiàn),并為解決問題引入更多資源。在最理想的情況下,這些進(jìn)步會(huì)回饋給每個(gè)人。
這會(huì)帶來非常多好處。這也是我們?yōu)槭裁聪嘈?,有完全不同的一群人,來打造一個(gè)瀏覽器渲染引擎是非常重要的。
Apple在KHTML上構(gòu)建WebKit是一件好事情。他們當(dāng)初也可以選擇在Gecko上做這件事情(編者注:Gecko是Firefox的引擎),但他們選擇了創(chuàng)新,給市場(chǎng)增加了多樣性,還帶領(lǐng)瀏覽器在過去幾年里取得了巨大的進(jìn)步 —— 這就是競(jìng)爭帶來的直接結(jié)果。
如果他們只是做了另一個(gè)版本的Gecko,那我們也不確定我們今天會(huì)是個(gè)什么情況。
渲染其實(shí)并不相同
把WebKit先撇一邊兒,如果所有的瀏覽器都使用相同的引擎,這對(duì)程序員來說意味著什么?這種情況真的會(huì)發(fā)生嗎?Web會(huì)因此更加美好嗎?對(duì)開發(fā)者來說工作會(huì)不會(huì)更輕松一些?
最大風(fēng)險(xiǎn)在于程序員們?nèi)绻嘈胚@些瀏覽器如果都在使用完全相同的渲染引擎,那么:
- 開發(fā)者不會(huì)再測(cè)試那么多瀏覽器了,因?yàn)樗麄冋J(rèn)為反正瀏覽器都是WebKit核心的
- 開發(fā)者也不再測(cè)試其他的瀏覽器引擎了,反正WebKit占據(jù)了主流
- 開發(fā)者將會(huì)更多使用WebKit引擎獨(dú)有的代碼,而不是專注使用Web標(biāo)準(zhǔn)
最可能的后果是程序員會(huì)選擇——或者被導(dǎo)向——相信內(nèi)核的統(tǒng)一會(huì)讓工作變輕松。但是隨著時(shí)間的流逝,他們會(huì)意識(shí)到盡管同是WebKit,也會(huì)有很多不同的東西。(見PPK總結(jié)的WebKit之不同)。
這給IE和Firefox留下了什么局面?
讓我們來清醒一下,看看這對(duì)Microsoft和Mozilla來說意味著什么?,F(xiàn)在有很多聲音,認(rèn)為他們應(yīng)該用WebKit來實(shí)現(xiàn)IE和Firefox。
但這真的那么容易嗎?如果這樣的話,所有主流瀏覽器都會(huì)構(gòu)建于一個(gè)相同的代碼庫。但是還會(huì)有很多的可變因素,代碼分支,插件,等等。對(duì)我們來說,這似乎并不是達(dá)到多樣性的最佳方式。
如果IE和Firfox不切換渲染引擎呢?這很可能會(huì)是一場(chǎng)精彩的競(jìng)賽,并會(huì)為我們帶來一個(gè)光明的未來。但與此同時(shí),這也給MicroSoft和Mozilla出了難題:他們將在實(shí)現(xiàn)各個(gè)層級(jí)的Web標(biāo)準(zhǔn),提升性能,和很多其他方面耗費(fèi)很多精力,并遇見重重挑戰(zhàn)。
如果市場(chǎng)份額逐漸萎縮,讓W(xué)ebKit完全統(tǒng)治?也許人們將會(huì)使用IE和Firefox,而不使用WebKit?
在未來的歲月里,F(xiàn)irefox和IE有沒有被逐漸淘汰的風(fēng)險(xiǎn)?或者他們會(huì)成為不同的因素留在市場(chǎng)上?
瀏覽器廠商的動(dòng)機(jī)是什么
除了現(xiàn)在已經(jīng)有很多不同WebKit版本的事實(shí)以外,還有很多Web瀏覽器在參與競(jìng)爭,試圖與眾不同。其中一些相信競(jìng)爭很大程度將會(huì)體現(xiàn)用戶體驗(yàn)領(lǐng)域。這點(diǎn)沒錯(cuò),但是在此領(lǐng)域以外,也有很多競(jìng)爭點(diǎn)。
在《WebKit的悲劇》一文中提到的那樣,誰會(huì)對(duì)花錢花資源來為競(jìng)爭對(duì)手修補(bǔ)bug呢?
看上去大家更有可能會(huì)把精力花在新特性,新功能上,因?yàn)檫@會(huì)才讓他們?cè)诟?jìng)爭中脫穎而出。
在這一點(diǎn)上,你將如何發(fā)現(xiàn)新的元素呢?新功能在某些程度上還會(huì)被發(fā)現(xiàn)。但是CSS呢?一個(gè)-webkit前綴的CSS屬性意味著什么?其實(shí)什么意義都沒有,除了它會(huì)支持IE和Firefox以外的任何其他瀏覽器。下一步又會(huì)發(fā)生什么?更多的瀏覽器廠商的CSS前綴嗎?
WebKit是好的
允許我們強(qiáng)調(diào)一下,WebKit是好的。它有開放的流程和強(qiáng)大的貢獻(xiàn)者。我們只是想澄清一個(gè)當(dāng)下被廣泛接受的錯(cuò)誤概念——一個(gè)WebKit等于所有WebKit,還有——如果所有瀏覽器都選擇WebKit,那么對(duì)開發(fā)者來說,工作會(huì)變得更輕松。
我的意思是說,與眾多獨(dú)立的瀏覽器引擎會(huì)為市場(chǎng)帶來多樣性一樣,WebKit在這一點(diǎn)來說,同樣會(huì)表現(xiàn)的很棒。