SlideShare a Scribd company logo
1 of 155
Download to read offline
瀏覽器與網⾴頁原理理
劉劉安⿑齊 Liu, An-Chi
!1
Principles of Browsers and Webpages
2018/8/122019/4/4 @ 六⾓角學院
About
• 劉劉安⿑齊 Liu, An-Chi

• ID:微中⼦子、@tigercosmos

• 國立臺灣⼤大學⽣生物機電⼯工程學系

• 熱愛開源、瀏覽器、打網球、寫
⽂文章、動漫

• Develop ONNC in Skymizer

2
⼤大綱
• 講點故事

• 瀏覽器原理理

• 開發流程

• 導讀「來來做個瀏覽器」

• ⾃自由提問
!3
緣起
故事從這裡開始
!4
最早(被Merge)的PR
• ContributorCovenant/contributor_covenant
最廣為⼈人知的開發者公約
收集各種 API 的專案
!5
我覺得加入開源很困難
!6
我覺得加入開源很困難
!6
我覺得加入開源很困難
!6
我覺得加入開源很困難
!6
⼀一發不可收拾拾
!7
在 CloudMosa

開發 Puffin 瀏覽器
Firefox Quantum
!8
Servo
• 由 Mozilla 開發的平⾏行行化瀏覽器

• ⽤用 Rust 語⾔言

• GPU WebRender

• The Firefox Quantum

• https://servo.org/zh-TW/
!9
!10
!10
!11
!11
!11
Memory Leak
!12
Rust Demo
!13
為什什麼要開發瀏覽器?
!14
能源⽅方⾯面
• ⼿手機消耗 20 J/網⾴頁

• 10 J × 100 次/天 × 1 億⼈人 = 1000 億J/天

• ⼀一度電 = 360萬 J 

• 27777 度電 = 277 ⼾戶家庭 / 每個⽉月
!15
時間⽅方⾯面
• 開啟時間 3 秒/⾴頁

• 0.1 秒 × 100 ⾴頁/天 × 1 年年 = 3650 秒
!16
安全⽅方⾯面
• 惡惡意網站、惡惡意廣告、惡惡意檔案

• 假廣告,真挖礦

• 反隱私追蹤

• 讓安全性更更好
!17
了了解瀏覽器的原理理
才能真正駕馭網⾴頁開發
!18
來來看看瀏覽器長相吧
!19
!20
!20
!20
!20
!20
為什什麼網⾴頁能在瀏覽器
上順利利跑?
!21
規範瀏覽器與網⾴頁開發者的組織
網⾴頁超⽂文字應⽤用技術⼯工作⼩小組
!22
!23
https://github.com/whatwg
!24
!25
https://www.reddit.com/r/javascript/comments/5swe9b/
what_is_the_difference_between_the_w3c_and_the/
他們差在哪?
TL;DR

