高性能网站建设指南


进行优化前,关键是剖析当前的web性能,找到性能瓶颈,从而确定最需改进的地方;如果精力有限,首先将精力放在能明显提升性能的改进点上;

《高性能网站建设指南》提出了一个性能黄金法则:

只有10%-20%的最终用户响应时间花在了下载HTML文档上;其余的80%-90%的时间花在了下载页面中的所有组件上。

由于本文将实施一个完整的优化流程,所以,我们还是从后台开始;

案例说明:

优化之前的网站规模:

2个js、一个页头、一个页脚;3个css;

类型:博客类站点;后台逻辑简单;首页不到10个sql查询;

首页html文档52kb;

第一步:后台优化,启用页面缓存;

实验站点首页后台逻辑并不复杂,不超过10个Sql查询,通过查看时间线,本站在获取HTML文档时,花费的时间不到总响应时间的20%,优化之前没有使用缓存,所有的数据都是从数据库读取,这里,我们使用静态页面缓存,将首页整个页面完全的存放在缓存中(关于YII静态页面缓存的使用,参考这里);

通过查看html文档的生成时间来检测优化效果;

首字节时间为376ms;html生成的时间大大缩短,后台时间减少了一倍。

优化前:

WEB站点性能优化实践(加载速度提升2s) 建站教程 第1张

优化后:

WEB站点性能优化实践(加载速度提升2s) 建站教程 第2张

第二步,DNS域名解析加速:

DNS解析是用户访问站点的第一步,在此之前,你的网站无法做任何事情;

站点的DNS解析时间不应该超过500ms,如果站点原始DNS解析时间过长,就该考虑考虑使用第三方解析加速服务;

实验站点的原始DNS解析较慢,平均耗时1017ms,算是非常长的;对于DNS加速,可以使用DNS域名解析加速服务,本站点采用的国内的一款免费DNS加速服务DNSPOD,效果还不错,使用后平均耗时降到370ms;

加速前测试:平均解析时间:1017ms

使用DNS域名解析服务之后的测试:370ms

第三步:使用CDN加速;

采用第三方CDN加速,时间缩短到2.1s;从下图中看到主要的耗时在于并行下载的个数有些低,如果能够提升并行下载量的个数,那么整体加载时间就会降低;

注:个人建议,启用CDN最好放在最后一步,等将站点本身的优化都做完了之后,再启用CDN可以明显的看到优化效果。(开启CDN后,由于有CDN缓存的原因,观测站点的本身的优化就不是很方便了);

WEB站点性能优化实践(加载速度提升2s) 建站教程 第3张


第四步,采用多台服务器提高并行加载量:

原理:一个浏览器对与同一域名的并行下载的个数默认是2个, HTTP.1.0中规定的是4个。这样,我们可以使用不同的域名来提升下载的速度;

观察上图中的下载数量,第一次并行下载的个数是4个,初始认为是浏览器对于同一个域名来源的下载所限导致;于是考虑将部分静态文件分别放在不同的服务器上;通过把css和js放在不同服务器上;结果并不理想,发现并未提高速度。

想到在哪曾看到过,浏览器必须得把放在页头的css和js下载完成了之后才会开始下载其它的静态组件;

关于并行下载这点上,后续将继续实验是否还有优化的空间。

WEB站点性能优化实践(加载速度提升2s) 建站教程 第4张


第五步,合并脚本和样式表;

