Fork me on GitHub

简单网站优化

一、为什么要网站优化

1.1、大型网站的特点

  • 高访问量
  • 同时在线人数多
  • 数据量庞大
  • 数据操作频繁

1.2、网站性能测试指标(用户角度)

  • 日访问量
  • 同时在线人数
  • 最大并发连接数
  • 访问响应时间

1.3、网站性能个体体现

  • 首屏时间:一个网站被浏览器上部,800*600区域充满所需要的时间
  • 网页访问可用性:用户访问网页的成功率。
  • DNS时间:浏览器将地址发送给DNS服务器,DNS服务器根据地址返回IP到浏览器,浏览器得到IP地址,此为DNS时间
  • 建立连接时间:包含DNS时间后,浏览器重到IP地址后,再将客户投诉请求发送至WEB服务器,然后建立连接,这时建立连接时间结束
  • 重定向时间:网页间跳转时间,如检查是否是会员,不是就跳转登录
  • 第一个数据包时间:浏览器发送HTTP请求结束开始,到接收到WEB服务器返回的第一个数据包的消耗时间
  • 总下载时间:页面所内容下载所用的时间,网页的总耗时
  • 错误情况:网站的错误情况代表网站的运维质量。

1.4、客户投诉问题

  • 网速慢
  • 个别页面打开时间过久,或者打不开

二、使用YSlow插件分析网站性能

YSlow插件,是yahoo是运行在FireFox浏览器上面的,同时要有FireBug才可以运行

三、网页内容优化

3.1、减少HTTP请求

  • 合并文件(js或者css文件)
  • css Sprites图片拼合(常 用)
  • 图片地图

3.2、减少DNS查找次数

  • 减少主机名的数量可以减少DNS查找次数,
  • 减少DNS查找次数可以节省响应时间
  • 减少主机名会减少页面当时并行下载的数量,但是这样又会增加响应时间
  • 原则:将这些页面中的内容分割成至少2部分,但不超过4部分。结果:减少DNS查找次数与保持并行下载兼顾

3.3、避免跳转

301代码、302代码。默认不缓存,须增加Expires或者Cache-Control来指定缓存

开时时注意不要忽略URL本该有的斜杠(/);

3.4、可缓存的AJAX

设置在客户端缓存

3.5、减少DOM元素数量

DOM元素过多,会使遍历DOM的效率慢。

不用移除内容,而是替换,精简元素标签

减少DIV元素的嵌套

3.6、尽量避免使用iframe

优点:

  • 解决加载缓慢的第三方内容
  • 只需要修改一个iframe内容,便可以改变所有应用该iframe页面

缺点:

  • 即使内容为空,加载也需要时间
  •  阻止页面加载
  • 没有语意

3.7、避免404错误

错误的加载会破坏并行加载

浏览器会把试图在返回的404响应内容中找到可能有用的部分当作javascript代码来执行

四、图片优化

4.1、使用工具优化图片

检查你的GIF图片当中图像颜色的数量是否和调色板规格一致,如只使用到了4种颜色,而调色板中有256中规格,说明还有优化的空间

尝试把GIF格式转换成PNG格式,看看是否有节省空间

在所有有PNG图片上运行pngcruch或者其它的PNG优化工具

在所有JPEG图片上运行jpegtran,可以对图片中出现的锯齿等无损进行操作,同时它还可以优化和清除图当中的注释以及其它的无用信息

最后,把所有的图片纺一的jpg或者是gif或者png格式,行适当的转,可以达到很好优化效果,

尽量避免使用bmp格式,对用户上传的格式进行一个格式转换可以达到很好的压缩效果

Jpegtran

JPEG的压缩工具有jpegtran和jpegoptim,这两款工具的压缩效果几乎没有区别,在这里我们推荐使用jpegtran,相比后者,jpegtran可以进行progressive编码,使图片渐进式的展现,先显示模糊的图片,再逐步清晰。

推荐命令行参数:

jpegtran –copy none –optimize -progressive -outfile out.jpg in.jpg

想知道这些参数的具体作用,可使用命令“jpegtran –h”了解,

4.2、使用合理的图片尺寸

不要使用一个比实际需要大得多的图片,不要在网页中缩放图片

4.3、favicon.ico要小而且要可缓存

favicon.ico位为网店的根目录

favicon.ico文件不要缺少,而文件要尽量小,可以缓存

4.4、使用css Sprites优化页面小图片

CSS Sprites技术中,水平排列图片会比垂直排列效果更好

颜色相近的图片组合在一起,可以降低颜色数

合理的应用CSS Sprites技术,不要在Spirite的图像中间留有较大空隙

五、优化CSS和JavaScript

5.1、把样式表置于顶部

开发阶段将样式和代码分离,开发完毕后再将样式放在页面的<head>头部中

5.2、使用<link>代替@import

<link type="text/css"" rel="stylesheet" href="style.css" />

用<link>代替@import来实现外部样式表的导入

5.3、避免使用滤镜

避免使用滤镜,使用PNG格式的图片来代替,主流浏览器一般都支持这种格式,必要时使用CSS Hack来处理IE6浏览器下的效果

5.4、精简CSS和JavaScript

精简工具:

JSMin:javascript

YUI Compressor: javascript也可以用来精简CSS

<script>和<style>代码块也可以并且应该进行消减

精简代码,采用缩写

5.5、把JavaScript放在HTML的底部

把脚本放在HTML页面底部

(document.write()输出语句例外)

六、优化Cookie

6.1、缩小Cookies大小

  • 去除不必要的Cookie
  • 设置合理的过期时间

6.2、避免使用全局域名的Cookie

应该以图片等页面元素使用没有Cookie的域名

七、服务器端优化

7.1、使用内容分发网络

Content Delivery Network简称为CDN

使用CDN(内容分发网络),但成本高

7.2、为文件头指定Expires或者Cache-Control

静态内容设置:Expires的值为"Never expire"(永不过期)

动态内容设置:Cache-Control设置合适的值如"no-cache"

Expires文件头经常用于图像文件,但是应该在所有的内容当中使用,包括脚本、样式表和Flash等

7.3、使用Gzip压缩文件内容

开启应用服务器端的Gzip压缩设置

在Tomcat中启用Gzip压缩:

修改%TOMCAT_HOME%/conf/server.xml,修订节点如下:

<Connector port="8080" protocol="HTTP/1.1"
                    connectionTimeout="20000"
                    redirectPort="8443"
                    compression="on"
                    compressionMinSize="2048"
                    noCompressionUserAgents="gozilla,traviata"
                   <!--下面可以设置要压缩的类型有哪些--> compressableMimeType="text/html,text/xml,text/javascript,application/x-javascript,application/javascript,text/css,text/plain"/>
从上面节点的属性可以看出,要使用gzip压缩功能,你需要在Connector节点中加上如下属性

compression="on" 打开压缩功能 
compressionMinSize="50" 启用压缩的输出内容大小,默认为2KB 
noCompressionUserAgents="gozilla, traviata" 对于以下的浏览器,不启用压缩 
compressableMimeType="text/html,text/xml,text/javascript,text/css,text/plain" 哪些资源类型需要压缩

7.4、使用GET来完成AJAX请求

  • POST:先发送文件头,然后才发送数据
  • GET:一个TCP包

获取数据时建议使用GET,相反,发送并在服务端保存数据时才使用POST

IE中URL最大长度为2K,如果获取的数据大于2K,就不能使用GET,

八、开发角度看优化

动态页面的弊端:

  • 服务器压力大
  • 页面响应时间长
  • 安全问题

实施静态化的原因:

  • 提高访问速度
  • 减轻服务器压力
  • 加强安全性
  • 利于搜索引擎收录

九、如何静态化网站

目前绝大多数网站都是采用:模板技术 来对网站静态化

9.1、网站静态化的好处