WHATWG is the newest.
網⾴頁是怎麼寫?
!26
HTML
!27
CSS
邊界空 10 畫素
字體為黃⾊色
背景為⿊黑⾊色
指定⽬目標
!28
Javascript
從這份原始碼 找到 ID 叫做“text” CSS 的 color 變成⽩白⾊色
!29
經過 JS 處理理後
JS 程式碼
網站架構
!30
網站架構
客⼾戶端
!30
網站架構
伺服器客⼾戶端
!30
網站架構
伺服器客⼾戶端
HTML
index.html
!30
網站架構
伺服器客⼾戶端
HTML
index.html
!30
網站架構
伺服器客⼾戶端
HTML
index.html
!30
網站架構
伺服器客⼾戶端
HTML
index.html
!30
網站架構
伺服器客⼾戶端
HTML
index.html
!30
網站架構
伺服器客⼾戶端
HTML
CSS
JavaScript
多媒體
index.html
!30
網站架構
伺服器客⼾戶端
HTML
CSS
JavaScript
多媒體
index.html
!30
瀏覽器架構
!31
使⽤用者介⾯面
!32
使⽤用者介⾯面
瀏覽器引擎
!32
渲染 JS
使⽤用者介⾯面
!33
GUI 應⽤用程式開發框架
•GTK
•React Native
•QT
功能
!34
功能
!34
功能
!34
搜尋
!35
搜尋
!35
http://www.allnewsandreports.com
Search Bar 原理理?
!36
個⼈人化、隱私、同步
!37
個⼈人化、隱私、同步
!37
個⼈人化、隱私、同步
!37
瀏覽器渲染引擎
!38
!39
HTML
!40
DOM
• ⽂文件物件模型(Document Object Model, DOM)
物件
Tag: Div
Text: A Div
Attributes: null
!41
DOM Tree
!42
Body
Div Div
Div Div Div
<div>
….
</div>
!43
!44
CSS
Selector
declaration
Rule
{
}
!45
!46
Style Tree
DOM Tree Style Tree
Rules
!47
!48
Layout
每個元素都是⼀一個 Box
• Margin 邊外的空⽩白
• Border 邊框
• Padding 邊內的空⽩白
• Content 內容
!49
!50
Layout Tree
!51
Block
Block
Block
Block
Inline Inline
Inline Inline
Block
Block
Block
Block
!52
渲染
!53
Block
Block Block
Inline InlineBlock
繪圖引擎
圖形處理理引擎
!54
Skia
顯⽰示在應⽤用程式上
!55
JS 呢?
!56
Javascript Engine
!57
WASM
!58
https://blog.logrocket.com/webassembly-how-and-why-559b7f96cd71
Story
瀏覽器⾯面臨臨的挑戰
!59
!60
網路路頻寬與延遲
解析速度、渲染速度
能源消耗
網路路問題
!61
頻寬來來回通訊延遲
論⽂文:Why are Web Browsers Slow on Smartphones?
Latency overhead of a single HTTP request
3G 4G
Control plane 200–2500 ms 50–100 ms
DNS look up 200 ms 100 ms
TCP handshake 200 ms 100 ms
TLS handshake 200–400 ms 100–200 ms
HTTP request 200 ms 100 ms
Total latency 200–3500 ms 100–600 ms
Data rates for active mobile
Generation Data rate
2G 100–400 Kbit/s
3G 0.5–5 Mbit/s
4G 1–50 Mbit/s
解決⽅方式
!62
增加快取命中率
後端預處理理
20% → ???
壓縮圖片、影片
格式轉換
後端渲染
Opera Mini 瀏覽器
增加運算速度
!63
平⾏行行化處理理
改變架構
論⽂文:Fast and parallel webpage layout
Servo 瀏覽器
Webrender 改⽤用 GPU 來來做渲染
Remote Browser
Remote Browser
!64
Data Center Browser
Puffin Browser 架構
客⼾戶端省電
算得更更快 安全性佳
後端預處理理
淺談產業現狀狀
!65
開發の先備知識
!66
版本控制
!67
版本控制
初始狀狀態
!67
版本控制
加入A功能初始狀狀態
!67
版本控制
加入A功能 加入B功能初始狀狀態
!67
版本控制
加入A功能 加入B功能初始狀狀態
分⽀支
!67
版本控制
加入A功能 加入B功能初始狀狀態
Tom
Branch
分⽀支
!67
版本控制
加入A功能 加入B功能初始狀狀態
Tom
Branch
Lucky
Branch
分⽀支
!67
版本控制
加入A功能 加入B功能初始狀狀態
Tom
Branch
Lucky
Branch
分⽀支
很多改動
!67
版本控制
加入A功能 加入B功能初始狀狀態
Tom
Branch
Lucky
Branch
分⽀支
加入C功能
很多改動
!67
版本控制
加入A功能 加入B功能初始狀狀態
Tom
Branch
Lucky
Branch
分⽀支
加入C功能
很多改動 Merge
!67
版本控制
加入A功能 加入B功能初始狀狀態
Tom
Branch
Lucky
Branch
分⽀支
加入C功能
加入D功能
很多改動 Merge
!67
版本控制
加入A功能 加入B功能初始狀狀態
Tom
Branch
Lucky
Branch
分⽀支
加入C功能
加入D功能
很多改動 Merge Merge
!67
版本控制
!68
產品 7.5 開發
產品 7.7 穩定
產品 7.7 開發
產品 7.5 穩定
Git Github
!69
Github
!70
Github
!70
Github
!70
Github
!70
Github
!70
持續整合
Continuous integration
!71
持續整合
Continuous integration
不斷地、頻繁地、有事沒事就做⼀一下
!71
持續整合
Continuous integration
把⼤大家寫的 Code 放在⼀一起看看有沒有問題!
編譯、測試、檢查服務
!71
了了解專案
• Description

