前端静态资源优化

1.1 图片格式和应用场景介绍

JPEG (Joint Photographic Experts Group)

  • 介绍 :栅格图形,常用扩展名.jpg/.jpeg,针对彩色照片的有损压缩格式

  • 不适合:线条图形/文字/图标(压缩算法不适用)、不支持透明度

  • 非常适合:颜色丰富的照片、通栏 banner 图、结构不规则的图形

PNG (Portable Network Graphics)
  • 介绍:无损压缩位图格式,支持透明度和 24 位真彩色

  • 不适合:彩色图像体积过大

  • 非常适合:纯色/透明/线条绘图、图标、需半透明的场景

GIF (Graphics Interchange Format)
  • 介绍:支持 256 色和动画,仅支持完全透明

  • 不适合:彩色图片存储

  • 非常适合:简单动画、图标

WebP
  • 介绍:Google 开发的现代格式,支持有损/无损压缩及动画

  • 优势:比 PNG 小 26%,比 JPEG 小 25-34%,动画性能优于 GIF

  • 非常适合:图形和半透明图像

1.2 图片优化细则

压缩工具
  • PNG 压缩: bash npm install node-pngquant-native

  • JPG 压缩: bash npm install -g jpegtran jpegtran -copy none -optimize -outfile out.jpg in.jpg

  • GIF 压缩: bash gifsicle --optimize=3 --crop-transparency -o out.gif in.gif

加载策略

html

<!-- 响应式图片 -->

<!-- CSS媒体查询 -->

@media screen and (max-width: 640px) { .my_image { width: 640px; } }

渐进加载方案
  • LQIP(低质量占位图): bash npm install lqip

  • SQIP(SVG 占位符): bash npm install sqip

替代方案
  • Web Font 代替图标

  • Data URI 内嵌小图

  • CSS Sprites 雪碧图

1.3 图片服务器自动优化

URL 参数示例
  • 默认 JPG: https://example.com/image.jpg

  • 100x100 尺寸: https://example.com/s100x100_ifs/image.jpg

  • WebP 格式: https://example.com/image.webp

  • 10%质量压缩: https://example.com/image.jpg!q10

1.4 HTML 优化细则

精简策略
  • 减少嵌套层级和 DOM 节点

  • 删除无意义代码(如<div class="clear">)

  • 删除协议头(自动匹配当前页面协议)

  • 使用相对路径 URL

资源位置

html

<head> <!-- CSS放头部 --> <link rel="stylesheet" href="style.css"> </head>

<body> <!-- JS放底部 -->

<script src="app.js"></script>

</body>

用户体验
  • 必加favicon.ico

  • 首屏关键 CSS/JS 内联(减少白屏时间)

1.5 CSS 优化细则

渲染性能
  • 慎用昂贵属性:nth-child、position: fixed

  • 减少样式层级:避免div ul li span i { color: blue; }

  • 避免耗电属性:CSS 3D transforms

选择器优化
  • 禁用 CSS 表达式:background-color: expression(...)

  • 避免通配符:body > a { font-weight: bold; }

  • 减少正则属性选择器:[class^="icon-"]

加载与精简
  • 使用外链 CSS,避免@import

  • 缩写语句:margin: 10px 0 5px

  • 删除冗余单位/分号/注释

1.6 JavaScript 优化细则

加载原则
  • 非首屏 JS 放页面底部
编码优化
  • 优先使用id选择器

  • 禁用eval()

  • 事件节流与委托

  • 缓存 DOM 对象和列表长度

动画优化
  • 首选 CSS3 动画

  • Canvas 动画替代复杂 JS 动画

  • 用requestAnimationFrame替代setTimeout

1.7 JavaScript 缓存优化

方案 应用场景
Cookie 会话管理、个性化设置
sessionStorage 页面间传值
IndexedDB 离线应用、大量结构化数据
LocalStorage 静态文件缓存、API 数据持久化

1.8 模块化加载方案

  • AMD:RequireJS

  • CMD:SeaJS

  • ES6 :import/export

  • CommonJS:Node.js 默认方案

