怎样提高网站访问速度缩短网页加载时间

本文主要参照http://developer.yahoo.com/performance/rules.html,结合多年网站开发经验总结而来。

1、减少页面HTTP请求数量

比较直接的理解就是要减少调用其他页面、文件的数量。

A.我们在使用css格式控制的时候,经常会采用background载入很多图形文件,每个background的图像至少产生1次HTTP请求,一般我们为了让页面生动活泼会大量使用background来加载背景图,要改善这个状况,可以采用css的1个有用的background-position属性来加载背景图,我们将需要频繁加载的多个图片合成为1个单独的图片,需要加载时,采用以下形式加载即可将这部分图片加载的HTTP请求缩减为1个。

background:url(....) no-repeat x-offset y-offset;

B.采用Image maps,这个方法也比较常用,只是限于同1个区域使用。

C.Inline images,这个方法很少见到,但对于很小很简单的图像却是很实用的,相关语法标准参照:http://tools.ietf.org/html/rfc2397。例如这个图像,就是由如下代码产生:

<img src="data:image/gif;base64,R0lGODdhMAAwAPAAAAAAAP///ywAAAAAMAAw
AAAC8IyPqcvt3wCcDkiLc7C0qwyGHhSWpjQu5yqmCYsapyuvUUlvONmOZtfzgFz
ByTB10QgxOR0TqBQejhRNzOfkVJ+5YiUqrXF5Y5lKh/DeuNcP5yLWGsEbtLiOSp
a/TPg7JpJHxyendzWTBfX0cxOnKPjgBzi4diinWGdkF8kjdfnycQZXZeYGejmJl
ZeGl9i2icVqaNVailT6F5iJ90m6mvuTS4OK05M0vDk0Q4XUtwvKOzrcd3iq9uis
F81M1OIcR7lEewwcLp7tuNNkM3uNna3F2JQFo97Vriy/Xl4/f1cf5VWzXyym7PH
hhx4dbgYKAAA7" alt="圣骑天下" />

2、使用CDN(Content Delivery Network)网络加速

现在国内做CDN加速业务的公司很多,简单讲,就是将你的图片、视频扩散到CDN网络所能到达之处,让用户访问时能就近下载到这些文件,从而达到网络提速的目的,这样做,同时能减轻你自己网站的负载。

3、添加文件过期或缓存头

对于同一用户频繁访问的图片、Js脚本文件等可以在Apache或Nginx设置其缓冲时间,例如设置24小时过期时间,这样用户在访问过该页面之后再次访问时,同一组图片或JS不会再重复下载,从而减少了HTTP请求,用户访问速度明显有所提升,同时服务器负载也会下降。下面给出nginx配置中缓存控制的例子:

location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$
{
	expires      30d;#设置30天过期
}

location ~ .*\.(js|css)?$
{
	expires      1h;#设置1小时过期
}

4、服务器开启gzip压缩

这个大家都比较了解,即将需要传输的内容压缩后传输到客户端再解压,这样在网络上传输的数据量会大幅减小。通常在服务器上的Apache、Nginx可以直接开启这个设置,也可以从代码角度直接设置传输文件头,增加gzip的设置,也可以从负载均衡设备直接设置。不过需要留意的是,这个设置会略微增加服务器的负担。

5、css格式定义放置在文件头部

这项设置对于用户端是慢速网络或网页内容比较庞大的情况比较有利,可以在网页逐步呈现的同时仍会保持格式信息,不影响网页美感。

6、Javascript脚本放在文件末尾

很多Javascript脚本执行效率低下,或者有的第3方域名脚本出现意外无法载入,如果将这些脚本放置到页面比较靠前的位置,可能会导致我们自己网站的内容载入速度下降甚至无法正常加载,所以一般将这些脚本放置在网页文件末尾,一定要放置在前面的脚本要改用所谓的“后载入”方式加载,在主体网页加载完成后再加载,防止其影响到主体网页的加载速度。

7、避免使用CSS脚本(CSS Expressions)

有时为了要css的参数动态改变,可能会采用css expression来实现,但这样做得不偿失,会使用户端浏览器负担明显加重,所以不建议这样做,如果需要改变,可以使用Javascript脚本去实现。

8、css、javascript改由外部调用

如果css、js内容比较庞大,尽量不要写到同1个页面中去,改由外部载入比较妥当,因为浏览器本身会对css、js文件进行缓存。

9、压缩Javascript、CSS代码

一般js、css文件中存在大量的空格、换行、注释,这些利于阅读,如果能够压缩掉,将会很有利于网络传输。这方面的工具也有很多,一般可以保留开发版本,利用工具生成生产版本,2个文件比较,一般压缩率能达到50%以上,减少的数据量还是比较可观的。

我这个博客刚改版完成,各种代码还没有进行优化和压缩,目前yslow评级只能达到D,等有时间进行部分优化,达到C等级应该问题不大。

10、避免采用301、302转向

11、养成良好的开发维护习惯,尽量避免脚本重复调用

12、配置ETags

13、Ajax采用缓存调用

