cinyearchan / performance-optimization

0 stars 0 forks source link

网络相关 #1

Open cinyearchan opened 3 years ago

cinyearchan commented 3 years ago

网络层面与渲染层面

输入 URL 到显示页面整个过程,涉及网络层面:

HTTP 连接层面的优化是前端网络优化的核心

cinyearchan commented 3 years ago

webpack 性能瓶颈

构建过程提速策略

构建结果体积压缩

前置操作: 打包结果文件结构可视化—— webpack-bundle-analyzer 找出导致体积过大的原因

const BundleAnalyzerPlugin = require('webpack-bundle-analyzer').BundleAnalyzerPlugin

module.exports = {
  plugins: [
    new BundleAnalyzerPlugin()
  ]
}
cinyearchan commented 3 years ago

图片类型比较

格式 关键词 优点 使用场景 缺陷
JPEG/JPG 有损压缩、体积小、加载快、不支持透明 高效压缩算法使图片轻巧,高质量压缩方式,压缩到 50% 以下仍能保住原有质量 60% 大的背景图、轮播图、Banner图 处理矢量图形和 Logo 等线条感较强、颜色对比强烈的图片,人为压缩导致的图片模糊明显; 不支持透明度处理
PNG-8 与 PNG-24 无损压缩、质量高、体积小、支持透明 颜色:8位支持256中颜色,24位约1600万种颜色; 更强的色彩表现力,线条处理更细腻,良好的透明度支持 小的 Logo、颜色简单且对比强烈的图片或背景 体积太大 理论上,PNG-24(最佳显示效果、不在意文件体积); 实践中,规避体积问题,不用 PNG 处理较复杂的图像,遇到适合PNG的场景,优先选择PNG-8 看PNG-8输出的结果是否有肉眼可见的质量损耗,损耗是否在可接受范围内
SVG 文本文件、体积小、不失真、兼容性好 文件体积更小、可压缩性更强、图片可无限放大而不失真、灵活性高 写在 HTML 里成为 DOM 的一部分; 写入以 .svg 为后缀的独立文件 渲染成本较高; 学习成本
Base64 文本文件、依赖编码、小图标解决方案 作为雪碧图的补充存在,雪碧图每次加载,都要单独向服务器请求; Base64 用于传输8Bit 字节码的编码方式,对图片进行 Base64 编码,直接将编码结果写入 HTML、CSS,减少 HTTP 请求的次数 图片实际尺寸很小; 图片无法以雪碧图的形式与其他小图结合(合成雪碧图是主要的减少 HTTP 请求的途径,Base64 是雪碧图的补充); 图片的更新频率非常低(不需要重复编码和修改文件内容,降低维护成本) 编码后图片大小膨胀微原文件的 4/3,使用场景受限,不能用于大图
WebP   细节丰富(JPEG) 支持透明(PNG) 支持显示动态图片(GIF) 使用前必须考虑兼容性,准备降级方案 新生标准,兼容性不高,平台支持程度较低; 增加服务器的负担