前端静态资源优化

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-childposition: 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

  • ES6import/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 描述符说明

相关推荐
拾光拾趣录几秒前
用 Web Worker 计算大视频文件 Hash:从“页面卡死”到流畅上传
前端·javascript
伟大的兔神18 分钟前
cesium绘制动态柱状图
前端·gis·cesium
前端拿破轮21 分钟前
字节面试官:你对Promise很熟是吧?试一下手写所有静态方法
前端·面试·promise
一颗奇趣蛋23 分钟前
React- useMemo & useCallback
前端·react.js
lichenyang45327 分钟前
JS的基础概念--结束
前端
兵临天下api28 分钟前
跨境电商 API 对接避坑指南:亚马逊 SP-API 超时问题的 5 种解决方案(附重试代码模板)
前端
半花28 分钟前
【vue】v-自定义指令
前端·vue.js
Humbunklung42 分钟前
C# WPF 实现读取文件夹中的PDF并显示其页数
pdf·c#·wpf·npoi·gemini·itext
天生我材必有用_吴用1 小时前
vue3实战九、vue3+vue-cropper实现头像修改
前端
Sobeit1 小时前
ES2025 颠覆性 JS 黑科技新特性详解
前端