优化网站性能 提高网站速度访问速度的14条实践

news/2024/5/20 10:08:36/文章来源:https://blog.csdn.net/aovenus/article/details/6536416

优化网站性能 提高网站速度访问速度的14条实践

http://hi.baidu.com/lxll2009/blog/item/9e040d50d6c3c5828d54304e.html

第一条、尽可能的减少 HTTP 的请求数Make Fewer HTTP Requests

http请求是要开销的,想办法减少请求数自然可以提高网页速度。常用的方法,合并cssjs(将一个页面中的cssjs文件分别合并)以及 Image mapscss sprites等。当然或许将cssjs文件拆分多个是因为css结构,共用等方面的考虑。阿里巴巴中文站当时的做法是开发时依然分开开发,然后在后台对jscss进行合并,这样对于浏览器来说依然是一个请求,但是开发时仍然能还原成多个,方便管理和重复引用。yahoo甚至建议将首页的cssjs 直接写在页面文件里面,而不是外部引用。因为首页的访问量太大了,这么做也可以减少两个请求数。而事实上国内的很多门户都是这么做的。

css sprites是指只用将页面上的背景图合并成一张,然后通过cssbackground-position属性定义不过的值来取他的背景。淘宝和阿里巴巴中文站目前都是这样做的。有兴趣的可以看下淘宝和阿里巴巴的背景图

http://www.csssprites.com/ 这是个工具网站,它可以自动将你上传的图片合并并给出对应的background-position坐标。并将结果以pnggif的格式输出。

第二条、使用CDN(内容分发网络): Use a Content Delivery Network

说实话,对于CDN这一块自己并不是很了解,简单地讲,通过在现有的Internet中增加一层新的网络架构,将网站的内容发布到最接近用户的 cache服务器内,通过DNS负载均衡的技术,判断用户来源就近访问cache服务器取得所需的内容,杭州的用户访问近杭州服务器上的内容,北京的访问近北京服务器上的内容。这样可以有效减少数据在网络上传输的时间,提高速度。更详细地内容大家可以参考百度百科上对于CDN的解释。Yahoo!把静态内容分布到CDN减少了用户影响时间20%或更多。

CDN技术示意图:


CDN
组网示意图:

第三条、 添加Expire/Cache-Control Add an Expires Header

现在越来越多的图片,脚本,cssflash被嵌入到页面中,当我们访问他们的时候势必会做许多次的http请求。其实我们可以通过设置Expires header 来缓存这些文件。Expire其实就是通过header报文来指定特定类型的文件在浏览器中的缓存时间。大多数的图片,flash在发布后都是不需要经常修改的,做了缓存以后这样浏览器以后就不需要再从服务器下载这些文件而是直接从缓存中读取,这样再次访问页面的速度会大大加快。一个典型的HTTP 1.1协议返回的头信息:
HTTP/1.1 200 OK
Date: Fri, 30 Oct 1998 13:19:41 GMT
Server: Apache/1.3.3 (Unix)
Cache-Control: max-age=3600, must-revalidate
Expires: Fri, 30 Oct 1998 14:19:41 GMT
Last-Modified: Mon, 29 Jun 1998 02:28:12 GMT
ETag: “3e86-410-3596fbbc”
Content-Length: 1040
Content-Type: text/html

其中通过服务器端脚本设置Cache-ControlExpires可以完成。

如,在php中设置30天后过期:

<!--pHeader("Cache-Control: must-revalidate");
$offset = 60 * 60 * 24 * 30;
$
ExpStr = "Expires: " . gmdate("D, d M Y H:i:s", time() + $offset) . " GMT";
Header($ExpStr);-->

也可以通过配置服务器本身完成,这些偶就不是很清楚了,呵呵。想了解跟多的朋友可以参考http://www.web-caching.com/

据我了解,目前阿里巴巴中文站的Expires过期时间是30天。不过期间也有过问题,特别是对于脚本过期时间的设置还是应该仔细考虑下,不然相应的脚本功能更新后客户端可能要过很长一段时间才能感知到这样的变化。以前做[suggest项目] 的时候就遇到过这个问题。所以,哪些应该缓存,哪些不该缓存还是应该仔细斟酌一番。

