前端优化网站性能的14条规则

摘要:
尽管IE目前不支持这种方法,但它可以为其他浏览器带来的节省使其值得关注。CDN还可以节省成本,同时提高网站性能。例如,CDN可以选择网络步骤数最少的服务器或响应时间最短的服务器。小型非商业网站可能无法支付这些CDN服务,可以使用免费CDN服务。

规则1:减少HTTP请求


性能黄金法则:只有10%~20%的响应时间花在对HTML文档的请求上,剩下80%~90%时间花在HTML文档所引用的所有组件(包括图片、脚本、样式表、flash等)的HTTP请求上。

因此,减少组件的数量并由此减少HTTP请求的数量 是改善响应时间最简单的途径。

  1. 图片地图
    将多个URL链接使用map方法关联到同一个图片上,从而减少HTTP请求 ;

    无图片地图示例:http://stevesouders.com/hpws/imagemap-no.php
    有图片地图示例:http://stevesouders.com/hpws/imagemap.php

    图片地图两种类型
    服务端图片地图:将所有点击提交到同一个目标URL,向其传递用户点击的x,y坐标。Web应用程序将该x,y坐标映射为适当的操作;
    客户端图片地图:直接在客户端将用户的点击映射到对应操作,无需向后端发送请求,映射通过map标签实现。

    图片地图缺点:
    定义图片地图时只能采取手工方式绘制且易出错,而且除了矩形、原型外几乎无法定义其他形状;

  2. CSS Sprites
    将多幅图片合并为一幅图片,然后使用CSS的background-pistion来调整HTML对应的背景图片的放置位置

  3. 内联图片

    通过使用data: URL模式可以在Web页面中包含图片但无需任何额外的HTTP淸求。尽管 IE目前还不支持这种方式,但它能给其他浏览器带来的节省使得它值得关注。
    我们都很熟悉包含http:模式的URL。其他类似的模式包括ftp:、file:和mailtcv.。但除此之外还有很多模式,如smtp:、 pop:、 dns:、 whois:、 finger:、 daytime:、 news: 和urn:。这其中有一些是官方注册的,还有一些由于广泛使用而被接受。
    data: URL模式在1995年被首次提议。规范(http://tools.ietf.org/html/rfc2397) 对它的描述为:“允许将小块数据内联为‘立即(immediate)’数”。数据就在其URL自身之中,其 格式如下: 
      data:[<mediatype>][;base64],<data>

    缺陷:不受IE支持;对数据大小有限制;

  4. 合并脚本和样式表
    尽量将单独的CSS文件合并到一个文件中,同理JS也是如此;对于那些开始编写模块化代码的人士们,解决方法是:遵守编译型语言的模式,保持JavaScript的模块化,而在生成过程中从一组特定的模块中生成一个目标文件

规则2:使用内容分发网络


网站最初通常将其所有的服务器都放在一个地方,当用户群增加时,网站就必要在多个位置不同的服务器上部署不同的内容。

  1. 内容发布网络
    内容发布网络(CDN )是一组分布在多个不同地理位置的Web服务器,用于更加有效地向用户发布内容。CDN在提高网站性能的同时还可以节省成本
    例如,CDN可

    能洗择网络阶跃数最小的服务器,或者具有最短响应时间的服务器。

    小型的非商业网站可能无法支付这些CDN服务的开销,可采用免费的CDN服务。

    优势:缩短响应时间;扩展存储能力;缓和Web流量峰值压力,如在获取天气或股市新闻、浏览流行的体育或娱乐事件时
    缺点:你的响应时间可能会受到其它网站,甚至可能是你竞争对手流量的影响;无法直接控制组件服务器,修改HTTP响应头必须通过服务提供商来完成;

规则3:添加Expires头


  1. Expires 头
    浏览器〔和代理)使用缓存来减少HTTP请求的数量,并减小HTTP响应的大小,使WEB页面加载得更快。
    Web服务器使用Expires头来告诉Web客户端可以使用一个组件的当前副本,直到指定时间为止。HTTP规范中简要地称该头为“在这一日期/时间之后,响应将被认为是无效的”。

    什么是Expires头?

    Expires存储的是一个用来控制缓存失效的日期。当浏览器看到响应中有一个Expires头时,它会和相应的组件一起保存到其缓存中,只要组件没有过期,浏览器就会使用缓存版本而不会进行任何的HTTP请求。Expires设置的日期格式必须为GMT(格林尼治标准时间)。

    不足:

    首先,Expires头使用的是一个特定的时间,要求客户端和服务器端的时钟严格同步。何为严格同步?我们知道客户端的时间是可以修改的,如果服务器和客户端的时间不统一,这就导致有可能出现缓存提前失效的情况,存在不稳定性。其次,假如Expires的日期到来了,那么还需要在服务器配置中提供一个新的日期。

  2. Max-Age和mod_expires

    HTTP1.1引入了Cache-Control头来克服Expires头的限制。Cache-Control使用max-age制定组件被缓存多久,使用秒为单位,例如Cache-Control:max-age=3600;表示组件将被缓存60分钟。如果max-age和Expires同时出现,则max-age有更高的优先级,浏览器会根据max-age的时间来确认缓存过期时间。Cache-Control除了可以设置max-age之外,还可以同时设置其他标签。如下图所示常用标签:

    前端优化网站性能的14条规则第1张

  3. 空缓存 VS 完整缓存
    与你页面相关的浏览器缓存状态

  4. 修订文件名
    如果我们将组件配置为可由浏览器带来缓存,当这些组件改变时用户如何获得更新呢?
    为了确保用户能够获得组件的最新版本,需在所有HTML页面中修改组件的文件名。
    如果你是用PHP等动态语言生成的HTML页,简单的解决方案就是为所有组件的文件名使用变量,在更新文件名时只需简单地修改变量即可

    无Expires示例:http://stevesouders.com/hpws/expiresoff.php
    有Expires示例:http://stevesouders.com/hpws/expireson.php


