这是部门同事的一次内部分享,听完后受益颇多,趁着记忆还算新鲜,赶紧记录一波。

从 dev-tool 看页面 parse 过程

时间都去哪儿了

当浏览器发送一个请求到接受所有响应数据截止,这个过程发生了什么?我们最关心的时间又是如何被消耗的?

Connection StartContent Download

图(1)请求并得到一个网络资源/文件的过程、及时间

名词解释:

  • Queueing. 浏览器在以下事件发生时产生排队请求:有更高优先级权限的请求;已经打开 6 个同源限制的 TCP 链接;浏览器会短暂分配磁盘缓存中的空间。
  • Stalled.阻塞。 当产生Queueing 时,请求会被阻塞。
  • DNS Lookup. DNS 查询。浏览器正在查询请求的 IP 地址。
  • Proxy negotiation.浏览器正在和代理服务器协商请求。
  • Request sent。开始发送请求。
  • Waiting(TTFB).浏览器正在等待响应的第一个字节。TTFB表示Time To First Byte。它包括1次往返延迟的时间和服务端准备响应的时间。
  • Content Download.浏览器正在接收响应。

页面解析过程

html文件的相应字节被浏览器接受到被后,会触发finish loading事件。然后,浏览器开始Parse Html,也就是开始构建 DOM 树。

解析过程是从上到下依次进行,当遇到以下情况,Parse过程将被阻塞:

  • HTML的响应流被阻塞在了网络中
  • 有未加载完的脚本
  • 执行脚本前,此时还有未加载完的样式文件
  • 执行脚本

load事件被触发,浏览器执行以下操作,开始页面渲染。
Recalculate Style --> Layout --> Update Layer Tree --> Paint --> Composite Layers

使用 dev-tool 进行页面性能分析

我们使用chrome浏览器的dev-tool进行页面性能分析,录制的是航班管家h5(本地)首页初始加载的情况。

图(2)概览

我们将图2放大一点:

图(3)

Main项表示浏览器主要流程时序,Network项表示网络请求时序。

parse html

结合图2、图3的Main项可以看到,

第一步:发送了一个请求->Send Request(home),对应network中灰色的home(wtest.133.cn),它表示请求https://wtest.133.cn/dev/lfy/hangban/vue/jipiao/home这个html页面,响应数据是分段发送的,浏览器接受到数据片段即开始Parse Html并且在Parse Html(home[1...54])过程中,并行发送了从alpaca.cssresize-vue.js的 7 个请求。

第二步:等待资源加载完毕,执行脚本后,继续Parse Html(home[55...])

第三步:DOMContentLoaded事件完成,开始渲染页面。此时执行延迟脚本,发送图2中第一个红线框的JS请求,等待响应。

第四步:浏览器接受响应,执行脚本后,发送第二个红线框的 JS 请求,等待响应。

第五步:浏览器接受响应,执行脚本。end。

优化

通过以上分析,我们已经清楚了时间都被浪费在了哪些地方:

  • alpaca.css 加载时间过长
  • 红线框 JS 的请求优先级过低
  • JS 请求 Stalled 时间过长
  • 浏览器并发数量限制

优化举措:

  • 将css文件内敛到 html 文件中
  • 将首页渲染必需的 JS 同步加载,非必需的延迟加载
  • 经分析,JS 文件 Stalled 的时间过长原因是:内部require资源都是动态加载,每次都会耗费性能查找。需要改成静态加载。

扩展

猜测预加载技术

我们知道,JS 加载和执行过程中会阻塞页面Parse。但仔细观察图3,请求几乎都是同时发送的,这是为什么呢?

为了减少阻塞时间,现代浏览器使用了一种“猜测预加载”的技术。当渲染被阻塞的时候,它会做以下事情:

  • 轻量级的HTML(或CSS)扫描器(scanner)继续在文档中扫描
  • 查找那些将来可能能够用到的资源文件的url
  • 在渲染器使用它们之前将其下载下来

但是,猜测预加载不能发现通过javascript脚本来加载的资源文件(如,document.write()),参见

更多:
详谈合成层(composite layers)

