瀏覽器是軟體中一個複雜的部分:在一個web瀏覽器內部有著堪比一整個作業系統的功能。每當我用谷歌搜尋如何建立一個web裡瀏覽器,答案總是非常晦澀,通常都是講如何使用一些瀏覽器引擎以及基於它們做一些東西。這篇文章主旨在於貫穿建立web瀏覽器的整個過程。而在第一部分,我將會講到一些規範。
在我作為一名研發人員的職業生涯中,我瞭解到執行程式碼在整個軟體研發過程中通常是最容易的一個部分。真正花費時間和精力的是定義它們如何工作。這就是一些組織比如W3C 和WHATWG所做的工作。
W3C即全球資訊網聯盟,是一個國際標準組織,它致力於讓所有的員工共同合作來為web制定標準。直到2014年,W3C都承擔著為web制定標準的主要責任。
直到今天,絕大部分的新功能都需要較長的時間來制定標準,這些標準被許多瀏覽器廠商遵循,然後再被開發人員進行反饋和迭代。但是這個工作流程正在發生著改變。
2004年一個由Mozilla、Apple、和 Opera軟體聯合形成的名叫WHATWG的組織-超文字網頁應用技術小組-誕生了。它是為了響應W3C意圖追求XHTML2,但是廠商們對這一點並不感興趣。他們的目的是為了演進HTML,而不是對基於XML的技術進行投資,這個演進版本就是今天所熟知的HTML5。
WHATWG提出了一個不同的思維規範,他們稱之為動態標準:
這意味著,隨著WHATWG接收來自於網頁設計者,瀏覽器廠商,工具廠商,還有一些其他的感興趣的群體的反饋,這個標準也在不斷的演進。這同時也意味著新的功能會隨著時間以一定的速率新增到這些標準當中,這個速率即要保證其規範要超前於其部署但又不能太早,以避免這些部署放棄使用其標準。
但是並不是所有的功能都來自於標準組織。有時候,瀏覽器廠商也會根據自己的商業需求來植入一些功能,並且他們不會將這些規範共享。這些行為對於web的公開性是有害的並且會使瀏覽器廠商將精力花費在競爭上而不是創新上。
如果你閱讀了這個連結,你會看到這是一個window.orientation的規範文件,這是由Apple建立的一個功能,但是並沒有在任何地方得到實現,所以Mike Taylor為它寫了這樣一個說明。事實上,如果你對之前的連結進行仔細閱讀,你會看到整個文件都是有關於記錄一些沒有標準的功能使得瀏覽器可以相容。
但是正如我之前提到過的,事情在不斷改變,社會正在變得越來越成熟並且整個過程都是越來越好的。如今,參與到網路演進中更加容易了。
2015年,W3C成立了一個叫做Web Platform Incubator Community Group(WICG)的新的工作小組,它的目的在於:
- 在Extensible Web Manifesto的精神下,讓開發者(正如我們)能夠更容易地提出一些新的平臺功能。
- 為開發人員和實施人員提供了一個可以討論新平臺功能的空間。
- 通過提供指導和一個支援包容的環境來讓那些沒有對標準做出過的貢獻的人來孵化思想(甚至於那些做出過貢獻的人!:D);最終將這些思想轉化為W3C工作組織的正式標準。(即就是,形成一個“W3C推薦標準”)。
- 使我們的平臺功能的標準制定現代化。
- 提供一個法律框架,可以保持所有的貢獻都是免費和開源的。
現在你對這整個過程都有一些瞭解了,你應該可以理解為什麼一些事情並不是你期待的那樣,或者為什麼一些功能需要花費如此長的時間來實現和穩定下來。如果你想在web中新增一份你的力量,這裡有一些致力於web的重要的建築塊規範的連結:
WHATWG — https://github.com/whatwg — html5, fetch, dom, compat
WICG — https://github.com/WICG — ResizeObserver, EventListenerOptions, webusb, BackgroundSync
W3C — https://github.com/w3c — ServiceWorker, css-houdini-drafts, webcomponents
不要像Apple一樣,不要忘記分享。
特別感謝Mike Taylor對撰寫這篇文章的支援,以及其相關的偉大和鼓舞人心的工作。