最近一直在做随州房产在线的优化,目的显然是想加快网站的响应速度。本篇旨在分享我是怎么优化程序从而提升网站性能的。
关于为何要提高网站访问速度,大家先了解一个概念“页面价值”,这个是百度搜索研发部发布的,页面有价值必然就有质量之说,那么怎么判断一个页面的质量高低呢?文中提到一个很重要的一点:判断页面质量的高低,应该是从最基础的需求依次递进的。首先,不能是死链、网站要有一定的稳定性、访问速度要令人满意。 一个高质量页面特征,第一点就是访问速度要快。所以说网站打开速度快是多么的重要。那么影响网站打开速度的因素有哪些?我们又怎么去解决这些问题呢?下面我就和大家一一分析,谈谈我的看法。
一个网站,从程序结构角度来说分后端程序业务逻辑和前端页面展示两个大的部分。在以下段落中,我就以“程序”和“前端”来简称这两部分。先说说网站前端优化部分。
一个网站做好放到服务器上了,这时一个用户在浏览器中输入一个对应该网站的网址,比如,www.szfcol.com,服务器端IIS(或是apache)接受到这个http请求,会有一系列的响应步骤,这里就不一一解释了,最终成功返回状态码为200的网页内容到浏览器,浏览器根据css样式和js脚本控制最终渲染呈现给用户一个完整的网页效果。正常情况下就是我们期望用户看到的效果。知道了这个基本流程,我们再了解几个基本知识点:
第一:一般浏览器对一个域名同时http下载数为两次;
第二:HTTP状态码,200、304、500等等,了解更多状态;
第三:网页、图片大小影响加载速度,单位一般是kb。
也就说浏览器对HTTP同时加载数有限制,如果同一域名下有很多内容和资源文档需要下载的话,势必会造成阻塞,也就是过长的等待,如果网页、图片、js和css文档过大也会增加网页加载的时间,从而让用户感觉到网站打开很慢。特别是第一次打开某个网站的时候,这时候所有的资源文件都需要下载,第二次打开的话,会发现网页打开的速度快了很多,是因为资源文件的url和名称没有改变的话,就会直接在浏览器的缓存文件中找,这时文件的状态会是304(未修改),也就是有缓存了,所以速度变快了。我在做随州房产在线之前就考虑到这些问题,所以在前端架构上,基本上是采用优化的方法在做。具体有以下几点:
1、多域名同时加载,res加载js、img1、img2、3、4、5、6专门用来加载图片资源;
2、整站在发布的时候,所有的文本文件都是压缩过的,如页面多余的空格、注释、换行,对js文件还有一个混淆压缩,原本60kb文件压缩后就只有不到30kb,压缩比例很理想,当然了,这个跟压缩工具有关,另外js脚步最好书写要规范,特别是语句结束要加上分号“;”,要不然压缩过后可能会导致js效果报错;
3、写css的时候,尽量将多张小图合成一张大图,也叫css-spirit,好处很明显,原本需要请求几十次,现在只需要请求一次就可以了,大大减少了http请求数,提高网页整体渲染速度,提升网站访问速度;
4、网页顶部Doctype申明,可以去掉w3c规范,直接简写成<!DocType html>即可,因为那是一个协议,要去加载的,目前主流大型网站都是使用新申明了;
5、图片在不影响网页效果情况下,尽量压缩,大图片都占资源;
6、尽量把js脚本放到</body>结束前位置调用,因为脚本加载也是会阻塞网页渲染的,会让人感觉网站卡一下,多个css和js文件发布的时候如果能合并成一个css和js最佳或是把js按需加载;
以上6个前端优化方法基本是我目前知道的运用比较常见的,随州房产在线目前在第6点上做的还不够,发布的时候没有合并文件,有些js还是放在head里调用,以后也需要花些时间努力改过来。也欢迎大家前端优化方面多多指教。
先说了前端优化的一些东西,是因为这些方法都是比较通用的,也都是一些可以马上实践,比较容易操作。下面说说网站程序方面的优化,有哪些是我们可以做的呢?
后端程序做的最多的一件事,就是根据用户请求,去数据库(本文主要说的mssql)中拿数据,再返回到页面显示。所以很多时候,我们说服务器压力大或是网站程序性能不好,很多时候都是因为频繁的读写数据,特别是读大数据的时候,服务器开销会特别的大。如果,我们编写的t-sql语句没考虑优化,举个例子:我只要用户表中最新注册的100个用户名和邮箱,如果写一个查询语句把最新100个用户的所有字段都返回,如果用户表有80个字段,那么就返回了78*100=7800个无用数据给我,效率低又增加了开销。最新用户肯定是需要排序的,而我们在常用字段上创建聚焦索引,注意默认一张表只能有一个聚焦索引字段,而主键一般自带加上了聚焦索引。用聚焦索引字段做排序字段,速度明显快。所以程序优化基本有这么几种方法:
1、数据库T-SQL语句优化,提升原始查询速度,表结构优化,学会适当的字段冗余,如常见的主表数据冗余用户的ID和name;
2、减少读、写数据库次数,因为数据库最终还是I/0操作,具体方法就是使用缓存,各种缓存(Memcached内存缓存、html文件缓存、网页缓存、cdn);
3、优化程序代码,简化业务逻辑,这个需要具体问题具体分析,建议大家可以看下《代码大全2》,总的来说就是写每行代码都要考虑程序性能和可维护性,如果前期赶进度,使用简便做法,可以先标记下来“这里可以优化”,后期可以慢慢优化,像随州房产在线的搜索,都是可以优化的,后期我肯定会加上lucene;
4、做好必要的表单数据验证和过滤,防止大量重复的post或get请求,当然如果别人是直接一波大流量打过来,那也无能无力了。
我理解的性能优化主要还是围绕数据库来的,就是能不读数据库最好,非要读的话尽量少读,用点内存换性能,很值得。至于如何运用各种缓存,限于篇幅这里就不做详细讨论。举个房产在线的例子,楼盘数据不是常变的,那么我就可以把楼盘常用数据直接缓存在内存中一周。代码优化的话,就是一个理论理解加细心的活了,业务逻辑可以优化的空间就非常大了,因为大多数会写代码的人不一定很懂这个行业。只要深入理解这个行业就发现很多可以优化的。
如果以上这些我们都做了,还有两点可以提升网站打开的速度的,第一个就是服务器硬件升级或机房宽度加大,第二个就是花钱上CDN吧,虽然费钱但是真的很管用。当然了,随州房产在线肯定是用不上cdn了。限于本人能力和文笔有限,有些观点不正确欢迎大家批评指正。
我叫乔磊,欢迎大家加Q:236837802交流。