【性能优化】基础

1. 从输入url到页面加载完成

  1. 卸载旧有页面--unload
  2. 根据这个URL依次查看【浏览器缓存】-【系统缓存】-【路由器缓存】,若缓存中有,跳到第5步,否则进入第3步
  3. 向DNS请求当前URL对应的IP
  4. 根据IP建立TCP连接(三次握手)
  5. 发起HTTP请求--request
  6. 服务器处理请求,浏览器接收HTTP响应--response
  7. 解析响应,渲染页面,构建DOM树--processing
  8. 加载完成--onload
  9. 关闭TCP连接(四次挥手)

2. URL

  • 协议名:HTTPHTTPSFTPFILE
  • 域名:xxx.xxx.xxx.xxx
  • 端口号:xxx
    例如url: http://www.baidu.com
  • 协议名:http
  • 域名和端口号需要解析www.baidu.com来获得

3. DNS域解析

  1. 看路由器上配置的DNS服务器上面有没有当前URL的地址,
  2. 若有,直接返回对应IP给客户端
  3. 若没有,进行迭代查询DNS集群服务器,按照顺序一步步获取
    3.1 在根域服务器中查找 .cn,返回顶级域服务器地址
    3.2 在顶级域服务器中查找URL,返回对应二级域服务器地址
    3.3 在二级域服务器中查找URL,返回对应子域服务器地址
    3.4 在子域服务器中查找URL,返回对应的IP地址


    DNS域名查找.jpg

3.1 寻找资源--优化点

  • 架设DNS镜像服务器(镜像root ServerTLD ServerName Server里面的内容)
  • 使用CDN(较少cookie携带 最快找到JS文件)

4. TCP连接

TCP连接.png

5. HTTP报文

  • General概要(常见包括)
    • request url
    • request method -- (GETPOSTPUTDELETEHEADOPTIONS...)
    • status code -- (200 304 403 404 500...)
    • remote adress
  • 请求头(常见包括)
    • content-type(希望接收端(服务器)按什么类型去解析)
      • text/html
      • application/x-www-form-urlencoded
      • application/json
      • multipart/form-data
    • accept(希望接收端(服务器)返回什么类型)
      • text/html
      • application/json
    • cookie
    • connection
      • keep-alive(长连接相关)
    • cache-control
      • no-store(优先级最高)
      • no-cache
      • max-age
    • origin(校验【跨域】相关)
  • 请求体
    • key/value松散结构
    • json结构
  • 响应头
    • cache-control
      • no-store(优先级最高)
      • no-cache
      • max-age
    • expires(失效时间,服务器时间)
    • ETag(配合If-None-MatchIf-Match使用)
      • 一般使用MD5算法,获得一个唯一值,作为标签
      • 注意状态码 304412
    • Last-Modify(配合If-Modified-SinceIf-Unmodified-Since)
      • 注意状态码 304412
    • Access-Control-Allow-Credentials (【跨域】是否允许后续请求携带认证信息(cookies),该值只能是true,否则不返回)
    • Access-Control-Allow-Origin (【跨域】指定允许其他域名访问,一般是nginx服务器地址)

5.1 加载资源--优化点

  • 使用新的HTTP协议
  • 资源压缩
  • 工程化(webpack等工具)
    • 资源整合
    • 去除冗余
    • 拆包(功能性、业务性)
  • 懒加载
    • 滚动加载
    • 图片懒加载
    • 组件懒加载
    • 路由懒加载
  • 预处理
    • preload
    • prefetch
    • preconnect
  • 防抖和节流

6. 缓存

缓存策略.png
  • 强缓存
    优先级:Cache-Control > Expires
    • Cache-Control
      • 可以控制是否使用缓存策略
      • 使用max-age中的相对时间(秒)类控制缓存的效时间
    • Expires
      • 保存的是一个以GMT时间为格式的服务器绝对时间,但是若服务器和客户端的时间有差,则会不准确
  • 协商缓存
    优先级:ETag > Last-Modify
    • ETag
      • 发送If-None-Match属性,值为ETag的值给后端,后端比对后告知浏览器是否使用本地缓存
      • 时效性可以精确到秒之内
      • 可以辨别文件定时生成相同内容的情况
      • 每次服务器都需要进行读写,消耗大
    • Last-Modify
      • 发送If-Modified-Since属性,值为Last-Modify的值为后端,后端进行时间比较后告知浏览器是否使用本地缓存
      • 时效性只能精确到秒
      • 无法辨别文件定时生成相同内容的情况
      • 每次服务器只需要进行读的操作,消耗小
  • 离线缓存
  • 代码级别缓存

7. 页面渲染

DOM树.png

CSSOM树.png

在浏览器还没接收到完整的 HTML 文件时,它就开始渲染页面了,在遇到外部链入的脚本标签或样式标签或图片时,会再次发送 HTTP 请求重复上述的步骤。在收到 CSS 文件后会对已经渲染的页面重新渲染,加入它们应有的样式,图片文件加载完立刻显示在相应位置。在这一过程中可能会触发页面的重绘或重排。这里就涉及了两个重要概念:ReflowRepaint

Reflow,也称作Layout,中文叫回流,一般意味着元素的内容、结构、位置或尺寸发生了变化,需要重新计算样式和渲染树,这个过程称为Reflow

Repaint,中文重绘,意味着元素发生的改变只是影响了元素的一些外观之类的时候(例如,背景色,边框颜色,文字颜色等),此时只需要应用新样式绘制这个元素就OK了,这个过程称为Repaint

所以说Reflow的成本比Repaint的成本高得多的多。DOM树里的每个结点都会有reflow方法,一个结点的reflow很有可能导致子结点,甚至父点以及同级结点的reflow

7.1 渲染和用户体验--优化点

  • FP阶段
    • 增加loading动画
    • 骨架屏
    • SSR
    • 预渲染(无头浏览器)
  • FCP阶段

8. 关闭TCP连接

关闭TCP连接.png

参考文献:
https://www.cnblogs.com/daijinxue/p/6640153.html
https://www.cnblogs.com/lmh001/p/9928517.html
https://blog.csdn.net/u012375924/article/details/82806617

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,470评论 6 501
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,393评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,577评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,176评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,189评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,155评论 1 299
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,041评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,903评论 0 274
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,319评论 1 310
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,539评论 2 332
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,703评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,417评论 5 343
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,013评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,664评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,818评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,711评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,601评论 2 353

推荐阅读更多精彩内容