第四条、启用Gzip压缩:Gzip Components

Gzip的思想就是把文件先在服务器端进行压缩,然后再传输。这样可以显著减少文件传输的大小。传输完毕后浏览器会重新对压缩过的内容进行解压缩,并执行。目前的浏览器都能良好地支持 gzip。不仅浏览器可以识别,而且各大爬虫也同样可以识别,各位seoer可以放下心了。而且gzip的压缩比例非常大,一般压缩率为85%,就是说服务器端100K的页面可以压缩到25K左右再发送到客户端。具体的Gzip压缩原理大家可以参考csdn上的《gzip压缩算法》 这篇文章。雅虎特别强调, 所有的文本内容都应该被gzip压缩: html (php), js, css, xml, txt… 这一点我们网站做得不错,是一个A。以前我们的首页也并不是A,因为首页上还有很多广告代码投放的js,这些广告代码拥有者的网站的js没有经过gzip压缩,也会拖累我们网站。

以上三点大多属于服务器端的内容,本人也是粗浅地了解而已。说得不对的地方有待各位指正。

第五条、将css放在页面最上面 Put Stylesheets at the Top

css放在页面最上面,这是为什么?因为 iefirefox等浏览器在css全部传输完全之前不会去渲染任何的东西。理由诚如小马哥说得那样很简单。css,全称Cascading Style Sheets (层叠样式表单)。层叠即意味这后面的css可以覆盖前面的css,级别高的css可以覆盖级别低的css。在[css之!important] 这篇文章的最下面曾简单地提到过这层级关系,这里我们只需要知道css可以被覆盖的。既然前面的可以被覆盖,浏览器在他完全加载完毕之后再去渲染无疑也是合情合理的很多浏览器下,如IE,把样式表放在页面的底部的问题在于它禁止了网页内容的顺序显示。浏览器阻止显示以免重画页面元素,那用户只能看到空白页了。Firefox不会阻止显示,但这意味着当样式表下载后,有些页面元素可能需要重画,这导致闪烁问题。所以我们应该尽快让css加载完毕

顺着这层意思,如果我们再细究的话,其实还有可以优化的地方。比如本站上面包含的两个css文件,<link rel=“stylesheet” rev=“stylesheet” href=“http://www.space007.com/themes/google/style/google.css” type=“text/css” media=“screen” /> <link rel=“stylesheet” rev=“stylesheet” href=“http://www.space007.com/css/print.css” type=“text/css” media=“print” />。从media就可以看出第一个css是针对浏览器的,第二个css文件是针对打印样式的。从用户的行为习惯上来将,要打印页面的动作一定是发生在页面显示出来之后的。所以比较好的方法应该是在页面加载完毕之后再动态地为这张页面加上针对打印设备的css,这样又可以提高一点速度。(哈哈)

第六条、将script放在页面最下面 Put Scripts at the Bottom

将脚本放在页面最下面的目的有那么两点: 1、因为防止script脚本的执行阻塞页面的下载。在页面loading的过程中,当浏览器读到js执行语句的时候一定会把它全部解释完毕后再会接下来读下面的内容。不信你可以写一个js死循环看看页面下面的东西还会不会出来。(setTimeout setInterval的执行有点类似于多线程,在相应的响应时间之前也会继续下面的内容渲染。)浏览器这么做的逻辑是因为js随时可能执行 location.href或是其他可能完全中断此页面过程的函数,即如此,当然得等他执行完毕之后再加载咯。所以放在页面最后,可以有效减少页面可视元素的加载时间。        2、脚本引起的第二个问题是它阻塞并行下载数量。HTTP/1.1规范建议浏览器每个主机的并行下载数不超过2个(IE只能为2个,其他浏览器如ff等都是默认设置为2个,不过新出的ie8可以达6个)。因此如果您把图像文件分布到多台机器的话,您可以达到超过2个的并行下载。但是当脚本文件下载时,浏览器不会启动其他的并行下载。

