You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Service Worker
基于 web work 的
web work: 可以新开启一个线程,可以干一些计算密集型的操作,不会阻塞主线程。任务执行完了之后会发一个信号给主线程。但是不能操作 dom
后端同时更改一个资源,有锁的机制。
Service Worker:也是在另外一个线程做事。可以拦截请求
初级性能优化
静态资源处理:
http:缓存优先级
cache-control:设置一个时间的长度(在当前时间基础上,再过多长时间过期),解决了 expires 的问题;
expires:设置一个过期时间,缺点: 浏览器时间和服务端时间不一致
返回状态码:200 form memory/disk
etag:请求带上 if-none-match 一个 由文件内容生成的 hash 值,判断的是文件内容
last-modified:请求 if-modified-since,服务端对比时间,是否一样,一样说明文件没有修改过,
返回状态码:304
一些不会变更的库:强缓存,业务代码:协商缓存
htt2.0 多路复用
1.0时代:请求-> 解析域名-> 找到服务器-> 建立http连接-> 传输数据
如果短时间内多个请求,每个请求都走这个流程。
keep-alive
1.1时代:
保持连接不关闭,可以复用连接,但是解析域名还是必要的
依然有 线头阻塞 ,要等上一个请求完了才能接着下一个请求
htt2.0
所有请求基于流,同一个域名下不管访问多少文件,只建立一个连接。
一个 http 连接可以处理多个请求。
解决了原来的线头阻塞: 一个 http 连接 在同一个时间只能处理一个请求
本请求要 依次发送 ,现在可以 并发。
HTTP2.0 还有:server push,
离线缓存
作用:
缓存我们的业务代码
basket.js 资源通过 ajax 请求,然后帮你缓存起来
localForage 包装了 localstorage,indexDb,websql的缓存
基于
web work
的web work: 可以新开启一个线程,可以干一些计算密集型的操作,不会阻塞主线程。任务执行完了之后会发一个信号给主线程。但是不能操作 dom
后端同时更改一个资源,有锁的机制。
Service Worker:也是在另外一个线程做事。可以拦截请求
Service Worker:简介, google doc
流程:
相关的库有:workbox
注意:
service work 拦截请求,一定只在 https 生效。localhost 也可以。
w3c navigation timing
渲染中的性能优化
渲染
注意: 重排一定引起重绘,但是重绘不一定引起重排
**简化流程:**Layout -> Paint -> Composite Layers 。一般的样式都会触发这个流程
网页里面的哪些元素会触发分层:
什么是分层:
一个页面就是一个大的分层,一个元素的改变会影整个分层,为了减少影响,可以将页面分为多个分层,减小影响区域。
重排重绘影响的也是分层。
让 GPU 参与分层,GPU 参与渲染
transform
CSS Triggers
做动画的时候优先使用 CSS 动画,
CSS 优先使用 transform
哪些元素会触发元素重排
display: '' 重排。
改变颜色:重绘
注意
操作的时候注意 读写分离。最大程度的减少重排。
CPU GPU
CPU 负责操作系统相关的
GPU 渲染相关的
页面性能优化
指标
怎么监控:performanceObserver
解决:
首屏直出,服务器渲染很快就会产生First Paint(FP)和First Contentful Paint(FCP)。
内存泄漏
多用 buffer,stream
wrk -t 模拟线程数 -c 连接数 -d 持续时间
指标:
avg: 平均值 每次测试平均值
stdev :标准偏差
max: 最大值
+/- stdev:
The text was updated successfully, but these errors were encountered: