01浏览器及前端优化概述
浏览器工作原理
浏览器组成
- 人机交互(ui)
- 网络请求部分(socket)
- js引擎(v8引擎)
- html、css渲染引擎(六大浏览器引擎区别)
- Webkit: Chrome(Blink分支) Opera(Presto改Blink 分支) edge(EdgeHtml改Blik) Safari
- Gecko: Firefox
- Trident: IE
- 双核浏览器即:带两个主流渲染引擎
- 数据存储部分(cookie、LocalStroage、、)
内核(渲染引擎)工作步骤
-
解析html,构建
Dom树
- Parsing HTML to construct the DOM tree
- 包括head标签 display:none等 不显示的全部标签/元素都在其中
- Document Object Model,文档对象模型,dom 是w3c组织推荐的处理可扩展置标语言的标准编程接口
-
构建
渲染树
,- Render tree construction
- 与Dom树不同,把Dom树中页面不显示的标签/元素剔除
-
布局
渲染树
(也叫layout/Webkit引擎 reflow/Gecko引擎)- Layout of the render tree
- 定位坐标和大小 . 是否换行 . 确定position.overflow.z-index等
-
绘制
渲染树
- Painting the render tree
- 调用操作系统底层api进行绘图操作
- 渲染图解(对应四个步骤)
浏览器性能优化
- 对渲染树进行布局时即:layout(reflow),会对所有要渲染的标签位置和大小等排版.
-
对标签(如图片)固定大小,如图片加载完成后,只需填充选定位置,不会导致其它地方的重新渲染.
-
少用appenchild()直接添加元素,
- 将要创建的元素写到一个字符串上,然后一次性写到innerHTML上,这种利用浏览器对innerHTML的解析确实是相比上面的多次插入快了很多。但是构造字符串灵活性上面比较差,很难符合创建各种各样的DOM元素的需求.
- 对于火狐和chrome浏览器,插入元素用document.createDocumentFragment()创建文档片段(存在内存里),把要插入的元素都插入其中,一次添加到文档里,减少渲染次数.
浏览器访问网站过程
-
在浏览器地址栏输入网址
-
通过地址栏(html中标签src、href)的URL,构建
HTTP请求报文
-
浏览器发起
DNS解析
请求,将域名转换为IP地址 -
浏览器将请求报文发送给服务器
-
服务器接收报文,并解析
-
服务器处理用户请求,生成封装
HTTP响应报文
-
服务器发送HTTP响应报文给浏览器
-
浏览器接收报文,并解析
-
浏览器解析HTML并显示,发现新资源请求(html中标签src、href等请求)则再次发起请求
-
展示最终页面
http请求/响应报文格式
-
请求行/响应行
- 请求行:请求方法、路径(包括search和hash部分)、协议
- 响应行:响应协议、状态码、状态消息
-
请求报文头/响应报文头
- 报文头和体之间需 空一行
-
请求报文体/响应报文体
- 请求报文体:post方法提交的信息,get方法无请求报文体,信息直接在提交路径中提交。
- 响应报文体:html、css、js、图片等浏览器请求的资源
- 请求报文体:post方法提交的信息,get方法无请求报文体,信息直接在提交路径中提交。
- 响应报文体:html、css、js、图片等浏览器请求的资源