• README

• Code of conduct

• Contributing

• License

• Pull request template
!72
了了解專案
• Description

• README

• Code of conduct

• Contributing

• License

• Pull request template
專案⽂文化
!72
開源專案的⾓角⾊色
• Member

• Commiter

• Contributor
!73
• Member / Commiter

• Contributor
⼤大部分專案 Servo 專案
開源專案の開發流程
以 Servo 為例例
!74
開發流程
找到⽬目標
!75
⽬目標
• 新功能(介⾯面):改進介⾯面和功能

• 新功能(引擎):將最新標準納入引擎

• 除錯(介⾯面):修正回預期⾏行行為

• 除錯(引擎):根據規範⽂文件進⾏行行修正
!76
!77
⽬目標
!78
如何開始?
!79
如何開始?
!79
如何開始?
!79
Input element
!80
Input element
!80
Input element
!80
開發流程
解決⽬目標 參參考⽂文件
!81
實作
• 例例如 value sanitization for input week type:

• https://html.spec.whatwg.org/multipage/
input.html#week-state-(type=week):value-sanitization-
algorithm

• https://html.spec.whatwg.org/multipage/common-
microsyntaxes.html#parse-a-week-string
!82
數值清除演算法:
假設元素數值不是合法的Week字串串,就
把數值改成空字串串。
!83
詳細步驟
!84
開發流程
解決⽬目標 參參考⽂文件 開發
!85
!86
開發流程
解決⽬目標 參參考⽂文件 開發
單機測試
!87
測試
Cross-browser Web Platform Tests (WPT)
!88
測試
!88
開發流程
解決⽬目標 參參考⽂文件 開發
單機測試送出審查
!89
發 Pull Request
!90
發 Pull Request
!90
發 Pull Request
!90
發 Pull Request
!90
發 Pull Request
!90
!91
!91
開發流程
解決⽬目標 參參考⽂文件 開發
單機測試送出審查⾃自動化測試
!92
!93
!93
!93
開發流程
解決⽬目標 參參考⽂文件 開發
單機測試送出審查⾃自動化測試
⾃自動化彙整

進入主幹
開發流程
解決⽬目標 參參考⽂文件 開發
單機測試送出審查⾃自動化測試
⾃自動化彙整

進入主幹
!95
開發流程
解決⽬目標 參參考⽂文件 開發
單機測試送出審查⾃自動化測試
⾃自動化彙整

進入主幹
QA 測試
!95
發布穩定版
What Servo not have, but would have in other browsers
加入貢獻者⾏行行列列
!96
• Servo

• Firefox/Gecko

• Chromium/Blink

• Safari/Webkit
社群⽀支援
• Rust Taiwan

• Mozilla Taiwan
!97
不懂儘管問
參參考資料&延伸閱讀
• 《來來做個網路路瀏覽器吧!》

• How Browsers Work

• 寫給⼤大家的 Git 教學

• 軟體品質與持續整合

• The whole web at maximum FPS: How WebRender gets rid
of jank

• Inside a super fast CSS engine: Quantum CSS (aka Stylo)
!98
謝謝⼤大家
phy.tiger@gmail.com
!99

More Related Content

Similar to 瀏覽器與網頁原理 Principles of Browsers and Webpages

使用GoogleAppEngine建立个人信息中心
使用GoogleAppEngine建立个人信息中心使用GoogleAppEngine建立个人信息中心
使用GoogleAppEngine建立个人信息中心Du Yamin
 
