网络加载类
减小 HTTP 资源请求次数
- 合并静态资源图片、JavaScript 或 CSS 代码,减小页面请求数和资源请求消耗
- 避免重复的资源,防止增长多余请求
减少 HTTP 请求大小
- 减小不必的图片、JavaScript、CSS 及 HTML 代码
- 对文件进行压缩优化
- 使用 gzip 等方式压缩传输文件
将 CSS 或 JavaScript 放到外部文件中,避免使用 <style>
或 <script>
标签直接引入
- 在 HTML 文件中引用外部资源能够有效利用浏览器的静态资源缓存
避免页面中空的 href 和 src
- 当
<link>
标签的 href 属性为空,或 <script>
、<img>
、<iframe>
标签的 src 属性为空时,浏览器在渲染的过程当中仍会将 href 属性或 src 属性中的空内容进行加载,直至加载失败,这样就阻塞了页面中其余资源的下载进程,并且最终加载到的内容是无效的,所以要尽可能避免
// 不推荐
<img src="" alt="photo">
<a href="">点击连接</a>
为 HTML 指定 Cache-Control 或 Expires
- 为 HTMl 内容设置 CaChe-Control 或 Expires 能够将 HTML 内容缓存起来,避免频繁向服务器端发送请求。
<meta http-equiv="Cache-Control" content="max-age=7200" />
<meta http-equiv="Expires" content="Mon, 20 Jul 2016 23:00:00 GMT" />
合理设置 Etag 和 Last-Modified
- 合理设置 Etag 和 Last-Modified 使用浏览器缓存,对于未修改的文件,静态资源服务器会向浏览器端返回304,让浏览器从缓存中读取文件,减小 Web 资源下载的带宽消耗并下降服务器负载
<meta http-equiv="last-modified" content="Mon, 03 Oct 2016 17:45:57 GMT" />
减小页面重定向
- 页面每次重定向都会延长页面内容返回的等待延时,一次重定向大约须要600毫秒的时间开销,为了保证用户尽快看到页面内容,要尽可能避免页面重定向
使用静态资源分域存放来增长下载并行数
- 浏览器在同一时刻向同一个域名请求文件的并行下载数是有限的,所以能够利用多个域名的主机来存放不一样的静态资源,增大页面加载时资源的并行下载数,缩短页面资源加载的时间
使用静态资源 CDN 来存储文件
- 若是条件容许,可使用 CDN 网络加快同一个地理区域内重复静态资源文件的响应下载速度,缩短资源请求时间
使用 CDN Combo 下载传输内容
- CDN Combo 是在 CDN 服务器端将多个文件请求打包成一个文件的形式来返回的技术,这样能够实现 HTTP 链接传输的一次性复用,减小浏览器的 HTTP 请求数,加快资源下载速度
例如同一个域名 CDN 服务器上的 a.js,b.js,c.js 就能够按以下方式在一个请求中下载:javascript
<script src="//cdn.domain.com/path/a.js,b.js,c.js"></script>
使用可缓存的 AJAX
- 能够返回内容相同的请求,不必每次都直接从服务器端拉取,合理使用 AJAX 缓存能加快 AJAX 响应速度来减轻服务器压力
$.ajax({
url: url,
type: 'get',
cache: true, // 推荐使用缓存
data: {},
success() {
// ....
},
error() {
// ...
}
});
使用 GET 来完成 AJAX 请求
- 使用 XMLHttpRequest 时,浏览器中的 POST 方法发送请求首先发送文件头,而后发送 HTTP 正文数据,而使用 GET 时只发送头部,因此在拉取服务端数据时使用 GET 请求效率更高
$.ajax({
url: url,
type: 'get', // 推荐使用 get 完成请求
data: {},
success() {
// ....
},
error() {
// ...
}
});
减小 Cookie 的大小并进行 Cookie 隔离
- HTTP 请求一般默认带上浏览器的 Cookie 一块儿发送给服务器,因此在非必要的状况下,要尽可能减小 Cookie 来减少 HTTP 请求的大小
- 对应静态资源,尽可能使用不一样的域名来存放,由于 Cookie 默认不能跨域的,这样就作到了不一样域名下静态资源请求的 Cookie 隔离
缩小 favicon.ico 并缓存
- 有利于 favicon.ico 的重复加载,由于通常一个 Web 应用的 favicon.ico 是不多改变的
推荐使用异步 JavaScript 资源
- 异步的 JavaScript 资源不会阻塞文档解析,因此容许在浏览器中优先渲染页面,延后加载脚本执行。
例如:css
<script src="main.js" defer></script>
<script src="main.js" async></script>
使用 async 时,加载和渲染后续文档元素的过程和 main.js 的加载与执行是并行的。使用 defer 时,加载后续文档元素的过程和 main.js 的加载是并行的,可是 main.js 的执行要在页面全部元素解析完成以后才开始执行。html
消除阻塞渲染的 CSS 及 JavaScript
- 对于页面中加载时间过长的 CSS 或 JavaScript 文件,须要进行合理拆分或延后加载,保证关键路径的资源能快速加载完成
避免使用 CSS import 引用加载 CSS
- CSS 中的 @import 能够从另外一个样式文件引入样式,但应该避免这种用法,由于这样会增长 CSS 资源加载的关键路径长度,带有 @import 的 CSS 样式须要在 CSS 文件串行解析到 @import 时才会加载另外的 CSS 文件,大大延后 CSS 渲染完成的时间
页面渲染类
把 CSS 资源引用放到 HTML 文件顶部
- 通常推荐将全部 CSS 资源尽早指定在 HTML 文档 中,这样浏览器能够优先下载 CSS 并尽早完成页面渲染
JavaScript 资源引用放到 HTML 文件底部
- JavaScript 资源放到 HTML 文档底部能够防止 JavaScript 的加载和解析执行对页面渲染形成阻塞,这是由于 JavaScript 资源默认是解析阻塞的,除非被标记为异步或者经过其余的异步方式加载
不要在 HTML 中直接缩放图片
- 在 HTML 中直接缩放图片会致使页面的重排重绘,此时可能会使页面中的其余操做产生卡顿,所以要尽可能减小在页面中直接进行图片缩放
减小 DOM 元素数量和深度
- HTML 中标签元素越多,标签的层级越深,浏览器解析 DOM 并绘制到浏览器中所花的时间就越长,因此尽量保持 DOM 元素简洁和层级较少
尽可能避免使用 <table>
、<iframe>
等慢元素
<table>
内容的渲染是将 table 的 DOM 渲染树所有生成完成并一次性绘制到页面上的,因此在长表格渲染时很耗性能,应该尽可能避免使用它,能够考虑使用列表元素 <ul>
代替
- 尽可能使用异步的方式动态添加 iframe,由于 iframe 内资源的下载进程会阻塞父页面静态资源的下载与 CSS 及 HTML DOM 的解析
避免运行耗时的 JavaScript
- 长时间运行的 JavaScript 会阻塞浏览器构建 DOM 树、DOM 渲染树、渲染页面。因此,任何与页面初次渲染无关的逻辑功能都应该延迟加载执行,这和 JavaScript 资源的异步加载思路是一致的
避免使用 CSS 表达式或 CSS 滤镜
- CSS 表达式或 CSS 滤镜的解析渲染速度是比较慢的,在有其余解决方案的状况下应该尽可能避免使用
// 不推荐
.opacity {
filter:progid:DXImageTransform.Microsoft.Alpha(opacity=50);
}