规则4:压缩组件


规则1和规则3通过限制不必要的HTTP请求解决响应时间问题;规则2通过将HTTP响应拉近用户来减少响应时间。

规则4则通过减少HTTP响应的大小来减少响应时间,通过gzip编码压缩HTTP响应包(减少页面大小最简单的技术,影响最大)

  • 压缩是如何工作的
    从HTTP 1.1开始,Web客户端可以通过HTTP请求中的Accept-Encoding头来表示对压缩的支持。
      Accept-Encoding: gzip, deflate
    如果Web服务器看到请求中有这个头,就会使用客户端列出来的方法中的一种来压缩响应。Web服务器通过响应中的Content-Encoding头来通知客户端
      Content-Encoding: gzip

    可了解deflate,目前使用很少,效果甚微

  • 压缩什么
    HTML文档、脚本、样式表、XML、JSON在内任何文本;图片和pdf不应该压缩

    压缩的成本:
    服务器端花费额外的CPU周期完成压缩,客户端要对压缩文件进行解压缩,要检测收益是否大于开销,需要考虑响应的大小、连接的宽带和客户端与服务器之间的网络距离。

  • 配置
    配置gzip时使用的模块取决于Apache的版本——Apache 1.3使用mod_gzip而Apache 2.x使用mod_deflate。此处只介绍流行的web服务器Apache

    1.Apache 1.3——mod_gzip
      mod_gzip网站:http://www.schroepl.net/projekte/mod_gzip/

    2.Apache 2.x——mod_deflate
      mod_flate网站:http://httpd.apache.org/docs/2.0/mod/mod_deflate.html


    实例:
    无压缩:http://stevesouders.com/hpws/nogzip.html
    压缩HTML:http://stevesouders.com/hpws/gzip-html.html
    压缩所有组件:http://stevesouders.com/hpws/gzip-all.html


规则5:将样式表放在顶部


将样式表放在底部阻碍页面的逐步呈现

规则6:将脚本放在底部


规则7:避免CSS表达式


规则8:使用外部Javascript和Css


规则9:减少DNS查找


Internet 是通过IP地址来查找服务器的,因为IP地址难于记忆,通常使用包含主机名的URL来取代,当浏览器发送其请求时,DNS将主机名映射到IP地址上。

当你在浏览器中输入www.baidu.com时,连接到浏览器的DNS解析器会返回服务器的IP地址

免责声明:文章转载自《前端优化网站性能的14条规则》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇Selenium基本使用(十一)异常捕获STAR UML 简述&amp;lt;二&amp;gt;下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

基于H5的混合开发介绍(一)WebView

转自: https://www.cnblogs.com/sanchang/p/9261461.html 一 WebView到底是什么      1 WebView是一种控件,它基于webkit引擎,因此具备渲染Web页面的功能。     2 基于Webview的混合开发,就是在 Anddroid os(安卓)/I os(苹果)原生APP里,通过WebVie...

SpringBoot整合mybatis、shiro、redis实现基于数据库的细粒度动态权限管理系统实例(转)

1.前言 本文主要介绍使用SpringBoot与shiro实现基于数据库的细粒度动态权限管理系统实例。 使用技术:SpringBoot、mybatis、shiro、thymeleaf、pagehelper、Mapper插件、druid、dataTables、ztree、jQuery 开发工具:intellij idea 数据库:mysql、red...

centos6 free 和 centos 7的free 的差异与对比

以下内容大多数是转载 在centos6中: 查看内存是这样的: [root@ ~]# free -h  #人性化输出显示total used free shared buffers cachedMem: 996M 521M 474M 56K 35M 118M-/+ buffers/cache: 368M 628MSwap: 1.5G 234M 1.2G t...

Vue-CLI项目搭建

一、环境搭建 1、安装服务器node 官网下载 https://nodejs.org/zh-cn/ node:用C++语言编写,用来运行JavaScript语言     node可以为前端项目提供server (包含了socket) 2、安装包管理器npm 管理员命令行安装:window系统:npm install -g cnpm --registry=h...

关于WinForm/Web如何使用缓存Cach

Cache 的绝对到期与滑动到期 绝对到期:设置绝对过期时间 到了指定时间以后会失效。(类似Cookie机制) 相对到期也称滑动到期:设置相对过期时间 指定时间内无访问会失效。(类似Session机制) HttpRuntime.Cache与HttpContext.Current.Cache 为同一个对象HttpRuntime.Cache.Add 存在相同...

hibernate必须知道的知识

Hibernate经典知识:   1、Hibernate工作原理及为什么要用?     1.       答:hibernate,通过对jdbc进行封装,对 java类和关系数据库进行mapping,实现了对关系数据库的面向对象方式的操作. 1.对JDBC访问数据库的代码做了封装,大大简化了数据访问层繁琐的重复性代码。 hibernate的性能非常好...