Web运行环境总结

调休计算器
• 阅读 2856

1. 页面加载过程

1.1 加载一个资源的过程

在浏览器地址栏输入URL

浏览器查看缓存(强缓存)

浏览器解析URL获取协议,主机,端口,path

浏览器组装一个HTTP(GET)请求报文

浏览器根据DNS服务器得要域名的IP地址

打开一个socket与目标IP地址,端口建立TCP链接

向这个IP的机器发送http/https请求

服务器收到处理并返回http请求

判断协商缓存

服务器将响应报文通过TCP连接发送回浏览器

关闭TCP连接

浏览器检查响应状态吗做出不同处理

如果资源可缓存,进行缓存

浏览器得到返回的内容

1.2 浏览器渲染页面的过程

根据HTML结构生成DOM Tree

根据CSS生成CSSOM

将DOM和CSSOM整合成RenderTree(渲染树,比DOM树多了样式)

根据RenderTree开始渲染和展示

HTML解析器遇到没有async和defer的script时,会执行并阻塞渲染 (js可能会改变dom结构)

浏览器在Document对象上触发DOMContentLoaded事件

显示页面

图片加载完毕

调用onload

1.3 为什么把css放在head中

在html渲染之前渲染css

如果css放在html元素后面,会先按没有css的情况渲染html,然后加载到css后再重新渲染html元素,这样会损耗性能。

1.4 为什么要把js放在body的最下面

1.不会阻塞body中元素的渲染,能让页面更快出来

2.script能拿到所有的标签

1.5 图片

图片是异步请求,不会影响dom树的渲染

1.6 load,DOMContentLoaded

        window.addEventListener('load',function(){
         //页面资源全部加载完成,包括图片视频
        });

        document.addEventListener('DOMContentLoaded',function(){
         //DOM 渲染完即可执行,图片视频还没有加载完
        });
  • DOMContentLoaded : dom结构化完成以后
  • load:dom 结构化以及静态资源全部加载完毕以后
  • $(document).ready 底层是DOMContentLoaded函数
  • $(window).load 底层是load函数
  • $(function () {}) 是$(document).ready的缩写
var show = console.log.bind(console);

        show('观察脚本加载的顺序')

        document.addEventListener("DOMContentLoaded", function () {
            show('DOMContentLoaded回调')
        }, false);

        window.addEventListener("load", function () {
            show('load事件回调')
        }, false);


        show('脚本解析一');


        $(document).ready(function () {
            show('$(document).ready')
        })
        
        // 测试加载
        $(function () {
            show('脚本解析二');
        })


        $(window).load(function () {
            show('$(document).load');
        });

        show('脚本解析三');

1.7 重排Reflow

DOM结构中的元素都有自己的盒子,这些都需要浏览器根据各种样式来计算并根据计算结果来将元素放到他们该出现的位置,称为Reflow。

触发reflow的条件:

1.增删改dom节点

2.移动dom位置或者有动画

3.修改css样式

4.resize窗口或者滚动(移动端没有该问题)

1.8 重绘Repaint

页面要呈现的内容绘制在屏幕上。

DOM改动,CSS改动(判断页面呈现的内容有没有发生变化)

1.9 避免relow和repaint

1.尽量用class来修改样式

如果要修改多个样式,每个样式修改时都会出发reflow,可以将这些样式保存在一个class中,每次修改只reflow一次。

  1. 将元素的position设置为absolute和fixed可以使元素从DOM树结构中脱离出来独立的存在,而浏览器在需要渲染时只需要渲染该元素以及位于该元素下方的元素,从而在某种程度上缩短浏览器渲染时间,这在当今越来越多的Javascript动画方面尤其值得考虑。
  2. 不要使用 table 布局,可能很小的一个小改动会造成整个 table 的重新布局

Web运行环境总结

点赞
收藏
评论区
推荐文章
blmius blmius
4年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
美凌格栋栋酱 美凌格栋栋酱
10个月前
Oracle 分组与拼接字符串同时使用
SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(
Wesley13 Wesley13
4年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
Wesley13 Wesley13
4年前
HTTP报文
一、HTTP概述(一)什么是HTTP协议?  当在web页面输入url后,浏览器会向web服务器请求资源以显示web页面,而它们之间使用的就是HTTP协议(HyperTextTransferProtocol,超文本传输协议),浏览器就是基于HTTP协议进行文档传输的。(二)HTTP协议的特点1、
Wesley13 Wesley13
4年前
DNS解析全过程分析
DNS解析过程!(https://oscimg.oschina.net/oscnet/cea17faee069f853dc0dcb337b3371124d3.png)1.检查浏览器缓存中是否缓存过该域名对应的IP地址用户通过浏览器浏览过某网站之后,浏览器就会自动缓存该网站域名对应的IP地址,当用户再次访问的时候
Wesley13 Wesley13
4年前
DNS解析过程
DNS解析过程是重点也是难点,下面我按自己的理解一步步来解释,可能有错误之处,欢迎指正。以下步骤中,将DNS缓存中存在域名对应IP则DNS解析成功,用户计算机将直接访问服务器,若DNS服务器缓存中不存在域名对应IP,则自动进入下一步。1.浏览器缓存 当用户通过浏览器访问某域名时,浏览器首先会在自己的缓存中查找是否有该域名对应的IP地址
Wesley13 Wesley13
4年前
URL编码以及get和post请求乱码问题
1. 什么是URL编码。URL编码是一种浏览器用来打包表单输入的格式,浏览器从表单中获取所有的name和其对应的value,将他们以name/value编码方式作为URL的一部分或者分离的发送到服务器上。2. URL编码规则。每对name/value由&分开,每对来自表单的name/value用分开。如果用户没有输入值的那个
Stella981 Stella981
4年前
Http 缓存策略
1)浏览器缓存策略浏览器每次发起请求时,先在本地缓存中查找结果以及缓存标识,根据缓存标识来判断是否使用本地缓存。如果缓存有效,则使用本地缓存;否则,则向服务器发起请求并携带缓存标识。根据是否需向服务器发起HTTP请求,将缓存过程划分为两个部分:强制缓存和协商缓存,强缓优先于协商缓存。强缓存,服务器通知浏览器一个缓存时间,在
芝士年糕 芝士年糕
3年前
更改配置本地host地址
Hosts是一个没有扩展名的系统文件,主要作用是定义IP地址和主机名的映射关系,就是将一些常用的域名网址与其对应的IP地址建立一个关联“数据库”,当用户在浏览器中输入一个需要登录的网址时,系统会首先自动从Hosts文件中寻找对应的IP地址,如果找到,系统会立即打开对应网页,若没有找到,则系统会再将网址提交DNS域名解析服务器进行IP地址的解析,若发现是被屏蔽
3A网络 3A网络
3年前
一文读懂浏览器存储与缓存机制
一文读懂浏览器存储与缓存机制浏览器存储CookieCookie是HTTP协议的一种无状态协议。当请求服务器时,HTTP请求都需要携带Cookie,用来验证用户身份。Cookie由服务端生成,存储在客户端,用来维持状态。通常Cookie由以下值构成:名称(name)值(value)域(Domain)值(value)路径(Path)
Mebius Mebius
2年前
什么是代理ip?代理ip的用途有哪些?该如何获取代理ip?
我们在网页中输入网址后发生了什么呢?1.浏览器获取域名2.通过DNS协议获取域名对应服务器的ip地址3.浏览器和对应的服务器通过三次握手建立TCP连接4.浏览器通过HTTP协议向服务器发送数据请求5.服务器将查询结果返回给浏览器6.四次挥手释放TCP连接7