本站首页使用了2个js和3个css。如果采用朴素复制的方式,将js和css都分别整合到一个文件中,不但操作麻烦,而且不方便后期的管理。网络上有不少合并的工具,本站采用了CSS和JS合并优化工具-minify(下载地址:http://code.google.com/p/minify/)。如果使用的YII框架,更有YII整合版(minscript Extension),简单几步的配置,就自动将页面所有的js和css文件合并;

关于minscript Extension的使用,请参考:https://bitbucket.org/TeamTPG/minscript/wiki/Usage

第六步,压缩css/js/html/xml;

不同的web服务器设置方式有所差别,本站使用的Linux/apache,

在web根目录下的.htaccess文件中添加以下代码即可:

<ifmodule mod_deflate.c>

AddOutputFilter DEFLATE html xml php js css

</ifmodule>

通过firefox工具可看到,压缩前,html文档的大小是25KB;合并后的js大小为138KB;

WEB站点性能优化实践(加载速度提升2s) 建站教程 第5张

压缩后,html文档大小为6.2KB。js大小为39.8KB;减少2/3的传输时间;

WEB站点性能优化实践(加载速度提升2s) 建站教程 第6张

第七步,最大化的减少HTTP请求;

添加Expires头, 启用静态内容缓存,将jpg、gif等文件缓存;

方法也是在.htaccess中添加:

# Image and Flash content Caching for One Month

<FilesMatch “.(flv|gif|jpg|jpeg|png|ico|swf)$”>

Header set Cache-Control “max-age=2592360″

</FilesMatch>

结论

查看最终的测试结果,整体实现了较大的性能提升,最终页面展现时间为1.62s(测试使用的是一个第三方web测速工具,所有测试结果是在第三方本地无缓存的条件下进行)。仔细观察本站最后几个加载项:有一个第三方网站的广告(加载广告的时刻,页面已经全部呈现,对用户体验影响不大),以及cnzz的统计数据。这样看来,在第12项加载完后,整个页面就完整的呈现在用户面前,优化最终结果是1.1s,较优化前加载速度提升2s;由于物理条件(虚拟机、国外站点)所限,本次优化就到此为止(后续将在并行下载上做做文章,看是否有进一步提升空间)。

WEB站点性能优化实践(加载速度提升2s) 建站教程 第7张

本次优化主要使用的是前端优化,其中大部分规则来自于这本书的指导《高性能网站建设指南》;如果你的web前端部分还没有充分优化,强烈建议读读这本书;

这是一本你只需画上三小时就能看完,但收获价值远远大于付出的一本书。

WEB站点性能优化实践(加载速度提升2s) 建站教程 第8张

附上本书的目录:

绪言A:前端性能的重要性

第1章:规则1——减少HTTP请求

第2章:规则2——使用内容发布网络

第3章:规则3——添加Expires头

第4章:规则4——压缩组件

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

第6章:规则6——将脚本放在底部

第7章:规则7——避免CSS表达式

第8章:规则8——使用外部JavaScript和CSS

第9章:规则9——减少DNS查找

第10章:规则10——精简JavaScript

第11章:规则11——避免重定向

第12章:规则12——移除重复脚本

第13章:规则13——配置ETag

第14章:规则14——使AjaX可缓存

第15章:析构十大网站

页面大小、响应时间、YSlow等级

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/553673.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

腾讯视频怎么退出青少年守护模式

腾讯视频怎么退出青少年守护模式?具体请看下列操作指引。 1、打开腾讯视频—点击右上角“退出"。 腾讯视频怎么退出青少年守护模式 2、在输入框中输入密码。 腾讯视频怎么退出青少年守护模式 3、提示关闭成功。 腾讯视频怎么退出青少年守护模式 内容来源&#xff…

JavaScript 的 Date 方法的使用

今天项目要用到时间的函数&#xff0c;然后我就开始封装函数&#xff0c;所以就想写一个可以指定当前多久的时间。 function specifyDate(n){ nn||0; var datenew Date(); date.setDate(date.getDate()n); var ydate.getFullYear(), mdate.getMont…

IE浏览器怎么设置密码 IE浏览器设置密码图文教程

IE浏览器如何设置密码?IE浏览器是微软推出的一款网页浏览器&#xff0c;IE浏览器是电脑中比较重要的软件&#xff0c;在用浏览器浏览时&#xff0c;为了保证不暴露自己的隐私&#xff0c;IE浏览器可以设置密码&#xff0c;要怎么设置呢&#xff0c;下面就给大家分享具体步骤。…

js 图片预加载

下面代码是最简单的图片预加载。最主要的是两个img 事件 img.compete 和 img.onload 这两个方法。如果是第一次加载还是已经加载完毕从缓存中加载。 var imgLoad function (url, callback) { var img new Image(); img.src url; if (img.complete) { …

傲游浏览器如何显示收藏夹栏 傲游浏览器显示收藏夹栏的方法

傲游浏览器如何显示收藏夹栏?很多人使用的浏览器的时候&#xff0c;都会把自己喜欢的网站收藏起来&#xff0c;下次要浏览可以直接进入&#xff0c;要是傲游浏览器的收藏栏突然不见了&#xff0c;要怎么办呢&#xff0c;下面就给大家分享具体步骤。 方法1&#xff1a; 1、在…

正则基本知识和常用正则

预定义类和转义符 . [^\n\r] 除了换行和回车之外的任意字符 \d [0-9] 数字字符digit \D [^0-9] 非数字字符 \w [a-zA-Z0-9_] 单词字符(所有的字母数字和_) word \W [^a-zA-Z0-9_] 非单词字符 \s [\f\r\n\t\v] 不可见字…

火狐浏览器怎么关闭自动更新 火狐浏览器关闭自动更新的方法

火狐浏览器怎么关闭自动更新?很多用户觉得更新完新版本&#xff0c;用起来很不习惯。要怎么才能不自动更新呢&#xff0c;下面就给大家分享具体步骤。 首先我们要做的当然是打开你的火狐浏览器了&#xff0c;如果菜单栏在的话&#xff0c;点击工具选项。 火狐浏览器怎么关闭…

如何屏蔽搜狗浏览器中的广告 搜狗浏览器拦截广告的教程

如何屏蔽搜狗浏览器中的广告?搜狗浏览器是一款比较好用的浏览器。但是我们会发现在用搜狗浏览器是时候&#xff0c;总是会有一些推送广告忽然弹出来&#xff0c;非常讨厌。想要将广告屏蔽&#xff0c;具体该怎么操作?下面就是搜狗浏览器拦截广告的教程&#xff0c;一起了解一…

win7c盘满了怎么彻底清理?教你win7彻底清理c盘的详细步骤

win7系统是一款非常值得尝试的系统。在对win7系统的不断使用过程中很多用户们都出现了磁盘满了的问题&#xff0c;win7c盘满了怎么彻底清理&#xff1f;今天小编为大家带来的就是win7彻底清理c盘的详细步骤一起来看看吧。 win7c盘满了怎么彻底清理&#xff1a; 1、可以看到C盘…

电子邮件代码规范

邮件里面的代码都是用table布局的。 电子邮件代码规范 1 > 代码的样式都要写在行内&#xff0c;不要写在<style></style>里面。因为有些邮件客户端是解析不了这些样式的。 2> 页面设计宽度建议650px。 3> 禁止使用定位和浮动样式。 4> 不要使用J…

windows7电脑备份系统教程

windows7电脑如何备份系统?win7系统目前还是比较多人在使用的操作系统&#xff0c;为了防止在以后使用系统的过程中遇到故障问题无法修复&#xff0c;很多人会选择备份win7系统。那么win7如何备份系统呢?下面小编教下大家windows7电脑备份系统的方法。 windows7电脑备份系统…

我的webpack配置文件

先把配置文件拷贝出来 var path require(path); var webpack require(webpack); var HtmlWebpackPlugin require(html-webpack-plugin); var ExtractTextPlugin require(extract-text-webpack-plugin); var TransferWebpackPlugin require(transfer-webpack-plugin); v…

win11的控制面板在哪?

近日微软发布了全新的win11系统&#xff0c;而且全部用户免费升级&#xff0c;在加上支持运行安卓App&#xff0c;就这亮点真的是无敌了&#xff0c;很多小伙伴期待着能早日更新&#xff0c;目前网上已经有测试版流出来了&#xff0c;大家在升级更新之后找不到控制面板在哪?下…

mac下终端命令行下添加mysql命令

我的mysql数据库是使用的MAMP集成的&#xff0c;在使用终端命令总是要去/Applications/MAMP/Library/bin/mysql(这是我的目录)去打开&#xff0c;很麻烦&#xff0c;所以想把它配置在Terminal的全局环境中。以下是步骤. 1> 打开终端 后输入 cd ~ 2> touch .basj_profi…

爱奇艺怎么上传视频

在爱奇艺使用过程中&#xff0c;不知道怎么上传视频。下面就由小编给大家介绍一下爱奇艺怎么上传视频的操作步骤吧。 爱奇艺官网下载_爱奇艺怎么上传视频 1、进入爱奇艺&#xff0c;点击加号。 爱奇艺官网下载_爱奇艺怎么上传视频 2、可以看到上传&#xff0c;点击进入。 …

js来读写cookie操作

因为之前公司的项目前后端是在一起的&#xff0c;因为要用vue来重构之前的项目。所以token签名要作为一个参数传递到后台。所以就遇到两个问题,1 token的保存和获取的问题。 2 token 判断。判断用户是否用token值。 首先先说一下 token的保存和获取问题。 保存到哪&#xff1…

腾讯视频怎么打开个人直播后台播放功能

腾讯视频是我们常用的软件&#xff0c;在我们使用的过程中&#xff0c;如果我们想打开个人直播后台播放功能&#xff0c;该如何进行设置呢?具体步骤如下。 腾讯视频怎么打开个人直播后台播放功能 1、首先我们在手机上打开腾讯视频&#xff0c;点击并进入。 腾讯视频怎么打开…

Vue.js中data,props和computed数据

在用Vue.js做开发的时候&#xff0c;一定知道 data, props和computed。用了这么久的Vue就总结一下这个三个东西&#xff0c;首先看看官网怎么定义他们&#xff0c;https://cn.vuejs.org/v2/api/#data 。 data 是Vue实例的数据对象。Vue将会将data 的属性转换为 getter/setter,…

优酷视频怎么提交意见反馈

在使用优酷视频中发现有一些问题&#xff0c;那么想要提交反馈上报&#xff0c;可是找不到&#xff0c;今天就让我把这个分享给需要的朋友。 优酷视频怎么提交意见反馈 1、进入优酷视频后选择“我的”栏 优酷视频怎么提交意见反馈 2、然后切换我的页面选择“意见反馈”选项…

[Vue warn]: Failed to mount component: template or render function not defined. (found in root insta

在开始一个新的项目的时候报了个错 [Vue warn]: Failed to mount component: template or render function not defined. (found in root instanew Vue({el: #app,router,template: <App/>,components: { App } })我的项目初始化的时候是上面那个样子 。改成下面的样子就…