Kamigo reviews 20191127
Kamigo reviews 20191127Kamigo reviews 20191127
Kamigo reviews 20191127Jia Yu Lin
 
移动端Web开发性能优化实践
移动端Web开发性能优化实践移动端Web开发性能优化实践
移动端Web开发性能优化实践Mingel Zhang
 
如何,高效利用搜索引擎+构建网络工具箱
如何,高效利用搜索引擎+构建网络工具箱如何,高效利用搜索引擎+构建网络工具箱
如何,高效利用搜索引擎+构建网络工具箱84zhu
 
美团前端架构简介
美团前端架构简介美团前端架构简介
美团前端架构简介pan weizeng
 
白玉磊 Webrebuild
白玉磊 Webrebuild白玉磊 Webrebuild
白玉磊 Webrebuild裕波 周
 
石玉磊 Web rebuild
石玉磊 Web rebuild石玉磊 Web rebuild
石玉磊 Web rebuildWebrebuild
 
探索 API 開發的挑戰與解決之道 | .NET Conf 2023 Taiwan
探索 API 開發的挑戰與解決之道 | .NET Conf 2023 Taiwan探索 API 開發的挑戰與解決之道 | .NET Conf 2023 Taiwan
探索 API 開發的挑戰與解決之道 | .NET Conf 2023 TaiwanAlan Tsai
 
20120516 axure rp prototype design outline
20120516 axure rp prototype design outline20120516 axure rp prototype design outline
20120516 axure rp prototype design outlineturtleknight
 
History of share
History of shareHistory of share
History of shareaido Cho
 
網站規劃
網站規劃網站規劃
網站規劃jiannrong
 
如何利用『網路頭家』賺錢
如何利用『網路頭家』賺錢如何利用『網路頭家』賺錢
如何利用『網路頭家』賺錢guest1dd3f7
 
災難演練 @ AWS 實戰分享 (Using AWS for Disaster Recovery)
災難演練 @ AWS 實戰分享 (Using AWS for Disaster Recovery)災難演練 @ AWS 實戰分享 (Using AWS for Disaster Recovery)
災難演練 @ AWS 實戰分享 (Using AWS for Disaster Recovery)Rick Hwang
 
Top100summit前端的云时代支付宝前端平台架构 王保平
Top100summit前端的云时代支付宝前端平台架构  王保平Top100summit前端的云时代支付宝前端平台架构  王保平
Top100summit前端的云时代支付宝前端平台架构 王保平drewz lin
 
該怎麼樣(認真的)部署你的 Python Web 應用程式?
該怎麼樣(認真的)部署你的 Python Web 應用程式?該怎麼樣(認真的)部署你的 Python Web 應用程式?
該怎麼樣(認真的)部署你的 Python Web 應用程式?Andy Dai
 
20150717 從網頁開發到android app行動應用開發 發佈版
20150717 從網頁開發到android app行動應用開發   發佈版20150717 從網頁開發到android app行動應用開發   發佈版
20150717 從網頁開發到android app行動應用開發 發佈版Yung-Ting Chen
 
Appcan介绍自己的应用开发平台
Appcan介绍自己的应用开发平台Appcan介绍自己的应用开发平台
Appcan介绍自己的应用开发平台MOBINODE
 
[LaravelConf Taiwan 2019] 在中國三年,從 0 開始自建完整電商餐飲系統
[LaravelConf Taiwan 2019] 在中國三年,從 0 開始自建完整電商餐飲系統[LaravelConf Taiwan 2019] 在中國三年,從 0 開始自建完整電商餐飲系統
[LaravelConf Taiwan 2019] 在中國三年,從 0 開始自建完整電商餐飲系統LaravelConfTaiwan
 
Appcan移动应用开发平台介绍120409
Appcan移动应用开发平台介绍120409Appcan移动应用开发平台介绍120409
Appcan移动应用开发平台介绍120409zhengyiwuxian
 

Similar to 瀏覽器與網頁原理 Principles of Browsers and Webpages (20)

