原文作者:RACHEL NABORS
譯者:UC 國際研發 Jothy
寫在最前:歡迎你來到“UC國際技術”公眾號,我們將為大家提供與客戶端、服務端、演算法、測試、資料、前端等相關的高質量技術文章,不限於原創與翻譯。
無論是早期在代理機構工作,還是後來在微軟的 Edge 工作,我都反覆地聽到同樣的哀嘆:“唉,為什麼 Edge 不能基於 Blink 呢?這樣我就可以訪問所有想要的 API,也只要在一個瀏覽器中測試就好了!”
我的觀點很明確:一個只執行在 Chrome Blink 及其後代引擎上的網際網路,絕不是我們想象的天堂。
作為一名谷歌開發專家,我曾在 Microsoft Edge 團隊工作過,也是 Firefox 和 W3C 的特邀專家,我想表達對這個主題的個人看法(以及一些事實)。 現在就開始吧。
到底什麼是瀏覽器?
我們先來了解一些術語。
當今熱門瀏覽器有 Google Chrome,Apple Safari,Mozilla Firefox 和 Microsoft Edge,但曾經我們也擁有像 NCSA Mosaic 和 Netscape Navigator 這樣優秀的產品。無論你日常使用的是哪種瀏覽器(我使用 Firefox,謝謝)都只是封裝著瀏覽器引擎的介面。所有的書籤,前進和後退的箭頭,URL 欄 - 這些都不是瀏覽器。這些是瀏覽器的介面。通常,構建瀏覽器引擎的人可能都沒接觸過介面!
瀏覽器引擎會讀取通過網路傳輸的所有 HTML,CSS 和 JavaScript,解析它們,並展示為漂亮的網頁畫面。不同引擎有不同的名字。 Chrome 的引擎是 Blink。 Safari 在 WebKit 上執行。 Firefox 使用 Gecko。 Edge 則基於 EdgeHTML 開發。(我喜歡這個命名約定。幹得漂亮,Edge。)
除了 Edge 之外的所有引擎都是開源的,這意味著任何人都可以獲取它,將它包裝在一個新的介面中,然後釋出他們自己的瀏覽器 - 可能會帶來不同的(也許是更好的)使用者體驗 - 不少瀏覽器就是這麼幹的! Apple 的 iOS 應用商店中只允許釋出基於 WebKit 開發的瀏覽器,因此 iPad 和 iPhone 上的 Chrome,Firefox 甚至 Edge 瀏覽器表現更像 Safari,而非各自的桌面版本。 Oculus Browser,Brave,Vivaldi,Samsung Internet,亞馬遜的 Silk 和 Opera 都在 Blink 上執行。我們把它們稱為“基於 Chromium 的瀏覽器”- Chromium 是 Google 的開源專案,Chrome 及其引擎也由此派生。(譯者注:微軟的 Edge 桌面版不久後也將基於 Chromium。)
那麼瀏覽器引擎裡面都有些啥呢? 更多的引擎! 每個瀏覽器引擎都包含其他幾個引擎:
佈局和渲染引擎(通常緊密耦合,所以各自區別不大),計算頁面的外觀,處理繪製、渲染甚至動畫。
JavaScript 引擎,每個瀏覽器特有的引擎,甚至可以獨立於瀏覽器執行。 比如說,你可以用 Chrome 的 V8 引擎或 Microsoft Edge 的 Chakra 在伺服器上執行 Node 程式。
我喜歡將瀏覽器引擎與生物細胞進行比較。 一個細胞包含許多細胞器以完成不同的功能,瀏覽器也是如此。 你可以將細胞核當作渲染引擎,它包含頁面應如何顯示的藍圖,以及作為 JavaScript 引擎的線粒體,為我們的日常互動提供動力。(有趣的事實:線粒體曾經是一個獨立的細胞,它們甚至有自己的 DNA!)
你知道嗎? 瀏覽器與生物相似的另一個表現是它們也會演進。
瀏覽器演進
回顧第一批瀏覽器出現的時候,那個時期比現在簡單多了。 當 CSS 在 1996 年首次出現在 Microsoft Internet Explorer 3 中時,它就是當時的新寵! 那時候的 JavaScript API 和 CSS 規範比起現在要少得多。 多年來,瀏覽器程式碼庫已蓬勃發展,新功能的數量足以支援使用者和開發者構建現代 Web 體驗。 這是使用者需求,瀏覽器工程建設和規範標準化過程之間的微妙演進。
目前主流的引擎主要有三個:
WebKit 和 Blink(Blink 最初是 WebKit 的一個分支)執行 Safari,Chrome 和 Opera
Gecko 執行 Firefox
EdgeHTML(Trident 的一個分支,又名 MSHTML)執行 Microsoft Edge
不同引擎之間各有千秋。每一個都能從不同方向拉動 Web 發展:Firefox 的引擎具有 Servo 的多執行緒處理功能,可以快速呈現圖形。 Edge 的引擎具有最少的作業系統抽象,可以更直接地訪問系統資源 - 這也導致其成為僅限 Windows 的瀏覽器引擎。 Chrome 的 Blink 是擁有最多 Web 開發測試者的。 (我會回過頭來解釋為什麼這是一個“功能”。)
還記得我們談過的基於 Chromium 的瀏覽器嗎?這些瀏覽器都不必從零開始構建他們的渲染引擎或 JavaScript 引擎:他們只需要從 Blink 開始。如果他們需要新功能呢?他們可以獨立開發該功能並保留,或者將這些功能共享回“上游”,使之成為其他瀏覽器核心引擎的一部分。 (這個過程往往涉及很多因素 - “回饋”說起來容易做起來難!)
對任何一個實體來說,要證明它從頭建立一個瀏覽器引擎所耗費的時間和精力是難以想象的。 即便是目前的三個主流瀏覽器也是從網際網路早期就存在的引擎演進的。 它們與我們一起逐步發展,以滿足我們的需求。
目前,網路上的絕大多數流量都發生在 Chrome,iOS Safari 或其它基於 Blink 或 WebKit 的瀏覽器上。
分支、翻新及內部工作
有些開發者說 WebKit 和 Blink 老早就分叉了,現在二者是完全不同的瀏覽器引擎,不能夠再共享貢獻。 某個方面來說也有道理。 但以動物為例,雖然常見的北美洲燕子和紅寶石喉蜂鳥是完全不同的動物,但與其他動物家族相比,它們至少都屬於鳥類。 在短期內,它們的直接後代都不會出現牙齒,手或尾巴。 正如 WebKit 和 Blink 都沒有 Gecko 和 EdgeHTML 多年來一直在構建的處理功能。
還有些開發者可能會說 Microsoft Edge 應該是 Internet Explorer 的“完全重寫”。 但是,“完整的內部工作”與僅僅“翻新”之間是個觀念之爭。 EdgeHTML 是 Internet Explorer 的 Trident 引擎的一個分支,它仍然帶有 Trident 的大部分特性。
瀏覽器衰敗
這就是我們擁有的三個瀏覽器引擎:WebKit/Blink,Gecko 和 EdgeHTML。 在可預見的未來,不太可能有新血系注入。 就是這個意思。
如果我們失去了其中一個瀏覽器引擎,我們就會失去它的血統,之後是該引擎的每個載體,以及它所帶來的 Web 中獨特的內容。
並且它不太可能被替代。
想象一下只有蜂鳥,海豚和馬的行星。所有的海豚都滅絕了。在遙遠的將來,蜂鳥或馬可以演進為可以像海豚一樣在海洋中游泳的東西。事實上,恐龍時代的魚龍看起來很像海豚。但是這種生物與真正的海豚非常不同:即使是魚龍也沒有演化出回聲定位。我們會等待很長時間(可能是永遠)來獲得血統,以發展我們今天在其他血系中已經存在的特徵。那麼,為什麼要袖手旁觀甚至鼓勵消滅這些有價值的獨特血統呢?
我們已經失去一個了。
我們曾經有過四個主要的渲染引擎,但是在採用 Blink 之前,Opera 停止了自家渲染引擎 Presto 的開發。
譯者注:微軟剛剛的這一宣佈,將會怎麼有什麼樣的影響呢?
把我們的力量結合在一起......
有些人認為,如果像 Microsoft Edge 這樣的瀏覽器選擇在 Blink 上執行,那麼微軟的工程師可以幫助構建更好的 Blink,為所有其他 Chromium 瀏覽器提供新功能。這聽起來很明智,對嗎?
但請記住,Blink 是從 WebKit 分叉的。現在同時存在 WebKit 貢獻者和 Blink 貢獻者,並且他們的貢獻不是一對一的。就像三星和 Occulus 一樣,微軟這樣的公司要想用不同於谷歌的引擎來開發也不是不可能。如果這些差異沒對齊,公司將致力於對其程式碼庫,而不是在上游做出貢獻。我們最終將會得到一個 WebKit 和一個 Blink--二者不會有深刻差異,不似伴隨網際網路數十年發展的程式碼庫那般。
從理論上講這是個好主意。但在實踐中,我們最終採用類似的方式 - 並且瀏覽器引擎生態中的“遺傳多樣性”越來越少。
競爭是為了成長,而不是為了“獲勝”
我崇尚競爭。與其他漫畫家競爭,以製作更好的漫畫,並吸引更多的觀眾,讓我成為今天的我。 (真實的故事:我以漫畫家的身份成立個人站點,建立自己的社群網站,時事通訊和購物車。)我想提醒人們,競爭不是要消滅你的競爭對手。如果你這樣做了,你就會停滯不前並失去你的使用者:請參照 Internet Explorer 6。
Internet Explorer 6 出現時是一個了不起的瀏覽器:足夠高的效能以真正實現之前版本的 Internet Explorer 引入的功能,如 DOM,資料繫結和非同步 JavaScript。它的競爭對手 Netscape Navigator 無法與之相抗衡最終成為炮灰(只有它的引擎 Gecko 得以被 Mozilla 基金會重寫 - 它就是那麼小! - 重新成為後來的 Firefox)。
微軟認為它已經贏得了網際網路,遂將注意力轉向其他方面,放任 Internet Explorer 停滯不前。正是這給了 Firefox 可乘之機,它通過阻止彈出視窗和更好的 UI 等功能為使用者了提供更好的體驗。 (介面層確實很重要!)Firefox 還與 Opera 合作開發了先進的 Web 標準,這在 IE 和 Netscape 時代並沒被瞧上眼。但網際網路使用者偏愛這一套,Firefox 便通過口口相傳和草根宣傳活動如燎原之火般發展。
當 iPhone 出現時,Apple 專注於其盈利的應用市場,並努力削減對Flash的支援 - 這是 Web 上最像應用的互動平臺。應用為內容建立者提供了一種不同於廣告模式的工作變現方法。廣告是谷歌的衣食父母,大 G 越來越擔心,因為這對他家那些只把網際網路作為資料傳輸管道的應用造成了威脅。與此同時,微軟一直專注於構建自己的移動作業系統。這時谷歌做了兩件事:Android 和 Chrome。
Chrome 承諾提供更好,更快的瀏覽體驗。它功能極簡,但谷歌甚至全力以赴(至少在我的圈子裡)找了著名的漫畫家 Scott McCloud 製作漫畫,闡述瀏覽器對使用者的使命。隨著 Chrome 在每個作業系統和 Android 手機上的無處不在,它的開發工具模仿了 Firefox 炙手可熱的 Firebug,並且越來越多地參與規範,Chrome 不僅給了 Internet Explorer 沉重的打擊,而且還有可能扼殺這個星球上其他的瀏覽器引擎!
將瀏覽器的大家族樹(或灌木叢)修剪成一個脆弱的單一文化的分支。受市場和人口變化的影響,單一文化很容易受到環境和生態挑戰的影響。下一個對 Web 的威脅出現時會發生什麼,但我們沒有 Firefox 的多執行緒?還是 Microsoft Edge 的系統整合?如果沒有它們,我們能夠快速迭代嗎?或者,我們是否會期待 Chrome 開發人員做點什麼,並祈禱他們不要像微軟那樣變得停滯不前,而是在“贏得網路”之後著手處理其他問題。
諷刺的是,谷歌為保持 Web 不丟失應用模型而構建的瀏覽器,本身就像 Internet Explorer 6 一樣壟斷了 Web 開發。
成為雨林之王太棒了
前面說過我會回到“把使用者群大小作為功能”的話題。讓絕大多數 Web 開發社群為你的平臺構建和測試是一項核心競爭力。首先,你可以保證大多數網站都能在你的瀏覽器中完美執行 - 你不必為了找出財富 500 強網站一個奇怪的 bug 而花費太多時間和精力,換用競爭對手的瀏覽器並不再回頭。由於使用者數量減少導致開發人員測試次數減少,反過來又導致使用者數量減少,這種情況不斷惡化。
它還能讓你更容易滿足你母公司目標的新規範(可能可以也可能不可以滿足 Web 社群的目標),並讓大型開發社群首先構建到你的實現,而無需等待其他瀏覽器趕上。如果一個較小的瀏覽器提出了一個沒有人注意到的規範,而你在需要時提取它,那麼人們就會記住它是你的努力,無論是否有意,繼續建立你的思想共享。
這對競爭產生了下行壓力,競爭對手根本沒有或不能使用最大的瀏覽器團隊擁有的相同資源。無論是不是有意為之,這都是一種殘酷而有效的方法。
這是道德問題嗎?從個人貢獻者層面看,是的。這是一個惡性迴圈,企業通過迫使競爭對手使用有限的資源來競爭從而加速了其滅絕?另一個層面看,也是的。讓大批人只為你的平臺構建的確推波助瀾。
從 Chrome 團隊到網路開發者,所有令人敬畏,善意真誠的好心人都可以舉起手來,合法地說,“我只是在努力推進 Web 建設!”同時也為壟斷做貢獻。
Chrome 擁有最多的資源,並且在構建 Web 方面屬於領頭羊,以至於無法確定我們正在構建的 Web 究竟是我們想要的...還是 Google 想要的。
推測生物學
有一段時間,微軟拯救了即將倒下的蘋果。並不是因為比爾蓋茲和史蒂夫賈伯斯是朋友 - 不,微軟要讓蘋果公司取得成功,以維持作業系統競爭的局勢。 (沒有企業希望被視為壟斷!)
但是,暫時假定蘋果已死。如果只剩下 Linux 和 Windows,那麼個人電腦今天會是什麼樣的?如果 Apple 沒有努力研發 iPhone,移動裝置會是什麼樣子?
是的,只在一個瀏覽器中開發和測試更省心。我相信 IT 專業人員會喜歡只有一種機器。但從長遠來看,不同品種為我們作為開發者創造了機會。微軟拯救了蘋果公司,從而帶來了一些先進的應用,這些應用挑戰了 Chrome 及 Google 負責推進的無數 API。如果在這一系列事件的任何一點,有人曾說過,“嗯,如果我們都使用相同的東西那就容易得多,”我們就不會擁有現在的職業生涯或世界了。
在多個瀏覽器中開發。在多個瀏覽器中測試。使用多個瀏覽器。
你既是消費者又是生產者。你對未來的發展方式有發言權。
更新:我更新了這篇文章,稍微擴充套件了 iOS 上的 WebKit,Firefox 在 IE6 時代的作用,並明確地強調了對 Servo 的關注,這可能是目前瀏覽器中最令人興奮的事情。
英文原文:
https://css-tricks.com/the-ecological-impact-of-browser-diversity/
感謝你能堅持讀到這裡,你可以思考一下作者在這篇文章中提到的一些觀點,同時溫馨提醒:第 13 屆 D2 前端技術論壇將於 2019 年 1 月 6 日在杭州舉辦,如果你想和同行有一個深度交流,如果你想了解目前行業在前端方面發生了什麼,那就趕緊訪問大會網站參與吧:http://d2forum.alibaba-inc.com
好文推薦:
微軟官方:為開發者減少開發成本,Edge將採用 Chromium 開發
“UC國際技術”致力於與你共享高質量的技術文章
歡迎關注我們的公眾號、將文章分享給你的好友