Skip to content
字数
1403 字
阅读时间
6 分钟

减少 HTTP 请求

减少页面的请求次数(首次加载同时请求数不能超过 4 个),移动设备浏览器同时响应请求为 4 个请求(Android 支持 4 个,IOS5+ 支持 6 个)

各个浏览器在同一时间,能向同一域名请求的最大并发连接数:

请求次数具体参考:浏览器同域名请求的最大并发数限制

  • 合并 CSS 和 JS
  • 使用 CSS 精灵图

合并 css 和 js

将多个 css 文件合并成一个 css 文件,js 也是同理

不过也发现了一种将 js 和 css 文件 " 合并 " 的方式

html
test.jscss 文件
<!-- /* 
 function showMsg(m){
  alert(m);
}
<!-- */ 

<!-- .d{color:red;} 

index.html
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  <html xmlns="http://www.w3.org/1999/xhtml">
   <head>
    <title>test</title> 
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> 
    <script type="text/javascript" language="javascript"  src="test.jscss"></script>
    <link rel="stylesheet" rev="stylesheet" type="text/css" href="test.jscss" />
  </head>
 <body>
   <div class='d'>颜色变成红色</div>
   <input type="button" value="不会弹出" οnclick="showMsg('js');" />
 </body>
</html>

详情请查阅:# 把JS和CSS合并到1个文件

css 图像精灵

图像精灵(sprite)是单个图像中包含的图像集合

  • 包含许多图像的网页可能需要很长时间才能加载,同时会生成多个服务器请求,而使用图像精灵将减少服务器请求的数量并节约带宽

技术实现:通过 background-position 属性来定位显示大图片中小图片的位置来实现只显示小图片的效果

  • background: url(navsprites.gif) 0 0; - 定义背景图片及其位置(left 0px, top 0px)

示例:
这是完整图片

html
<!DOCTYPE html>
<html>
<head>
<style>
#home {
  width: 46px;
  height: 44px;
  background: url(/i/css/navsprites.gif) 0 0;
}

#next {
  width: 43px;
  height: 44px;
  background: url(/i/css/navsprites.gif) -91px 0;
}
</style>
</head>
<body>

<img id="home" src="/i/css/trans.gif" width="1" height="1">
<img id="next" src="/i/css/trans.gif" width="1" height="1">

</body>
</html>

目标显示效果

具体参考:CSS 图像精灵

缓存资源

使用缓存可减少客户端向服务器的请求次数,节省加载时间,所有的静态资源都可以再服务器端设置缓存,并推荐使用长缓存

  • 缓存一切可缓存的资源
  • 使用长缓存
  • 使用外联的样式和脚本

缓存过程

#缓存

浏览器与服务器通信的方式为应答模式,即是:浏览器发起 HTTP 请求 – 服务器响应该请求。那么浏览器第一次向服务器发起该请求后拿到请求结果,会根据响应报文中 HTTP 头的缓存标识,决定是否缓存结果,是则将请求结果和缓存标识存入浏览器缓存中

长缓存方式

  • HTTP 缓存
  • 离线缓存 (Application Cache,已废弃)
  • Service Worker(Web 缓存)

此外还有, 浏览器缓存

参考:离线化/长缓存方案探究与实践

浏览器缓存

压缩代码

减少资源大小可加快网页显示速度,对代码进行压缩,并在服务器端设置 GZip

  • 压缩代码 (多余的缩进、空格和换行符)
  • 启用 Gzip

压缩技术

浏览器的调试工具查看:

服务端开启 Gzip 方式

参考:服务器端如何开启GZIP压缩功能

无阻塞

头部内联的样式和脚本会阻塞页面的渲染,样式放在头部并使用 link 方式引入,脚本放在尾部并使用异步方式加载

首屏加载

首屏快速显示可大大提升用户对页面速度的感知,应尽量针对首屏的快速显示做优化

按需加载

将不影响首屏的资源和当前屏幕不用的资源放到用户需要时才加载,可大大提升显示速度和降低总体流量 (按需加载会导致大量重绘,影响渲染性能)

  • 懒加载
  • 滚屏加载
  • Media Query 加载(相比之下,可能重新制作一套移动页面更合适)

预加载

大型资源页面可使用 Loading,资源加载完成后再显示页面,但加载时间过长,会造成用户流失

  • 可感知 Loading:进入页面时 Loading
  • 不可感知 Loading:提前加载下一页

压缩图像

使用图像时选择最合适的格式和大小,然后使用工具压缩,同时在代码中用 srcset 来按需显示 (

过度压缩图像大小影响图像显示效果)

  • 使用 TinyJpgTinyPng 压缩图像
  • 使用 CSS3、SVG、IconFont 代替图像
  • 使用 img 的 srcset 按需加载图像
  • 选择合适的图像:webp 优于 jpg,png8 优于 gif
  • 选择合适的大小:首次加载不大于 1014kb、不宽于 640px
  • PS 切图时 D 端图像保存质量为 80,M 端图像保存质量为 60

Cookie 会影响加载速度,静态资源域名不使用 Cookie

避免重定向

重定向会影响加载速度,在服务器正确设置避免重定向

异步加载第三方资源

第三方资源不可控会影响页面的加载和显示,要异步加载第三方资源

参考

前端优化——加载优化

贡献者

The avatar of contributor named as jiechen jiechen

页面历史

撰写