使用GoogleAppEngine建立个人信息中心
使用GoogleAppEngine建立个人信息中心使用GoogleAppEngine建立个人信息中心
使用GoogleAppEngine建立个人信息中心
 
Kamigo reviews 20191127
Kamigo reviews 20191127Kamigo reviews 20191127
Kamigo reviews 20191127
 
移动端Web开发性能优化实践
移动端Web开发性能优化实践移动端Web开发性能优化实践
移动端Web开发性能优化实践
 
如何,高效利用搜索引擎+构建网络工具箱
如何,高效利用搜索引擎+构建网络工具箱如何,高效利用搜索引擎+构建网络工具箱
如何,高效利用搜索引擎+构建网络工具箱
 
美团前端架构简介
美团前端架构简介美团前端架构简介
美团前端架构简介
 
白玉磊 Webrebuild
白玉磊 Webrebuild白玉磊 Webrebuild
白玉磊 Webrebuild
 
石玉磊 Web rebuild
石玉磊 Web rebuild石玉磊 Web rebuild
石玉磊 Web rebuild
 
探索 API 開發的挑戰與解決之道 | .NET Conf 2023 Taiwan
探索 API 開發的挑戰與解決之道 | .NET Conf 2023 Taiwan探索 API 開發的挑戰與解決之道 | .NET Conf 2023 Taiwan
探索 API 開發的挑戰與解決之道 | .NET Conf 2023 Taiwan
 
20120516 axure rp prototype design outline
20120516 axure rp prototype design outline20120516 axure rp prototype design outline
20120516 axure rp prototype design outline
 
History of share
History of shareHistory of share
History of share
 
網站規劃
網站規劃網站規劃
網站規劃
 
如何利用『網路頭家』賺錢
如何利用『網路頭家』賺錢如何利用『網路頭家』賺錢
如何利用『網路頭家』賺錢
 
災難演練 @ AWS 實戰分享 (Using AWS for Disaster Recovery)
災難演練 @ AWS 實戰分享 (Using AWS for Disaster Recovery)災難演練 @ AWS 實戰分享 (Using AWS for Disaster Recovery)
災難演練 @ AWS 實戰分享 (Using AWS for Disaster Recovery)
 
Top100summit前端的云时代支付宝前端平台架构 王保平
Top100summit前端的云时代支付宝前端平台架构  王保平Top100summit前端的云时代支付宝前端平台架构  王保平
Top100summit前端的云时代支付宝前端平台架构 王保平
 
災難演練@AWS 實戰分享
災難演練@AWS 實戰分享 災難演練@AWS 實戰分享
災難演練@AWS 實戰分享
 
該怎麼樣(認真的)部署你的 Python Web 應用程式?
該怎麼樣(認真的)部署你的 Python Web 應用程式?該怎麼樣(認真的)部署你的 Python Web 應用程式?
該怎麼樣(認真的)部署你的 Python Web 應用程式?
 
20150717 從網頁開發到android app行動應用開發 發佈版
20150717 從網頁開發到android app行動應用開發   發佈版20150717 從網頁開發到android app行動應用開發   發佈版
20150717 從網頁開發到android app行動應用開發 發佈版
 
Appcan介绍自己的应用开发平台
Appcan介绍自己的应用开发平台Appcan介绍自己的应用开发平台
Appcan介绍自己的应用开发平台
 
[LaravelConf Taiwan 2019] 在中國三年,從 0 開始自建完整電商餐飲系統
[LaravelConf Taiwan 2019] 在中國三年,從 0 開始自建完整電商餐飲系統[LaravelConf Taiwan 2019] 在中國三年,從 0 開始自建完整電商餐飲系統
[LaravelConf Taiwan 2019] 在中國三年,從 0 開始自建完整電商餐飲系統
 
Appcan移动应用开发平台介绍120409
Appcan移动应用开发平台介绍120409Appcan移动应用开发平台介绍120409
Appcan移动应用开发平台介绍120409
 

瀏覽器與網頁原理 Principles of Browsers and Webpages