使用dev-tool定位页面性能瓶颈的更多相关文章

  1. 前端性能优化之利用 Chrome Dev Tools 进行页面性能分析

    背景 我们经常使用 Chrome Dev Tools 来开发调试,但是很少知道怎么利用它来分析页面性能,这篇文章,我将详细说明怎样利用 Chrome Dev Tools 进行页面性能分析及性能报告数据 ...

  2. selenium定位页面元素的一件趣事

    PS:本博客selenium分类不会记载selenium打开浏览器,定位元素,操作页面元素,切换到iframe,处理alter.confirm和prompt对话框这些在网上随处可见的信息:本博客此分类 ...

  3. 定位页面元素之xpath详解以及定位不到测试元素的常见问题

    一.定位元素的方法 id:首选的识别属性,W3C标准推荐为页面每一个元素设置一个独一无二的ID属性, 如果没有且很难找到唯一属性,解决方法:(1)找开发把id或者name加上.如果不行,解决思路可以是 ...

  4. kibana Dev tool 查询结果与预期不符

      问题描述 项目使用Elasticsearch作为搜索引擎,Kibana用来进行可视化操作,Kibana中有Dev tool可供用户使用REST ful API 访问Elasticsearch,在一 ...

  5. 使用CSS选择器定位页面元素

    摘录:http://blog.csdn.net/defectfinder/article/details/51734690 CSS选择器也是一个非常好用的定位元素的方法,甚至比Xpath强大.在自动化 ...

  6. Atitit s2018.5 s5 doc list on com pc.docx  Acc 112237553.docx Acc baidu netdisk.docx Acc csdn 18821766710 attilax main num.docx Atiitt put post 工具 开发工具dev tool test.docx Atiitt 腾讯图像分类相册管家.docx

    Atitit s2018.5 s5  doc list on com pc.docx  Acc  112237553.docx Acc baidu netdisk.docx Acc csdn 1882 ...

  7. Selenium 定位页面元素 以及总结页面常见的元素 以及总结用户常见的操作

    1. Selenium常见的定位页面元素 2.页面常见的元素 3. 用户常见的操作 1. Selenium常见的定位页面元素 driver.findElement(By.id());driver.fi ...

  8. webdriver定位页面元素时使用set_page_load_time()和JavaScript停止页面加载

    webdriver定位页面元素时使用set_page_load_time()和JavaScript停止页面加载 原文:https://my.oschina.net/u/2344787/blog/400 ...

  9. selenium第三课(selenium八种定位页面元素方法)

    selenium webdriver进行元素定位时,通过seleniumAPI官方介绍,获取页面元素的方式一共有以下八种方式,现按照常用→不常用的顺序分别介绍一下. 官方api地址:https://s ...

随机推荐

  1. FTP 搭建

    FTP 搭建 FTP 是 File Transfer Protocol(文件传输协议)的英文简称,它工作在 0SI 模型的第七层,TCP 模型的第四屋上,即应用层. 一.FTP 简介 FTP 会话时包 ...

  2. 项目 solrcloud / zookeeper 搭建

    财经道网站搜索引擎,数据快速检索,数据集群 功能描述:使用solr为项目数据库表p2p,银行理财,基金,贷款,信托,保险等建立数据索引,实现数据的导入,增量索引.实现检索建议和数据的快速查找.使用zo ...

  3. R 语言安装问题集锦

    R安装问题R CMD INSTALL -l /data1/jhh/envirment/R/R_lib /data1/jhh/software/qvalue_2.10.0.tar.gz 问题1 :con ...

  4. Devexpress VCL Build v2013 vol 13.2.4 发布

    不说了,自己看吧. What's New in 13.2.4 (VCL Product Line)   New Major Features in 13.2 What's New in VCL Pro ...

  5. 2018.09.17 bzoj1260: [CQOI2007]涂色paint(区间dp)

    传送门 区间dp简单题啊. 很显然用f[l][r]f[l][r]f[l][r]表示把区间[l,r][l,r][l,r]按要求染好的代价. 这样可以O(n)O(n)O(n)枚举断点转移了啊. 显然如果断 ...

  6. java中的实例化

    java中的new用于实例化一个对象 T1 a= new T1(); T2 b= new T1(); 区别: 问题1:不是实例化一个a,是实例化一个T1 T1 的一个 对象的引用 a 指向了堆空间里的 ...

  7. SPSS—非线性回归(模型表达式)案例解析

    非线性回归过程是用来建立因变量与一组自变量之间的非线性关系,它不像线性模型那样有众多的假设条件,可以在自变量和因变量之间建立任何形式的模型    非线性,能够通过变量转换成为线性模型——称之为本质线性 ...

  8. Flex box 弹性盒子布局

    display: -webkit-flex 标识使用弹性布局 flex: num  占容器的比例   Flex等比划分 导航1 : Flex :1;  导航2  Flex: 2;     ————&g ...

  9. 同一台服务器配置多个tomcat服务的方法

    要在同一台服务器上配置多个tomcat服务,需要解决以下几个问题 (1) 不同的tomcat启动和关闭监听不同的端口 (2) 不同的tomcat的启动文件startup.sh 中要指定各自的CATAL ...

  10. 【笔记】virtualbox+arch+kde5安装流水账

    正常安装就是RTFD就行了,不行辅助这几个链接也行: 我先把整个脚本[1]放这里: loadkeys us parted mkfs.ext4 /dev/sda1mkfs.ext4 /dev/sda3 ...