2-2性能指标和优化指标
快呗,还能有啥。
2.2.1了解加载瀑布图
- Queueing: 先要通过排队,能力从浏览器收回去。
- DNS Loopup: 每个资源有一个域名,域名最终要被翻译成IP,而后找到这个服务器,所以还有一个DNS查找的过程
- initial connection: 找到资源当前呢,客户端要和服务器建设连贯,tcp协定建设链接的过程
- SSL :有些网站应用https,还有一个安全性验证的过程,SSL协商
- TTFB: 申请收回到申请回来的工夫(重要)(后盾的数据处理能力,其次是回来的网络情况)
- Content Download : 最初才是资源的下载
蓝色是dom加载完结的工夫,红色是页面上所有的资源加载胜利的工夫
2.2.2基于HAR存储于重建性能信息
保留加载实现的后果
2.2.3 速度指数
First Contentful Paint: 不是白屏的工夫
Speed Index >4就是慢 <4就是快
2.2.4 重要测量指标
交互响应足够快
画面足够晦涩,画面的帧数,1秒60帧
异步申请要足够的快(尽量在1秒内实现,实现不了加loading动画)
Speed IndexTTFB页面加载工夫首次渲染
2.2.5 其余
这个工具能够监听渲染的帧数
2-3 RAIL 测量模型【黄金指南】
2.3.1 什么是RAIL
一流公司做规范,Google写的规范
Response : 响应,是咱们的网站给用户的反馈,google给出的响应在50ms之内实现。
Animation:10ms 之内产生一帧动画
Idle 闲暇,尽可能的减少闲暇,尽量让后端去计算
Load 加载,在5s内实现加载并能够进行交互
花里胡哨,很高级的样子。
2.3.2 性能测试工具:
Chrome DevTools 开发调试、性能评测
Lighthouse 网站整体品质评估
WebPageTest 多测试地点、全面性能报告 链接在此
waterfall chart 申请瀑布图
first view 首次拜访
repeat view 二次拜访
2.3.3 本地装置WebPageTest
先装置docker。
同理,创立agent的镜像
3-1浏览器渲染原理和要害渲染门路
3.1.1浏览器的渲染原理
javascript
(引起视觉的变动,js,css,动画)->style
(从新对视觉进行计算)->layout
(布局)->paint
(绘制)->Composite
(合成,相似ps)
写的代码是文本,计算机是不能了解的。须要转换成计算机可能了解的数据结构。
以html的dom构造为例,辨认标记,转换成链式构造。
构建DOM对象:HTML->DOM
而后挂载CSS
构建CSSOM对象:CSS-CSSOM
两者,联合,生成Render Tree。
3-2 回流与重绘
布局关怀地位和大小
什么是布局抖动?
如何防止?
防止回流
读写拆散,
3-3应用Fast Dom避免布局抖动的利器
链接在此
3-4 复合线程与图层[深刻渲染流水线的最初一站]
复合线程(compositor thread)与图层(layers)
复合线程做什么
- 将页面拆分图层进行绘制再进行复合,就像ps
- 利用DevTools理解网页的图层拆分状况
- 哪些款式仅影响复合?transform opcity
录制款式。
3-5 防止重绘 [必学,减速页面出现]
利用DevTools辨认paint的瓶颈
command + P
关上工具,查看重绘
Paint flashing
闪瞎狗眼
利用will-change创立新的图层
应用tansform,op缩小repaint
只影响复合而不去触发布局和绘制。
willChange 不可过多。
# 3-6 高频事件防抖[拯救页面卡顿]
滚动
touch
poinermove
触发的频率高于刷新的频率
window.requestAnimationFrame
官网链接在此
window.requestAnimationFrame()
通知浏览器——你心愿执行一个动画,并且要求浏览器在下次重绘之前调用指定的回调函数更新动画。该办法须要传入一个回调函数作为参数,该回调函数会在浏览器下一次重绘之前执行
包上一层函数就能去抖动,达到一帧只触发一次的目标。
3-7 React工夫调度实现[中高级前端须要理解的React调度原理]
4-1 Javascript 开销和如何缩短解析工夫
在字体,html,图片这些资源当中,最为低廉的是JavaScript。它前面还有解析和编译的过程。最初才是执行.
同样170kb的文件,js的文件解析须要大概2秒,jpg只须要解码,大略0.06秒,绘制的总过程0.028s.
js解决的工夫大略须要占三分之一。就算用户可能看到咱们的页面,也没方法交互。
解决方案
Code splitting 代码查分,按需加载。
以后拜访门路须要哪些资源就加载哪些资源,不须要的咱们给它提早,拜访的时候再去加载。达到缩小加载js的目标
Tree shaking 代码减重
举例来说,咱们只是援用了loadsh外面的一个函数,就能够把这一个函数打包到bundle文件中。
缩小主线程的工作量
防止长工作
工作工夫越长,占据的阻塞越久
防止超过1kb的行间脚本
写行间脚本可能是为了放慢首屏的渲染。剩下的再通过web文件进行加载。
对于行间脚本,浏览器不能进行优化。
应用rAF和rIC进行工夫调度
具体看上一章。
4-2配合V8无效优化代码
v8编译原理
node用v8引擎
v8会对代码进行优化,发现优化的不行了呢,还会反向优化,就会节约很多工夫。
形象语法树
源码=》形象语法树=》字节码Bytecode=》机器码
编译过程会进行优化
运行时可能会产生反优化
v8优化机制
脚本流
查看超过30kb的脚本,就认为问价曾经足够大,会独自开一个线程进行解析。
字节码缓存
常常应用的变量进行缓存
懒解析
次要针对于函数,先申明然而不解析。
4-3 函数优化
懒解析的益处,如果不须要解析,那就不必在“堆”外面分配内存,不必为它创立一个语法树。能够进步咱们加载js的一个整体的效率。
然而事实中,咱们有时候还是须要咱们的函数立刻去执行的。
函数解析形式
lazy parseing 懒解析 vs eager parseing 饥饿解析
如果咱们先进行懒解析,而后发现须要立刻执行,还须要一个eager parseing,这样反而性能减半。
那么,咱们怎么通知解析器,咱们须要进行eager parseing?
利用Optimize.js优化首次加载工夫
链接在此
下面增加的括号会在压缩的时候被去掉,然而Optimize会帮咱们把括号找回来。
然而当初webpack4曾经本人可能实现这个性能。(老师讲话真是喜爱大喘气)。
4-4 对象优化
学习js对象,就像是练习内功。学习得好不好,就看你对对象学习的水平。
这些写法的目标就是为了投合V8引擎对你的代码进行优化。
以雷同程序初始化对象成员,防止暗藏类的调整
实例化后防止增加新属性
尽量应用Array代替array-like对象(转换的代价<)
4-5 html优化
缩小ifames 的应用
相当于多加了一个文档。父级文档要等它。
压缩空白符
防止深层次的嵌套
嵌套越深,遍历越慢
防止应用table布局
曾经out
css尽量外联
什么时候写在行间?
首屏优化
删除正文
语义化标签,不便浏览器做一些优化
有些标签能够不闭合
比方,ul外面的li
js放在上面,别阻塞dom加载
总结:html的优化占比拟少,为了把优化做到极致,能够关注下面几点,然而webpack集成了这样的性能。(html-minifile)
4-6 CSS对性能的影响
解析css,会自右向左去读,先找出所有的a标签,而后再找出第二个条件进行过滤。
升高css的阻塞,用不到的到前面再进行加载。
利用GPU进行实现动画,就是应用复合图层。
应用contain属性。
通知浏览器,我和里面的没关系,只对我外面的元素进行更改,不必进行回流,布局的从新计算。
font-display 属性
在页面上先展现文字,加重文字闪动的问题
5-1 资源的压缩与合并
目标
缩小http申请量
减小http申请资源的大小
怎么做?
html压缩。
(谷歌就没压缩,因为在别的方面做得更好)
css压缩
js压缩与混同,大部分时候都是应用webpack在构建时进行压缩。
css与js文件合并:
有的人认为合并比拟好,有的人认为拆分比拟好。在网络上加载比拟快。
总结就是同一模块的小文件,ok的,因为当初都是渐进式加载。单纯的为了优化,缩小http申请,会影响用户体验。
5-2 图片格式优化[多种图片格式-哪种最合适]
1、jpg 有损压缩 色调好
链接在此
工具:
imagemin 对jpg图片本人压缩
场景
应用场景,图片比拟大,还想要尽量保留画质。
缺点
当图片有比拟多的纹理和边缘,就不太适合,因为压缩比拟高,会有锯齿感。
2、PNG 通明背景
色调上并驾齐驱
工具
链接在此
场景
logo,纹理。
缺点
大
3、webP
谷歌新推出的图片格式
色调上与JPG并驾齐驱,然而压缩比更高。
反对webp的浏览器。
5-3 图片加载优化
图片的懒加载
原生的图片懒加载计划
<img loading="lazy" src="http://,,,,">
第三方图片懒加载计划
链接在此(react-lazy-load-image-component)verlok/lazyload
,yall.js
,Blazy
应用渐进式图片
横扫描的形式
渐进式图片
长处
刚开始就能看到图片的全貌,用户体验更好
响应式图片
适配。
刚开始只会加载一张图片,srcset
外面是不同尺寸的图片。会依据窗口的大小加载相应大小的图片。
5-4 字体优化
什么是FOIT ?什么是Fout?
字体下载未实现时,浏览器暗藏或主动降级,导致字体闪动。
Flash Of Invisible Text
Flash Of Unstyled Text
字体闪动不可避免。
font-display:auto|block|swap|fallback|optional// block// swap 替换的字体 不会白屏,然而不难看 // fallback 100ms 提前下载完,下载完之前不显示; 还没下载完,我就替换// optional 手机端优化,可能判断网速,不佳,默认字体,然而默认字体设置上,就不退了
@font-face{ unicode-}