不管是应付前端面试还是改进产品体验,性能优化都是躲不开的话题。这里我们就简单聊一聊性能优化。
传输快 vs 体验快
优化的目的是让用户有“快”的感受,那如何让用户感受到快呢?
- 加载速度真的很快,用户打开输入网址按下回车立即看到了页面
- 加载速度并没有变快,但用户感觉你的网站很快
传输快
所谓的真快就是网站资源以最快的速度到达用户浏览器,那如何去做呢?我们先粗略定一些原则:
- 传输的内容体积要小
- 传输的内容数量要少
- 网速要足够快
- 服务器响应要及时
- 能重复利用的资源要利用好
- 暂时不需要的资源先不要
- 将来需要的资源抽空要
下面就能顺藤摸瓜,做个细化
-
传输的内容体积要小
- 图片要压缩
- 图片根据支持情况选择体积更小的格式(如 webp)
- css、js 内容压缩
- 服务端开启 Gzip,在传输数据之前再次压缩
-
传输的内容数量要少
- 图片图标合并(css sprite)、svg 图标合并(svg sprite)
- css、js 文件打包合并
-
网速要足够快
- 服务器出口带宽要够
- 考虑到南北差异、运营商差异,在不同地区部署服务器
3.静态资源放 CDN
-
服务器响应要及时
- 接口响应速度要快(数据库优化、查询优化、算法优化)
- cpu、内存、硬盘读写不要成为瓶颈;多加几台机器
- 重要页面(首页)静态化。服务端提前渲染后首页生成静态页面,用户访问首页直接返回静态页面,不需要像其他页面那样还需加载 css、js 再获取数据渲染展示
-
能重复利用的资源要利用好
- 服务器设置合适的静态资源缓存时间
- 前端文件打包时做合理的分块,让公共的资源缓存后能被多个页面复用
-
暂时不需要的资源先不要
- 图片懒加载
- 功能、模块、组件按需加载
-
将来需要的资源抽空先拿到
- DNS 预解析 <link rel="dns-prefetch" href="//jirengu.com">
- 预连接 <link rel="preconnect" href="//jirengu.com">
- 预获取 <link rel="prefetch" href="image.png">
- 预渲染 <link rel="prerender" href="//xiedaimala.com">
体验快
所谓的体验快就是让用户觉得网站的交互是“流畅的”、“舒适的”。比如
- 滚动页面不要有迟滞感
1.对于短时连续大量触发的操作要做节流 -
一些常见操作不要感觉拖泥带水
- DOM 的操作不要过于频繁
- 不要出现内存泄露
- 优化复杂运算
-
动画不要卡顿
- 多用 CSS 动画,少用 JS 动画
- 开启硬件加速
- 不要用 setTimeout/setInterval 去模拟动画
- 动画或者过渡的执行时间不要太久
性能优化的建议
臆想的优化不是优化,无明显成效的优化不是优化。浏览器的性能已经足够快,不要因为“过渡优化”牺牲代码的可读性
先做简单见效快的优化,再做复杂见效慢的优化。一张未压缩的大图片可能抵消辛辛苦苦做的全部其他技术优化
本文作者:若愚,本周若愚老师新班正式开班了,目前还剩不到10个名额,想报名的速度~
加饥人谷官方微信号:hungervalley, 可进群面基、吐槽老板、关注新机会,当然很多免费课奉上,近期免费好课:
合格的前端必会知识点3小时速成 若愚老师的js 免费课(视频已经上传)
校招专场经验分享(上)-拿到bilibili、美团、百度校招 offer 的饥人谷校友分享应届生如何准备校招(视频已经上传)
【本周日(12月24)晚上8点免费直播】校招专场经验分享(下) 拿到趣店、51信用卡校招 offer 的饥人谷校友分享前端面试题和如何写简历
【本周五(12月22)晚上8点半免费直播】《校招算法面试通关秘籍》,讲师简介:亚马逊工程师,北邮本硕
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。