Skip to content

Latest commit

 

History

History
80 lines (72 loc) · 4.42 KB

页面运行时与加载时性能.md

File metadata and controls

80 lines (72 loc) · 4.42 KB

阅读原文

网页性能

  • 动画不能低于60帧。ui反馈不能低于100ms。
  • ui反馈不必追求最快,可故意拖延到100ms。并利用这个时间做其他事。
  • 尽量增加线程空闲时间,以快速反馈。
  • ui反馈优先级最高,交互期间尽量停下其他任务。
  • 页面要在五秒内变得可交互。

页面加载性能优化

消灭不必要的下载

  • 评估所有依赖是否必要,权衡利弊。
  • 依赖的下载路径是否可靠,不可用时候是否会阻碍整个页面。
  • 依赖是否充分优化了。
  • 产品设计时候就需要抛弃浪费带宽的设计。
  • 浏览器可以分批渲染dom tree,但必须获取所有css后才能渲染css。

优化和压缩资源

  • 算法、工具、压缩资源。
  • 服务器配置gzip。

优化图片

  • 去掉不必要的图片。
  • 尽量使用CSS3。
  • 用艺术字体,而不是图片。
  • 减少图片可能意味着更多的html、js、css。但意味深长的图片能节省很多描述文字。
  • 多种分辨率的位图供不同页面大小使用。
  • 手机DPI越来越高,导致图片必须有更高像素,才能显示清楚。

优化矢量图

  • 推荐SVG优化工具:svgo

优化位图

  • 一个像素需要四个字节(RGBA)
  • 即便传输过程有压缩,浏览器显示后,仍会占用图片实际所需的内存。
  • 使用压缩率更高的图片格式(用更少的字节代表颜色,但可使用颜色减少)。
  • 图片分辨率要尽可能小,避免图片分辨率大于显示分辨率。
  • 额外提供WebP和JPEG XR,提供更好体验。
格式 透明 动画 兼容性
GIF Yes Yes All
PNG Yes No All
JPEG No No All
JPEG XR Yes Yes
WebP Yes Yes Chrome, Opera, Android
  • 如何选择图片。 Chosse_formater
  • 压缩工具。
Tool Description
gifsicle create and optimize GIF images
jpegtran optimize JPEG images
optipng lossless PNG optimization
pngquant lossy PNG optimization

自动优化

阅读原文

  • gif体积大,可用视频、H.264或WebM(Chrome,Firefox,Opera支持)代替。
  • baseline jpeg 从上到下显示。
  • progressive jpeg. 从模糊到清楚显示。
  • 如果没有指明的宽高,当图片加载后会导致页面重新布局reflow;
  • 解码和缩放图片很消耗计算资源。
  • Image spriting, 把许多小图片合成一个图片,节约了请求次数。但是修改其中一个图标,回导致所有图标缓存失效。HTTP/2里,一个链接内可以发起多个请求,便无需使用Image spriting
  • 图片懒加载库 https://github.com/aFarkas/lazysizes
  • display:none时,浏览器是否请求图片。https://jakearchibald.github.io/request-quest/
  • 可以让浏览器提前请求图片,并不阻塞。但会是其他资源的优先级下降

字体优化

  • 将 WOFF 2.0 变体提供给支持它的浏览器。
  • 将 WOFF 变体提供给大多数浏览器。
  • 将 TTF 变体提供给旧 Android(4.4 版以下)浏览器。
  • 将 EOT 变体提供给旧 IE(IE9 版以下)浏览器。
  • 某些字体格式包含附加的元数据,如字体提示和字距调整信息,这些信息在某些平台上可能并非必要信息,这样便可进一步优化文件大小
  • @font-face 中unicode-range可以制定字符范围,用来避免下载不需要的语言的字符。
  1. CSSOM构建完成后才会请求字体文件。
  2. Safari 会在字体下载完成之前延迟文本渲染。
  3. Chrome 和 Firefox 会将字体渲染暂停最多 3 秒,之后他们会使用一种后备字体。并且字体下载完成后,他们会使用下载的字体重新渲染一次文本。
  4. IE 会在请求字体尚不可用时立即使用后备字体进行渲染,然后在字体下载完成后进行重新渲染
  • js的FontFace对象可以定义和控制CSS字体。