这个的使用可以参照Discuz论坛代码,里面对于大量使用的Ajax调用都采用了缓存调用方式,一般采用附加特征参数方式实现,注意其中的<script src=”xxx.js?{VERHASH}”,{VERHASH}就是特征参数,这个参数不变化就使用缓存文件,如果发生变化则重新下载新文件或更新信息。

14、合理使用Flush

用户端发送浏览请求后,服务器端一般要花销200-500ms去处理这些请求,在此期间,用户端浏览器处于等待状态,如果要减少用户等待时间,可以在适当的位置使用flush,将已经就绪的内容推送到用户端,这在php中很容易实现例如

 ... <!-- css, js -->
    </head>
    <?php flush();?>
    <body>
 ... <!-- content -->

15、Ajax调用尽量采用GET方法调用

实际使用XMLHttpRequest时,如果使用POST方法实现,会发生2次HTTP请求,而使用GET方法只会发生1次HTTP请求。如果改用GET方法,HTTP请求减少50%!

16、尽可能减少DCOM元素

这个很好理解,就是尽可能减少网页中各种<>元素数量,例如<table>的冗余很严重,而我们完全可以用<div>取代之。

17、使用多域名负载网页内的多个文件、图片

记得有资料说明,IE在网页载入过程中,在同1时刻,对同1域名并行加的HTTP请求数量最高为2个,如果网页需要加载的文件数量超过2个(通常远远超过..),要加快网页访问速度,最好将文件分布到多个域名,例如19楼,其js文件采用独立的域名,据说百度的图片服务器数量在20台以上。

18、缩减iframe的使用,如无必要,尽量不要使用

iframe通常用于不同域名内容的加载,这同时也可能因iframe内容加载速度影响到主网页加载速度,如果可能,把需要加载的内容抓取到本地直接嵌入。如果实在需要iframe加载,采用后载入方式实现。

19、优化图片文件

优化图片文件,减小其尺寸,特别是缩略图,一定要按尺寸生成缩略图然后调用,不要在网页中用resize方法实现,虽然这样看到的图片外形笑了,但是其加载的数据量一点也没减少。曾经见过有人在网页中加载的缩略图,其真实尺寸有10M之巨…

普通图像、icon也要尽可能压缩后,可以采用web图像保存、减少颜色数等等方法实现。

20、当页面内容庞大到一定程度,可以采用分页的方式展现,或者taobao的那种翻页后载入方式

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏北京马哥教育

18个网站优化技巧

18个网站优化技巧 快速的页面加载对提升搜索引擎排名、网站转化率和整体的用户体验是非常重要的。网站页面的加载速度也是衡量网站性能的一个重要因素。 ?   ...

49780
来自专栏Java3y

纳税服务系统总结

纳税服务系统总结 纳税服务系统是我第一个做得比较大的项目(不同于javaWeb小项目),该项目系统来源于传智Java32期,十天的视频课程(想要视频的同学关注我...

31590
来自专栏腾讯NEXT学位

React 16 加载性能优化指南(上)

公司的新项目迁移到了 React 16 和 Webpack 4.0,写一篇文章来总结一下。

74050
来自专栏用户2442861的专栏

Python安装模块出错解决的办法(pip相关的安装)

然后在cmd进入命令行窗口, 进入ez_setup.py目录,我这里是下载放置在F盘,然后输入命令:python ez_setup.py 系统就会自动下载se...

64030
来自专栏IT笔记

前后端分离之Vue项目构建测试打包发布

写在开始 其实之前对前后端分离研究过一段时间,中间由于项目进度耽搁也就不了了之了,最近项目中部分使用到了Vue,恰逢前端小伙伴们居然说要使用这个东西,也许是前端...

39590
来自专栏我的博客

PHP采集原理

很多时间我们的信息都是来自其他网站,这样我们复制,粘贴,发布很麻烦,当然你不可以把他们的信息批量复制过来,这个时候就需要采集了~~ 采集就是使用file_get...

37520
来自专栏区块链

XSS攻击——每周小讲堂

我们从一个很蠢的例子开始。 假设网站上有一个很简单的输入框,如果输入123并提交,就会保存并显示在url上。 比如现在填一段JS代码字符串并提交,就会得到一个包...

21560
来自专栏码代码的陈同学

Rancher某环境所有主机网络瘫痪问题

本文记录Rancher整个环境因一台主机网络问题导致环境中所有主机网络瘫痪,无法跨主机通讯问题。

40130
来自专栏企鹅号快讯

一个简单的node爬虫踩坑之路

一个简单的node爬虫踩坑之路准备工作 最近在看爬虫相关的文章,偶然想起来尝试一下用node来实现一个简单的爬虫。但是爬别的多没意思,当然是爬美女图片啊。。。 ...

23590
来自专栏武军超python专栏

2018年8月9号飞机大战项目答辩得到的经验和基本的win终端命令

今天遇到的新单词: adapter n适配器 virtual adj 虚拟的 interface n接口 corporation n公司,法人

12930

扫码关注云+社区

领取腾讯云代金券