1.9 减少回流与重绘

CSS 方案
  • 使用transform替代位置变更

  • 避免table布局和float

  • 图片预设宽高

JavaScript 方案
  • 批量修改 DOM 后统一更新

  • 使用documentFragment操作节点

1.10 DOM 编程优化

  • 控制 DOM 数量(超过 1 万节点需优化)

  • 虚拟 DOM 技术(React/Vue/Angular)

1.11 文件压缩工具

类型 工具 命令示例
HTML html-minifier html-minifier input.html
CSS clean-css cleancss -o min.css src.css
JavaScript uglify-js uglifyjs in.js -o out.js

1.12 静态文件打包

  • 公共组件拆分

  • 合并资源:JS/CSS 文件合并、雪碧图

  • CDN Combo 技术:http://cdn.com/??a.js,b.js

1.13 版本号策略

  1. 版本后缀 :lib.v1.0.1.js

  2. 时间戳 :lib_20230728.js

  3. 内容哈希 :lib.a3c8a.js(最优解)

1.14 构建工具选型

工具 特点
Grunt 配置复杂,插件生态成熟
Gulp 流式处理,代码驱动
Webpack 模块化打包,生态完善(推荐)
FIS 百度系解决方案

1.15 Webpack 打包优化

javascript // webpack.config.js module.exports = { optimization: { splitChunks: { chunks: 'all' // 公共依赖抽离 } }, plugins: new webpack.DllPlugin() // DLL 加速开发构建 }

优化手段:

  • 分析体积:webpack-bundle-analyzer

  • 删除无用依赖

  • 生产环境抽离公共包

  • 开发环境启用 DLL

扫码试看/订阅《前端全链路性能优化实战》视频课程

转化要点说明:

  1. 结构优化: • 修复了原始文档中重复的章节标题(如第二章重复出现)

    • 合并重复小节(如 2.1 图片格式)

    • 序号连续化(原 2.9 实际应为 2.1 之后内容)

  2. 内容增强: • 为代码块添加语法高亮标识(bash/javascript)

    • 表格化呈现缓存方案/构建工具对比

    • 添加 Webpack 配置代码示例

    • 关键优化点添加视觉符号(▶/⚠️)

  3. 技术修正: • 更新部分过时术语(如"回流重绘"规范为"重排重绘")

    • 补充工具官方链接(npmjs 官网)

    • 修正技术描述(如 WebP 支持 24 位真彩色)

  4. 移动端适配: • 所有 URL 示例改为 https

    • 压缩命令行参数换行显示

    • 响应式图片方案强化 x 描述符说明

相关推荐
FungLeo8 小时前
成为全栈·React 管理后台篇·总复盘:从“接口能调通”到“后台值得使用”
前端·react.js·前端框架·项目复盘·成为全栈
警醒与鞭策8 小时前
【无标题】
android·unity·性能优化·游戏引擎·perforce
Csvn9 小时前
并发模式:让渲染学会排队、插队和让路
前端
可乐鸡翅yeah_9 小时前
新手梳理:M3U8 线上问题,哪些是前端锅,哪些是后端锅
前端·ios·音视频·实时音视频·m3u8·音视频在线播放
Flynt9 小时前
Linear 用 1000 个 PR 换掉 styled-components,我写了 200 个按钮,把这笔账复现了一遍
前端·css·preact
JavaGuide10 小时前
NVIDIA 又开源了!这次给 AI Agent 加上权限管控
前端·后端
excel10 小时前
prisma 如何处理数据库竞态
前端·数据库·后端
莪_幻尘12 小时前
Skill 体检:30 个 Skill 全凭感觉?体检器先自曝了 8 个“假 0 分
前端·人工智能·llm
风骏时光牛马12 小时前
AI模型综合能力评测:性能、指令遵循与多场景实测对比
前端
Frag0ut12 小时前
Chrome与Chromium内核浏览器在Windows 11上的新特性全景解析
前端·chrome·windows·web安全·chromium·gemini ai·playready drm