网站首页 > 文章精选 正文
以下乃是雅虎“YSlow - 23 条规则”的详尽阐释,旨在优化网页之性能以及用户之体验,乃是结合技术之原理与实践之方法梳理而成:
1. 减少 HTTP 请求次数
说明:每一次 HTTP 请求皆会增添延迟以及资源之消耗。将图片(CSS Sprites)、脚本(JS)与样式表(CSS)予以合并,能够显著降低请求之次数。譬如,将众多小图标合并成为一张雪碧图,借由 background-position 进行定位展示。
2. 使用 CDN(内容分发网络)
说明:CDN 凭借就近缓存、智能路由以及负载均衡来加速内容之传输。例如,将静态资源(JS/CSS/图片)托管至 CDN 节点(诸如 Google CDN),以削减用户与源站点之间的物理距离所导致的延迟。
3. 避免空的 src 和 href
说明:空的 src(诸如 <img src="">)或者 href(诸如 <link href="">)将会触发浏览器加载当前页面之 URL,致使无效之请求。解决之方法涵盖填充占位符或者运用 javascript:void(0)。
4. 为文件头指定 Expires
说明:通过设定 HTTP 头 Expires 或者 Cache-Control,使得静态资源能够被缓存,减少重复之请求。例如,将图片设定为永不过期,对 CSS/JS 设定合理的缓存时间。
5. 使用 Gzip 压缩内容
说明:对文本类文件(HTML/CSS/JS/JSON)进行压缩能够减少 70% 以上的传输体积。需要在服务器配置当中启用 Gzip 模块(例如 Apache 的 mod_deflate)。
6. 把 CSS 放到顶部
说明:将 CSS 放置于 <head> 之中能够避免浏览器渲染之阻塞,防止出现无样式内容的“白屏”之现象。浏览器需首先加载 CSS 而后逐步进行页面之渲染。
7. 把 JS 放到底部
说明:JS 之加载会阻塞其他资源之下载,导致页面渲染产生延迟。将 <script> 标签放置于 <body> 之末尾或者使用 defer 属性能够优化加载之顺序。
8. 避免使用 CSS 表达式
说明:CSS 表达式(如 expression(document.body.clientWidth))会频繁触发重绘,致使性能降低。宜改用 JavaScript 来掌控动态样式。
9. 将 CSS 和 JS 放到外部文件
说明:外部文件能够被浏览器缓存,从而减少重复下载。然而,需权衡 HTTP 请求次数,高 PV 页面可将关键的 CSS/JS 进行内联。
10. 权衡 DNS 查找次数
说明:减少域名的数量能够降低 DNS 解析的时间,但需平衡并行下载的限制(例如 IE 每个域名仅支持 2 个并发)。通常采用二级域名来拆分静态资源。
11. 精简 CSS 和 JS
说明:删除注释、空格以及冗余代码,运用工具(诸如 UglifyJS、CSSNano)对文件进行压缩,以缩减文件的体积。
12. 避免跳转
说明:URL 重定向(如 http://example.com → http://www.example.com)会增加延迟。采用 CNAME 或者服务器配置(例如 Apache mod_rewrite)直接指向目标地址。
13. 删除重复的 JS 和 CSS
说明:重复的脚本会增加解析的时间,甚至引发逻辑错误。通过模块化管理和构建工具(例如 Webpack)来去除重复。
14. 配置 ETags
说明:ETag 凭借文件的唯一标识(例如 Inode 和修改时间)来验证缓存的有效性,适用于集群环境。但在多服务器场景下需谨慎配置,以规避校验冲突。
15. 可缓存的 AJAX
说明:为 AJAX 响应添加缓存头,避免重复请求相同的数据。例如,GET 请求的结果可缓存,而 POST 请求默认不可缓存。
16. 使用 GET 完成 AJAX 请求
说明:GET 请求可被缓存且为单次传输,而 POST 需先发送 Header 再发送 Body,从而增加延迟。
17. 减少 DOM 元素数量
说明:过多的 DOM 元素(例如嵌套的 <div>)会拖慢渲染和脚本的执行。使用语义化标签(例如 <article>、<section>)来简化结构。
18. 避免 404 错误
说明:无效的请求(诸如缺失的 JS 文件)会破坏页面的功能,而且浏览器或许会尝试将 404 响应解析为脚本,进而引发错误。
19. 减少 Cookie 大小
说明:Cookie 会随每一个请求进行发送,若其过大则会增添传输的开销。对于静态资源,使用无 Cookie 的域名(例如 static.example.com)予以隔离。
20. 使用无 Cookie 的域
说明:静态资源服务器(例如 CDN)不携带 Cookie,从而减少请求头的体积。例如,Yahoo! 运用 yimg.com 来托管图片。
21. 不要使用滤镜
说明:IE 的 AlphaImageLoader 滤镜(例如 PNG 透明)会阻塞渲染,并且增加内存的消耗。改以 PNG8 或者 SVG 来替代。
22. 不要在 HTML 中缩放图片
说明:通过 <img width="100"> 来缩放大图会浪费带宽以及处理的时间。直接提供适配尺寸的图片。
23. 缩小 favicon.ico 并缓存
说明:favicon 默认为会被请求,需要压缩为小文件(例如 1KB 以下),并设置长期缓存,以避免重复下载。
总结
YSlow - 23 条规则从“请求优化”、“缓存策略”、“资源管理”这三个维度提升网页的性能。开发者能够结合工具(例如 YSlow 插件、PageSpeed Insights)进行检测,并具有针对性地优化。
猜你喜欢
- 2025-06-15 产品经理必备知识——API接口(产品经理接口设计)
- 2025-06-15 不得不知的网络安全知识(网络 安全知识)
- 2025-06-15 西门子smart200 PLC数据互传Get/Put指令应用
- 2025-06-15 四步改造一套完美的 Controller 代码层,帅呆了!
- 2025-06-15 2020最新整理JAVA面试题附答案,包含19个模块共208道面试题
- 2025-06-15 超详细的网络抓包神器 tcpdump 使用指南
- 2025-06-15 「总结」用selenium工具做软件自动化测试的面试题及答案,码住
- 2025-06-15 C++网络编程神器libcurl极简指南:5分钟上手HTTP请求!
- 2025-06-15 Potplayer播放器设置固定播放大小
- 2025-06-15 葱姜蒜料什么时候放最好?看完这篇全GET
- 最近发表
-
- 面试中常被问到的Hash表,你了解吗
- JAVA面试考点:一文搞懂一致性Hash的原理和实现
- 一次性搞清楚equals和hashCode(hashcode() 与equals()区别,简单说明)
- HashMap.Key的故事:Key为什么出现Hash碰撞及冲突呢?
- hash冲突的几种解决方案对比(hash冲突的解决方式)
- 游戏王LN 无头骑士(无头骑士cv)
- Linux ln、unlink命令用法(linux link命令详解)
- n和l分不清矫正发音方法,这三步就够了
- golang引用私有gitlab项目代码(golang引入当前包下的文件)
- Instamic:录音领域中的 GoPro,让你想录就录,随心所欲
- 标签列表
-
- newcoder (56)
- 字符串的长度是指 (45)
- drawcontours()参数说明 (60)
- unsignedshortint (59)
- postman并发请求 (47)
- python列表删除 (50)
- 左程云什么水平 (56)
- 计算机网络的拓扑结构是指() (45)
- 编程题 (64)
- postgresql默认端口 (66)
- 数据库的概念模型独立于 (48)
- 产生系统死锁的原因可能是由于 (51)
- 数据库中只存放视图的 (62)
- 在vi中退出不保存的命令是 (53)
- 哪个命令可以将普通用户转换成超级用户 (49)
- noscript标签的作用 (48)
- 联合利华网申 (49)
- swagger和postman (46)
- 结构化程序设计主要强调 (53)
- 172.1 (57)
- apipostwebsocket (47)
- 唯品会后台 (61)
- 简历助手 (56)
- offshow (61)
- mysql数据库面试题 (57)