一、我們為什麼要了解浏覽器?
1. 對于前端開發者
1.浏覽器是使用者體驗的第一線。我們需要了解浏覽器的工作原理,才能有效地設計和實作使用者界面,確定良好的使用者體驗。
2.好的産品需要考慮浏覽器相容性。我們需要了解這些差異,以確定網站或應用在不同的浏覽器中都能正常工作,因為不同的浏覽器對CSS、JavaScript等的支援程度和實作細節可能有所不同。
3.追求良好的性能需要我們了解浏覽器的渲染機制、JavaScript引擎的工作原理,因為他們直接影響到頁面的加載速度和運作效率。
4.對使用者資訊的安全性的考慮需要我們關注浏覽器。我們需要了解浏覽器的安全特性,如同源政策、内容安全政策等,才能更好地保護使用者資料不受XSS、CSRF等攻擊。
5.研發過程中需要使用調試工具,浏覽器提供的開發者工具,可以幫助我們調試代碼、分析性能、檢查網絡請求等。
2. 對于後端開發者
1.在進行接口設計時,後端開發者需要設計API供前端調用,了解浏覽器的工作原理有助于設計更高效、更安全的接口。
2.在前後端分離的架構中,後端提供的是服務端API,前端通過浏覽器調用這些API。後端開發者需要了解浏覽器的HTTP請求方式、跨域問題等,以確定API的正确實作和調用。
3.在性能監控過程中,後端開發者可能需要關注由于前端代碼不優化導緻的伺服器負載問題,如過多的HTTP請求、大量的資料傳輸等,這需要一定的浏覽器知識來共同解決問題。
4.對于追求全棧開發能力的後端開發者,了解浏覽器相關知識是必不可少的,這有助于後端更好地了解整個系統的工作流程,提高跨領域的協作能力。
二、浏覽器發展概述
1. 宏觀發展
1. 浏覽器降生
1990 年,英國計算機工程師蒂姆·伯納斯·李(Tim Berners-Lee)在瑞士的歐洲核子研究組織(CERN)工作時,開發出首個 Web 伺服器與圖形化 Web 浏覽器。他将這個進入網際網路世界的新視窗,稱為“WorldWideWeb”(即“網際網路”)。
一年後,伯納斯·李(Berners-Lee)委托 CERN 的數學系學生尼古拉·佩洛(Nicola Pellow)編寫了“指令行模式浏覽器”,這是一款可在簡易計算機終端中使用的浏覽器。
2. 浏覽器涿鹿中原
1.1993年Mosaic浏覽器的釋出标志着圖形界面Web浏覽器的誕生。它是由伊利諾伊大學厄巴納-香槟分校的國家超級計算應用中心(NCSA)開發的。
2.1994年Mosaic的一些原開發者創立了Netscape公司,并推出了Netscape Navigator,它迅速成為最受歡迎的浏覽器。
3.1995年微軟推出了Internet Explorer(IE),并将其與Windows作業系統捆綁銷售,這一政策極大地推動了IE的市場佔有率。
4.1995-2001年這段時間,Netscape Navigator和Internet Explorer之間的競争非常激烈。最終,IE憑借與Windows的捆綁優勢赢得了這場戰争。
5.2003年蘋果公司推出了自家的浏覽器Safari。
6.2004年Mozilla Foundation釋出了Firefox浏覽器。它是從Netscape的源代碼發展而來的,因其開源性質、安全性和擴充性受到使用者喜愛。
7.2008年谷歌釋出了Chrome浏覽器,以其速度、簡潔和創新的多程序架構迅速獲得了市場佔有率。
8.2004-2010年随着Firefox和Chrome的崛起,浏覽器市場再次進入競争激烈的階段。IE的市場佔有率開始下滑,Chrome和Firefox成為主要的競争對手。
9.2014年HTML5标準最終确定,推動了Web技術的進一步發展,各大浏覽器廠商都開始支援這一标準。
10.2015年微軟釋出了新的浏覽器Edge,以取代老舊的IE浏覽器。Edge最初使用了自家的EdgeHTML渲染引擎,後來轉而使用Chromium的Blink引擎。
3. 小結一下
浏覽器的發展是一個持續的過程,廠商之間的競争也在推動着技術的進步。随着網際網路技術的不斷演進,我們可以預期浏覽器将繼續在速度、安全性、使用者體驗和功能性上進行創新;随着智能手機和平闆電腦的普及,移動浏覽器的重要性日益增加,Safari在iOS裝置上占據主導地位,而Chrome在Android裝置上成為主流。
2. 微觀發展
1. 單程序架構
顧名思義,單程序浏覽器是指浏覽器的所有功能子產品都是運作在同一個程序裡,這些子產品包含了網絡、插件、JavaScript 運作環境、渲染引擎和頁面等。其實早在 2007 年之前,市面上浏覽器都是單程序的。單程序浏覽器的架構如下圖所示:
如此多的功能子產品運作在一個程序裡,是導緻單程序浏覽器不穩定、不流暢和不安全的一個主要因素。原因如下:
(1)不穩定
早期浏覽器需要借助于插件來實作諸如 Web 視訊、Web 遊戲等各種強大的功能,但是插件是最容易出問題的子產品,并且還運作在浏覽器程序之中,是以一個插件的意外崩潰會引起整個浏覽器的崩潰。除了插件之外,渲染引擎子產品也是不穩定的,通常一些複雜的 JavaScript 代碼就有可能引起渲染引擎子產品的崩潰。和插件一樣,渲染引擎的崩潰也會導緻整個浏覽器的崩潰。
(2)不流暢
從上面的“單程序浏覽器架構示意圖”可以看出,所有頁面的渲染子產品、JavaScript 執行環境以及插件都是運作在同一個線程中的,這就意味着同一時刻隻能有一個子產品可以執行。
function test() {
while(true) {
console.log('test')
}
}
如果讓這個腳本運作在一個單程序浏覽器的頁面裡,它會獨占整個線程,導緻其他運作在該線程中的子產品就沒有機會被執行。因為浏覽器中所有的頁面都運作在該線程中,是以這些頁面都沒有機會去執行任務,這樣就會導緻整個浏覽器失去響應,變卡頓。
(3)不安全
插件可以使用 C/C++ 等代碼編寫,通過插件可以擷取到作業系統的任意資源,當你在頁面運作一個插件時也就意味着這個插件能完全操作你的電腦。如果是個惡意插件,那麼它就可以釋放病毒、竊取你的賬号密碼,引發安全性問題。
頁面腳本,它可以通過浏覽器的漏洞來擷取系統權限,這些腳本擷取系統權限之後也可以對你的電腦做一些惡意的事情,同樣也會引發安全問題。
2. 多程序架構
(1)2008 年 Chrome 釋出時的程序架構
(2)現在的多程序架構
1. 浏覽器程序。主要負責界面顯示、使用者互動、子程序管理,同時提供存儲等功能。
2. 渲染程序。核心任務是将 HTML、CSS 和 JavaScript 轉換為使用者可以與之互動的網頁,排版引擎 Blink 和 JavaScript 引擎 V8 都是運作在該程序中,預設情況下,Chrome 會為每個 Tab 标簽建立一個渲染程序。出于安全考慮,渲染程序都是運作在沙箱模式下。
3. GPU 程序。其實,Chrome 剛開始釋出的時候是沒有 GPU 程序的。而 GPU 的使用初衷是為了實作 3D CSS 的效果,隻是随後網頁、Chrome 的 UI 界面都選擇采用 GPU 來繪制,這使得 GPU 成為浏覽器普遍的需求。最後,Chrome 在其多程序架構上也引入了 GPU 程序。
4. 網絡程序。主要負責頁面的網絡資源加載,之前是作為一個子產品運作在浏覽器程序裡面的,直至最近才獨立出來,成為一個單獨的程序。
5. 插件程序。主要是負責插件的運作,因插件易崩潰,是以需要通過插件程序來隔離,以保證插件程序崩潰不會對浏覽器和頁面造成影響。
三、浏覽器核心部件
1. 浏覽器界面介紹
1.使用者界面主要是浏覽器除了網頁顯示範圍以外的部分,包括位址欄、書簽、前進、後退按鈕、曆史記錄等使用者可操作的部分
2.浏覽器引擎是用于在使用者界面和渲染引擎之間傳送指令或者在用戶端本地緩存中讀寫資料,它是各個部分之間互相通信的核心
3.渲染引擎主要是負責解析DOM和CSS規則,浏覽器核心主要指的就是渲染引擎和JavaScript引擎
4.網絡子產品是負責發送網絡請求和下載下傳網絡資源
5.JavaScript引擎用于解釋和執行JavaScript代碼,如V8
6.UI後端用于繪制基本的浏覽器控件
7.資料持久化存儲是通過浏覽器引擎提供的API進行調用
2. 目前浏覽器的使用的渲染引擎和解釋器總結
浏覽器核心 | 代表浏覽器 |
Trident | IE |
Webkit | Safari、Edge |
Blink | Chrome |
Gecko | Firefox |
Presto | 歐朋 |
雙核 | 360浏覽器、獵豹浏覽器、搜狗、遨遊、QQ浏覽器、百度浏覽器、2345浏覽器 |
3. 浏覽器的解釋器
1. Rhino,由Mozilla基金會管理,開放源代碼,完全以Java編寫。
2. SpiderMonkey,第一款JavaScript引擎,早期用于Netscape Navigator,現時用于Mozilla Firefox。
3. JavaSV8,開放源代碼,由Google丹麥開發,是Google Chrome的一部分。
4. criptCore,開放源代碼,用于Safari。
5. Chakra (JScript引擎),用于Internet Explorer11。
6. Chakra (JavaScript引擎),用于Microsoft Edge。
7. KJS,KDE的ECMAScript/JavaScript引擎,最初由哈裡·波頓開發,用于KDE項目的Konqueror網頁浏覽器中。
四、各家浏覽器目前的市場占比
1. 全球市場占有率
2. 中國市場占有率排名
五、整體總結一下
本篇文章主要介紹一下作為研發了解浏覽器的必要性, 以及浏覽器的基本情況和整體的發展。 在考慮産品定位時(開發出一款什麼樣的目标産品),我們需要對浏覽器有一定的了解,整篇文章對研發和産品皆有一定的參考意義。
本文主要參考《浏覽器工作原理與實踐》
如果各位看官喜歡,留下你的的評論,留下你的贊後續可以對浏覽器深入分享。
最後歡迎大家交流學習,共同成長。