1.1 图片格式及应用场景
是一种针对彩色照片而广泛使用的有损压缩图形格式。
应用于存储和传输照片。
不适合:线条图形和文字、图标图形,不支持透明度。
适合 :颜色丰富的照片、彩色图、通栏banner图;结构不规则的图形。
压缩:
npm i -g jpegtran
jpegtran -copy none -optimize -outfile out.jpg in.jpg
一种无损压缩的位图图形格式,支持索引、灰度、RGB三种颜色方案以及Alpha通道等特性。
最高支持24位彩色图像(PNG-24)和8位灰度图像(PNG-8)
不适合:由于是无损存储,彩色图像体积太大,所以不适合
适合:纯色、透明、线条绘图,图标;边缘清晰、有大块相同颜色区域;颜色数较少但需要半透明。
压缩:
npm i node-pngqueant-native
一种位图图形文件格式,以8位色(256中颜色)重现真彩色的图片,采用LZW压缩算法进行编码。仅支持完全透明和完全不透明;如果需要比较通用的动画,gif是唯一的选择。
不适合:每个像素只有8比特,不适合存储彩色图片。
适合:动画、图标。
压缩: gifsicle
1.2 如何让图片加载更快?
1.3 在服务器端进行图片自动优化的原理
1.4 真的需要图片么?
css样式链接放在页面头部
css加载不会阻塞DOM解析,但会阻塞DOM tree渲染,也会阻塞后面JS执行。任何body元素之前,可以确保在文档部分中解析了所有css样式(内联和外联),从而减少了浏览器必须重排文档的次数。如果放在页面底部,就会等待最后一个css文件下载完,此时会出现‘白屏’。
JS放在HTML底部
防止js的加载、解析、执行对阻塞页面后续元素的渲染。
设置favicon.ico
如果不设置网站控制台会报错,页面加载过程中也没有图标loading的过程,同时也不利于记忆网站的品牌。
增加首屏必要的css和JS
3.1 提升CSS渲染性能
如 nth-child 伪类 position:fiexd等
如 text-indent:-99999px
如css3 3D transforms \css3 transitions/opacity
3.2 合理使用css选择器
3.3 提升css文件加载性能
3.4 精简css代码
3.5 合理使用web fonts
3.6 css动画优化
4.1 JS优化总体原则
4.2 提升js文件加载性能
4.3 JS变量和函数优化
4.4 JS动画优化
requestAnimationFrame可以在正确的时间进行渲染,定时器无法保证回调函数的执行时机。
4.5 合理使用缓存
4.6 JS模块化加载方案和选型
旨在web浏览器之外为JS建立模块生态系统,node模块化方案
requireJS
seaJS
5.1 js
为了减少回流,避免频繁操作DOM,可以合并多次对DOM的修改,然后一次性批量处理。
绘制过程开销比较大的属性设置应尽量减少使用
减少绘制区域范围
5.2 CSS
页面交互卡顿和流畅度很大一部分原因是页面有大量的DOM元素。假如从一个上万节点的DOM树上,使用querySelectorAll或getElementByTagName查找某一节点是非常耗时的。
元素的绑定事件,事件冒泡和事件捕获的执行也会相对耗时。
控制DOM大小的技巧:
7.1 静态文件压缩
7.2 静态文件打包方案
7.3 静态文件缓存
2、页面渲染技术架构和方案
2.1 服务端渲染
2.2 客户端渲染
3、页面静态化
定义:静态化是使动态化的网站生成静态HTML页面以供用户更好访问的技术。
技术优势:
技术不足:
技术实现:
协作方式:
选型建议:
4、前后端分离
定义:
技术实现:
技术优势
技术不足
5、单页面应用
技术优点
技术缺点
选型建议
6、BigPipe
定义:
技术实现:
7、同构直出
定义;
一套代码既可以在服务端运行又可以在客户端运行,就是同构。
技术优势:
技术实现:
8、PWA
技术优势
技术实现
浏览器兼容性
9、页面加载优化
10、接口优化
11、接口缓存优化
1、webview
IOS UIWebView
优点:从IOS 2开始就作为APP内展示web内容的容器
排版布局能力强
不足:内存泄漏
极高内存峰值
300ms延迟
JS的运行性能和通信限制
2018年IOS 12后 不再维护
IOS WKWebView
优势:比UIWebView内存开销小
在性能、稳定性、占用内存方面有很大提升
高达60fps的滚动刷新率
自身支持右滑返回手势
支持更多的HTML的属性
内存占用是UIWebView的1/4 ~1/3
加载速度比UIWebView提升了一倍左右
更为细致的拆分了UIWebViewDelegate中的方法
允许JS的Nitro库加载并使用
可以和JS直接互调函数
不足:
不支持页面缓存,需要自己注入cookie
无法发送post参数
2、设置webview
3、导航栏预加载
4、打通登录态
5、URL预加载
6、提升进度条体验
7、JS-SDK优化
8、缓存策略
缓存配置:
9、RN
10、小程序
11、Flutter
12、H5离线化
1、CDN
2、DNS
浏览器并发数限制,分布设置多个域名
3、减少HTTP请求
4、减少Cookie大小
5、Gzip
6、Https
优点:SEO、安全
7、HTTP2
优势:
HTTP2站点优势
5.1 前端研发流程
5.2 前后端联调
5.3 自动化测试
5.4 自动化上线
5.5 提升代码质量
6.1 上线前:HTML5的质量检测
6.2 上线后:HTML5错误和性能检测
6.3 线上业务
6.4 发版后:APP性能和错误监控
《web性能权威指南》
《网站性能检测与优化》
《高性能网站建设指南》
PS:本篇是极客时间专栏《前端全链路性能优化》学习笔记