浏览器的主要功能是将用户选择的web资源呈现出来,它需要从服务器请求资源,并将其显示在浏览器窗口中,资源的格式通常是HTML,也包括PDF、image及其他格式。用户用URI(Uniform Resource Identifier统一资源标识符)来指定所请求资源的位置,通过DNS查询,将网址转换为IP地址。整个浏览器工作的流程: 
  1、输入网址。 
  2、浏览器查找域名的IP地址。 
  3. 浏览器给web服务器发送一个HTTP请求 
  4. 网站服务的永久重定向响应 
  5. 浏览器跟踪重定向地址 现在,浏览器知道了要访问的正确地址,所以它会发送另一个获取请求。 
  6. 服务器“处理”请求,服务器接收到获取请求,然后处理并返回一个响应。 
  7. 服务器发回一个HTML响应 
  8. 浏览器开始显示HTML 
  9. 浏览器发送请求,以获取嵌入在HTML中的对象。在浏览器显示HTML时,它会注意到需要获取其他地址内容的标签。这时,浏览器会发送一个获取请求来重新获得这些文件。这些文件就包括CSS/JS/图片等资源,这些资源的地址都要经历一个和HTML读取类似的过程。所以浏览器会在DNS中查找这些域名,发送请求,重定向等;

二、页面生成过程

1、DNS服务器通过域名查找对应的web 服务器ip地址;

2、浏览器访问web服务器;

3、服务器处理完成返回html;

4、浏览器解析、加载页面

  解析html 构建dom树 -> 构建render树 -> 布局render树 -> 绘制render树 :

我们知道浏览器为了体验友好,并不是文档全部都解析才绘制到屏幕上,而是从上至下开始解析html,遇到css 会开启线程下载css;

解析:
  1、将HTML构建成一个DOM树(DOM = Document Object Model 文档对象模型),DOM 树的构建过程是一个深度遍历过程:当前节点的所有子节点都构建好后才会去构建当前节点的下一个兄弟节点。 
  2、将CSS解析成CSS去构造CSSOM树( CSSOM = CSS Object Model CSS对象模型)
  3、根据DOM树和CSSOM来构造 Rendering Tree(渲染树)。注意:Rendering Tree 渲染树并不等同于 DOM 树,因为一些像 Header 或 display:none 的东西就没必要放在渲染树中了。

  4.有了Render Tree,浏览器已经能知道网页中有哪些节点、各个节点的CSS定义以及他们的从属关系。
  5.下一步操作称之为Layout,顾名思义就是计算出每个节点在屏幕中的位置 layout render tree。 
  6.再下一步就是绘制,即遍历render树,并使用浏览器UI后端层绘制每个节点。

性能优化中重绘、重排: 
(1)Reflow(回流/重排):当它发现了某个部分发生了变化影响了布局,渲染树需要重新计算。 
(2)Repaint(重绘):改变了某个元素的背景颜色,文字颜色等,不影响元素周围或内部布局的属性,将只会引起浏览器的repaint,根据元素的新属性重新绘制,使元素呈现新的外观。重绘不会带来重新布局,并不一定伴随重排;
Reflow要比Repaint更花费时间,也就更影响性能。所以在写代码的时候,要尽量避免过多的Reflow。

reflow的原因:

(1)页面初始化的时候; 
(2)操作DOM时; 
(3)某些元素的尺寸变了; 
(4)如果 CSS 的属性发生变化了。

减少 reflow/repaint

 (1)不要一条一条地修改 DOM 的样式。与其这样,还不如预先定义好 css 的 class,然后修改 DOM 的 className。 
 (2)不要把 DOM 结点的属性值放在一个循环里当成循环里的变量。 
 (3)为动画的 HTML 元件使用 fixed 或 absoult 的 position,那么修改他们的 CSS 是不会 reflow 的。 
 (4)千万不要使用 table 布局。因为可能很小的一个小改动会造成整个 table 的重新布局。

最新文章

  1. 《CPU的工作过程》
  2. 初步进行vs单元测试
  3. ado.net 实体类_数据访问类
  4. 【转】C++怎么读写windows剪贴板的内容?比如说自动把一个字符串复制.
  5. iptables配置允许vpnserver(softether vpn)
  6. Xcode 的正确打开方式——Debugging(转载)
  7. codeforces 630R Game
  8. Android 使用日常
  9. Memcached安装,操作,用C#操作
  10. 架构之路 之 Nginx实现负载均衡
  11. [翻译] 编写高性能 .NET 代码--第二章 GC -- 配置选项
  12. create-react-app 修改项目端口号及ip,设置代理
  13. [TJOI2010]分金币
  14. context configure and clock schedule
  15. 《大型分布式网站架构》学习笔记--01SOA
  16. Neural Network Basics
  17. sencha touch carousel 扩展 CardList 可绑定data/store
  18. 常用模块:hashlib,subprocess,configparser。
  19. Android里面安装windows系统
  20. Oracle-11g-r2 实例囚笼(Instance Caging)配置

热门文章

  1. [Linux] 关闭防火墙以及开放端口
  2. jmeter的安装和配置
  3. Maven发布jar包到私库
  4. diango admin 添加成员报错
  5. jQuery 让input里面的内容可以布局到页面上
  6. jQuery和Vue的区别
  7. centos7上keepalived的安装和配置
  8. Vue.js学习过程
  9. go ethereum源码分析 PartIV Transaction相关
  10. vue学习02