当然对各个网站来说,把脚本都放到页面底部加载的可行性还是值得商榷的。就比如阿里巴巴中文站的页面。很多地方有内联的js,页面的显示严重依赖于此,我承认这和无侵入脚本的理念相差甚远,但是很多历史遗留问题却不是那么容易解决的。

第七条、避免在CSS中使用Expressions Avoid CSS Expressions

不过这样就多了两层无意义的嵌套,肯定不好。还需要一个更好的办法。

第八条、把javascriptcss都放到外部文件中 Make JavaScript and CSS External

这点我想还是很容易理解的。不仅从性能优化上会这么做,用代码易于维护的角度看也应该这么做。把cssjs写在页面内容可以减少2次请求,但也增大了页面的大小。如果已经对cssjs做了缓存,那也就没有2次多余的http请求了。当然,我在前面中也说过,有些特殊的页面开发人员还是会选择内联的cssjs文件。

第九条、减少DNS查询 (Reduce DNS Lookups)

Internet上域名与IP地址之间是一一对应的,域名(kuqin.com)很好记,但计算机不认识,计算机之间的相认还要转成ip地址。在网络上每台计算机都对应有一个独立的ip地址。在域名和ip地址之间的转换工作称为域名解析,也称DNS查询。一次DNS的解析过程会消耗20-120毫秒的时间,dns查询结束之前,浏览器不会下载该域名下的任何东西。所以减少dns查询的时间可以加快页面的加载速度。yahoo的建议一个页面所包含的域名数尽量控制在2-4个。这就需要对页面整体有一个很好的规划。目前我们这点做的不好,很多大点的广告投放系统拖累了我们。

第十条、压缩 JavaScript CSS (Minify JavaScript )

压缩jscss的作用很显然,减少页面字节数。容量小页面加载速度自然也就快。而且压缩除了减少体积以外还可以起到一定的保护作用。这点我们做得不错。常用的压缩工具有JsMinYUI compressor等。另外像http://dean.edwards.name/packer/还给我们提供了一个非常方便的在线压缩工具。你可以在jQuery的网页看到压缩过的js文件和没有压缩过的js文件的容量差别:

当然,压缩带来的一个弊端就是代码的可读性没了。相信很多做前端的朋友都遇到过这个问题:看Google的效果很酷,可是去看他的源代码却是一大堆挤在一起的字符,连函数名都是替换过的,汗死!自己的代码也这样岂不是对维护非常不方便。所有阿里巴巴中文站目前采用的做法是在jscss发布的时候在服务器端进行压缩。这样在我们很方便地维护自己的代码。

第十一条、避免重定向 (Avoid Redirects )

不久前在ieblog上看到过《Internet Explorer and Connection Limits》这篇文章,比如 当你输入http://www.kuqin.com/ 的时候服务器会自动产生一个301服务器转向 http://www.kuqin.com/ ,你看浏览器的地址栏就能看出来。这种重定向自然也是需要消耗时间的。当然这只是一个例子,发生重定向的原因还有很多,但是不变的是每增加一次重定向就会增加一次web请求,所以因该尽量减少。

第十二条、移除重复的脚本 (Remove Duplicate Scripts )

这点我想不说也知道,不仅是从性能上考虑,代码规范上看也是这样。但是不得不承认,很多时候我们会因为图一时之快而加上一些或许是重复的代码。或许一个统一的css框架和js框架可以比较好的解决我们的问题。小猪的观点很对,不仅是要做到不重复,更是要做到可重用。