效率方面:

  • 纯静态化HTML页面:以HTM/HTML结尾,效率最高,消耗最小,速度最快
  • 减轻服务器的压力:相比动态页面要执行脚本,数据库操作,静态页面只需要将相应的静态页面返回给客户端
  • 利于搜索引擎收录:动态页面的生成是采用数据库内容,所以网页内容主题的永恒性并不能保证,这样就造成了搜索引擎的阅读困难,也就是搜索引擎抓不住一个永恒的主题,因此不能输入到搜索引擎的缓存当中。别外,动态连接,存在一个信任问题,用记以及搜索引擎无法确定这个页面会一直存在。搜索引擎对于静态链接就更加友好,所以把动太网址进行URL重写使其静态化,是一个非常重要的优化技巧
  • 提高服务器的性能:动态页面要经常读取数据库,而静态页面只需要将相应的静态页面返回给客户端

安全方面:

  • 防SQL注入:静态页面根本就不存在数据库操作,杜绝了SQL注入的可能性
  • 网站出错时,不影响网站正常访问。动态页面:如果发生错误或者是数据库出现了问题,那么从数据库读取数据的页面就必然无法正常的访问了。而静态页面只会在生成静态页面时调用数据库操作,生成之后就不会对数据库进行任何操作了,因此妈便是数据库崩溃了,用户仍然可以访问到已经存在的静态页面

9.2、静态化实现方式-模板技术

对网站必要的部分实行静态化操作,同一个网站下的不同网页,风格一般都要保持一致,不同的只是内容,

让静态化的时候能够重用页面的整体框架,风格等这些就是模板

9.3、JAVA中静态化操作

Velocity或者FreeMarker等模板框架来实现。

它允许任何人仅简单的使用模板语言,来引用由JAVA代码定义的对象。

当Velocity应用于web开发时,界面设计人员可以和java程序开发人员,同步开发一个遵循MVC架构的WEB站点,也就是说,页面设计人员可以只关注页面的显示效果,而java程序开发人员只关注业务逻辑编码的实现。

Velocity将java代码从web页面中分离出来,为web站点的长期维护提供了便利

十、初识MVC

MVC:mode view  controller

十一、优化数据库查询

11.1、在查询频繁的列上添加合适的索引

  • 判断并建立必要的索引:使所创建的索引对数据的工作效率提高有所帮助
  • 对索引使用一些规则:创建索引时,应该与实际的查询相结合
  • 合登理的索引对SQL语句的意义:确保其得到了真正的使用,能发挥作用

11.2、尽量少用IN或者NOT IN

在where子句中尽量少使用IN 或者NOT IN 

可以使用EXIST 或者NOT EXIST来代替IN或者NOT IN

11.3、尽量少用通配符*

查询语句写上字段名,尽量不使用*如:select top 50 col1 from table1

11.4、尽量少用LIKE

使用LIKE会导致建立的索引效,降低查询效率

十二、性能监测

12.1、为什么需要监测网站的性能

网站的性能是随着浏览量以及硬件设施的不同而发生变化的,网站在运营前或者运营期间有必要对网站整体性能进行监测

12.2、监测阶段

  • 网站开发期间
  • 网站运营期间

12.3、监测软件

  • 网站开发期间:使用LoadRunner等专业的负载测试工具

使用LoadRunner等专业的负载测试工具优点:

  • 轻松创建虚拟用户:Virtual User Generator轻松创建虚拟用户,以虚拟用户的方式模拟真实用户的业务操作行为
  • 创建真实的负载:Controller,来设置业务流程组合与虚拟用户数量,很快的组织起多用户的测试方案
  • 定位性能的问题:LoadRunner内含集成的实时监测器,在负载测试任何时间,都可以观测到应用系统的运行性能
  • 分析结果以精确定位问题所在:测试完毕合,会收集汇总所有数据并生成高级的测试报告。
  • 重复测试保证系统发布的高性能:Controller,允许重复执行与出错修改前的相同测试方案
  • 网站运营期间:监控宝,美图的Service Uptime,Uptime Robot等

 

posted @ 2015-02-21 21:41  森林森  阅读(368)  评论(0编辑  收藏  举报