2022-04-17 04:42:28
HTML页面加载慢的优化,需从减少传输量、请求数、优化渲染路径及利用浏览器和服务器特性入手,常见优化技巧如下:
格式选择:采用WebP或AVIF格式,相同质量下文件更小。
响应式图片:通过<picture>标签和srcset属性,根据设备屏幕尺寸和分辨率提供不同大小的图片,避免手机用户下载PC端大图。
懒加载(Lazy Loading):仅加载用户当前视口可见的图片,滚动页面时再加载后续图片,减少初始加载资源。
压缩技术:使用工具在不明显影响视觉质量的前提下压缩图片,减小文件大小。
多路复用:在一个TCP连接上并行发送多个请求和响应,解决HTTP/1.1的队头阻塞问题,浏览器可并行下载所有资源,无需为每个资源建立新连接。
头部压缩:压缩HTTP请求和响应的头部信息,减少传输数据量。
服务器推送:在浏览器请求HTML的同时,主动推送浏览器可能需要的CSS、JS等资源,省去浏览器解析HTML后再发起请求的等待时间,优化关键渲染路径。
字体子集化:仅包含网站实际用到的字符,减少字体文件大小。例如,网站仅使用英文字母和数字时,无需加载完整的中文或日文字符集。
font-display属性:通过font-display: swap让浏览器先用系统默认字体显示文本,等自定义字体加载完成后再替换,避免“闪烁无样式文本”(FOIT);font-display: optional则更激进,若字体加载慢,直接用系统字体,不等待。
preconnect:提前进行DNS解析、TCP握手和TLS协商,节省后续连接到某个域名的请求时间,适用于从第三方CDN加载JS库等情况。
dns-prefetch:仅进行DNS解析,适用于确定会访问某个域名,但不确定何时建立连接的情况。
preload:告知浏览器尽快下载当前页面渲染所必需的资源(如字体、背景图),避免被CSS或JS间接引用时延迟发现。
prefetch:告知浏览器在空闲时预先下载可能在未来(如用户点击下一页时)用到的资源,加速用户在网站内部的导航体验。
异步加载:确保第三方脚本使用async或defer属性,不阻塞主线程。
延迟加载:非关键脚本等到页面主要内容加载完成后再加载,甚至等到用户交互时再加载。
沙箱化:对于可能带来安全或性能风险的第三方内容,使用<iframe>并结合sandbox属性限制其权限和影响。