第十三条、配置实体标签(ETags(Configure ETags )

这点我也不懂,呵呵。在inforQ上找到一篇解释得比较详细的说明《使用ETags减少Web应用带宽和负载》,有兴趣的同学可以去看看。

第十四条、使 AJAX 缓存 (Make Ajax Cacheable )

ajax还要去缓存?做ajax请求的时候往往还要增加一个时间戳去避免他缓存。It’s important to remember that “asynchronous” does not imply “instantaneous”.(记住异步不是瞬间这一点很重要)。记住,即使AJAX是动态产生的而且只对一个用户起作用,他们依然可以被缓存。

 

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

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

相关文章

PHP虚拟主机放置多个站点,三种方法实现一个虚拟主机【网站空间】放多个网站...

有些朋友为了省钱需要在一个云虚拟主机上安装多个网站&#xff0c;所以在空间上绑定了好几个域名&#xff0c;但是访问到的却是相同的内容&#xff0c;怎么样让不同的域名访问不同的内容呢&#xff1f;[虚拟主机本身支持子目录绑定域名的不在讨论之列]方法一&#xff1a;(这种方…

Silverlight应用的SEO优化

译文&#xff0c;来源&#xff1a;http://blogs.msdn.com/waldred/archive/2009/03/23/Search-Engine-Optimization-for-Silverlight-Applications.aspx 点击下载源码 简介 对于你来说创建下一代的富应用&#xff0c;使用有无数的理由。但是有一个缺点就是使用呈现的内容无法被…

Asp.Net 网站优化 数据库优化措施 使用主从库(上)

网站规模到了一定程度之后&#xff0c;该分的也分了&#xff0c;该优化的也做了优化&#xff0c;但是还是不能满足业务上对性能的要求&#xff1b;这时候我们可以考虑使用主从库。 主从库是两台服务器上的两个数据库&#xff0c;主库以最快的速度做增删改操作最新数据的查询操作…

10款精选的用于构建良好易用性网站的jQuery插件

这篇随笔收集了10款非常给力的jquery 插件&#xff0c;帮助你构建易用性良好的网站&#xff0c;希望对你有用&#xff01; Embedded help system 看过该插件demo后&#xff0c;感叹道&#xff0c;真是太棒了&#xff01; 点demo里的How to下面的几个链接看看效果:) Embedded …

网站导航颜色停留_专业的网站设计的技巧有哪些?

当我们打开网站时给我们印象最深刻的就是网站的页面设计&#xff0c;有的网站设计的十分大气&#xff0c;有的网页设计的眼花缭乱的&#xff0c;一样都是网页&#xff0c;但给用户带来视觉体验效果是完全不一样的&#xff0c;一个具备新意的网站设计可以带来与众不同的感觉&…

简单的物流管理网站制作源码_物流网站制作需要注意些什么?

现在的物流公司越来越多&#xff0c;而物流公司的网站制作也使得很多物流公司找到了很好的合作伙伴&#xff0c;并且还特别快速的捕捉到了商机&#xff0c;捷路科技网站建设服务商认为物流网站的制作成为物流公司便捷交易的一种手段&#xff0c;更是物流公司发展的必备&#xf…

分享道,可以包含分享几乎所有的网站的按钮

2019独角兽企业重金招聘Python工程师标准>>> 分享道&#xff0c;可以包含分享几乎所有的网站的按钮 这里记录一下&#xff0c;网址为http://www.shareto.com.cn/getcode.html 转载于:https://my.oschina.net/zhangdapeng89/blog/38062

网站分析度量

网站分析度量 今天的话题回到度量&#xff0c;因为度量是网站分析的骨骼&#xff0c;所谓皮之不存毛将焉附&#xff0c;没有度量&#xff0c;网站分析就成为不了一门科学。度量也是最多朋友们问起的问题&#xff0c;例如下面这个问题&#xff1a; 宋星老师&#xff1a; 有个困惑…

大型网站用户定位技术(智能 DNS 和 IP 重定向)

其实这个文章叫大型网站用户定位技术&#xff0c;其实今天要讲的不是智能 DNS &#xff0c;今天是要讲的智能 DNS 的问题&#xff0c;和一些网站对这个的处理,下面要讲的这个技术主要是针对比较大的文件&#xff0c;比如下载和视频之类。为什么要讲这个&#xff0c;主要是我的群…

25个互动看起来如Flash的HTML网站

还记得那些很酷的互动媒体闪光灯内置丰富的网站&#xff1f;他们往往会采用全屏布局&#xff0c;动画元素。不幸的是flash带来的各种问题无法获得较高的处理器负载&#xff0c;今天就给大家推荐由HTML5&#xff0c;CSS3和Javascript库创作的html网站&#xff0c;效果跟flash一样…

winform怎么向网站发送json_Python除了做爬虫抓数据还能做什么?其实还能监视和衡量网站性能...

借助这份对初学者友好的指南&#xff0c;您可以构建自己的自定义Python脚本来自动测量网站的关键速度和性能指标。在过去的一个月中&#xff0c;Google宣布了许多通过关键速度和性能指标来衡量用户体验的方法。巧合的是&#xff0c;我一直在努力编写一个Python脚本&#xff0c;…

网站互点工具_如何利用关键词互点互刷提升网站关键词排名?

最近老是点击一个网站进去看&#xff0c;几天后发现关键词排名提高了&#xff0c;就在想是不是通过点击网站可以提高关键词排名了&#xff1f;网上不是有好多朋友都在寻求关键词互点&#xff0c;而且要求点击某篇文章&#xff0c;并且要在页面停留多少分钟&#xff0c;说这样才…

AAuto编程语言官方站 网站服务条款

2019独角兽企业重金招聘Python工程师标准>>> AAuto编程语言官方站 网站服务条款 如果您已经清楚快手( AAuto Quicker) 是一个永久免费的的开发工具&#xff0c;无任何营利目标&#xff0c;本站没有积分充值&#xff0c;不开放VIP服务&#xff0c;网站与软件不会投放…

在线音乐网站【01】需求和功能结构

前段时间根据课程安排&#xff0c;实现了一个ASP.NET在线音乐网站&#xff0c;最近时间不紧&#xff0c;打算对前段时间的小项目进行记录和总结。 1.回顾项目进行的整个流程; 2.加深对所用技术和工具的理解; 3.反思项目过程中出现的问题和解决方法。 项目源码:https://git.osch…

针对博客园Blog的SEO(Search Engine Optimization – 搜索引擎优化)

注&#xff1a;本文转自http://www.cnblogs.com/dflying/archive/2006/05/20/Search_Engine_Optimization_for_Blogs_in_cnblogs.html 作者&#xff1a;Dflying Chen &#xff08;http://dflying.cnblogs.com/&#xff09; 随着Web 2.0概念的发展以及Web上内容的不断丰富&#…

google地图网页版_网站地图(Sitemap)的制作方法

Sitemap即网站地图。网站地图分成两种&#xff0c;一种是HTML地形&#xff0c;主要让普通用户应用&#xff0c;一种是XML地形&#xff0c;主要引导Spide抓取网站&#xff0c;许多SEO人员在制作网站优化过程中&#xff0c;假如发现目标网站沒有网站地图&#xff0c;通常全是写上…

wordpress acf字段 调用不同的样式_WP网站模板,怎样非插件统计文章浏览量?怎样调用热点文章?...

在wordpress网站模板的开发中&#xff0c;有时候&#xff0c;我们需要调用wordpress网站的热点文章&#xff0c;这里的热点文章不是我们在前面的章节中所介绍的那“热评文章”&#xff0c;这里的热点文章&#xff0c;是指按照文章的阅读量来进行排序的文章列表&#xff0c;有很…

浅析几种网站搜索框的制作

2019独角兽企业重金招聘Python工程师标准>>> 如果自己做的网站内容太多&#xff0c;主要是网站导航栏的内容增多&#xff0c;当用户想寻找一个自己需要的内容时&#xff0c;一个一个查找是一件很累的事情&#xff0c;如果在自己的网站上做一个搜索框&#xff0c;提供…

自己搭建免费网站----my english site

2019独角兽企业重金招聘Python工程师标准>>> 准备好信用卡&#xff0c;借记卡&#xff0c;只有几美元&#xff0c;折合人民币十几元&#xff0c;玩一玩当管理员的滋味 打开bluehost网站 登陆 bluehost 网站&#xff0c;通过sign up 进行注册 第一步&#xff1a;首…

JEECG社区 一个微信教育网站案例源码分享

2019独角兽企业重金招聘Python工程师标准>>> 微信教育网站案例演示&#xff1a; http://t.cn/RvPgLcb 源码分享&#xff1a; http://pan.baidu.com/s/1cUImy 截图演示&#xff1a; 转载于:https://my.oschina.net/201003674/blog/650188