摘要:Web服务器的性能优化有很多资料介绍了,多台主机负载均衡,查询结果的多级缓
存,数据库索引优化等都是常见的优化手段。随着后端优化空间越来越小,现在越来越多
的网站更注重前端性能的优化,就是浏览器,http层面的优化,这里写两点最简单最有效
的asp.net网站优化技巧。
== 了解常见的网站性能优化技巧 ==
首先我们要学一些优化网站性能和体验的理论和基础知识,雅虎已经帮我们总结好了
,详见参考链接中的几篇文章,有好心人已经给翻译成中文了。这里面提到的一些技巧可
操作性都很强,建议每一个网站开发人员都仔细学习并进行实践,可以说不了解这里面说
的优化技巧,提升网站前端性能就无从谈起。
== 诊断网站性能 ==
要想优化网站的前端性能,首先要查看最影响前端性能的瓶颈是哪些?最常用的工具
就是Google的Page Sped和Yahoo的YSlow,这两个工具都是在Firefox下使用的,并且是基
于FireBug的,FireBug是前端开发人员必备的一个插件了。
这两个工具可以帮你诊断你的页面的性能瓶颈在哪里,比如打开你的站点首页共消耗
了多少网络流量,进行了多少次HTTP请求,每个页面组件是否可以进行缓存,页面加载的
各个执行过程各占用了多少时间,加载中是否有阻塞情况,页面组件并行加载情况如何,
图片是否还可以进行无损压缩,脚本和样式放置的位置是否合理,是否删除了不必要的空
白,是否进行了gzip的压缩等等。知道了这些信息,你就可以有针对性的进行网站性能优
化,先把最影响性能的地方优化掉。
这两个工具使用起来也很简单,详见参考链接中的两篇文章。
== 进行优化实践 ==
根据我对网站优化的学习和实践,总结出来一些经验:一般网站性能消耗都集中在网
络下载上,包括页面本身的HTML以及图片,脚本,样式等组件的下载,尤其是在网速比较
慢的时候,下载这些东西要花费整个网页呈现的大部分时间,这些东西下载完成后,本地
的渲染和展现一般会很快,除非有很复杂的效果或脚本,而服务端执行的快慢要看具体服
务器的逻辑,优化起来复杂度较高,往往站点本身还要访问后端的其它服务器,数据库等
。
解决这个首先有两点可以入手,一是对页面组件进行压缩,web用的图片一般本身就
是压缩格式,所以压缩空间不太大,还会额外占用服务器CPU,但脚本,样式,HTML这些
文本内容用GZIP压缩的压缩比就非常大了,而且现在大多数浏览器都支持GZIP压缩。
另一方面是对脚本,样式,图片加Http Expire头,加上这个过期头,网站只需要第
一次打开时需要下载这些网页组件,之后再打开甚至连HTTP请求都不用发起,直接在本地
加载了,当然脚本和样式服务端有可能以后还会变化,我们需要利用URL重写进行脚本和
样式引用的自动改名,以便在脚本和页面更新后刷新利览器缓存。
可喜的是要做到这两点,在IIS7里非常简单,首先说压缩,在win7里利用"打开或关
闭windows功能"里打开IIS性能工具里的“动态内容压缩”和“静态内容压缩”,如图1。
然后在IIS管理器里,选中要压缩的网站,双击压缩按钮把动态压缩和静态压缩的勾
加上就行了,默认会对mimetype为text/*和application/x-javascript进行压缩,一般这
就够用了,但IIS7默认对.js文件使用
application/x-javascript的mimetype,而默认对application/x-javascript进行的是动
态压缩,动态压缩和静态压缩的区别就是不会被IIS的缓存机制缓存,每次访问都会去读
取文件或路由请求到后面的模块,所以我们要把.js的mimetype改成
application/javascript,如图2
然后对application/x-javascript进行动态压缩,对application/javascript进行静态压缩,需要配置C:\Windows\System32\inetsrv\config\applicationHost.config,如下图3
对页面组件进行了压缩有已经减少了不少网络流量,提升了很大的性能,但是一些脚
本和样式一般情况下很少改变,每次访问网页都要重新下载还是会消耗不少网络流量,这
就需要配置静态文件的过期时间了。
IIS7的管理器里有个HTTP响应标头的功能,一般网站的脚本、样式和图片分别放在
scripts,styles,images目录下,我们直接为这几个目录下的文件设置过期时间为100天就
可以了,在IIS7的管理器里直接可以进行操作,具体见参考链接,就不重复了,设置成功
后会在这3个子目录里分别生成一个web.config文件,并设置
cacheControlMode=UseMaxAge,cacheControlMaxAge=100.00:00:00
这样设置以后优化效果就很好了,第一次打开网页后,再次打开网页要比以前快好多
倍,但是有一个问题就是如果你的样式或脚本修改后,如果客户端不刷新页面,就不会生
效了。解决这个问题利用URL Rewrite把样式,脚本的引用路径加一个时间戳,如果脚本
改动了后,时间戳就改动了,引用的文件名就变了,浏览器就会下载新的样式了,而新的
样式实际上经过url rewrite后还是以前的名字,比如/scripts/base.201001111502.js实
际上就是/scripts/base.js,具体操作见参考文章。
但文章里说的是iis6.0用的是URLRewrite组件,在IIS7里有一个免费的rewrite模块,
在微软网站下载下来安装上就行了,它的配置规则和URLRewrite不太一样,最重要的区别
就是对正则分组匹配不是用$1,$2引用,而是用{R:1}这种格式引用,还有就是目标url的
配置不需要正则转义符,比如"."就是".",不需要是"\.",如果不注意这个就等着404吧,
具体IIS7.5下的重写模块使用和注意事项可看后面的参考链接,我这里的配置如下
{{{
<rewrite>
<rules>
<rule name="static_file_auto_version">
<match url="^(scripts|styles|images)/(.*?)\.[0-9]+\.(css|js|gif|png|jpg)" />
<action type="Rewrite" url="{R:1}/{R:2}.{R:3}" />
</rule>
</rules>
</rewrite>
}}}
== 小节 ==
进行了这两处优化后,网站性能已经提升了不少了,接下来再按照雅虎提供的优化原
则和page speed的提示看看还有哪些是可以比较简单而有效的进行优化的。
== 参考链接==
下载IIS7 URL Rewrite 模块
http://www.iis.net/download/URLRewrite
自动给CSS,JavaScript文件添加版本号
http://www.cnblogs.com/dushouke/archive/2010/01/16/automatically-version-your-css-and-javascript-files.html
【转】Windows7下IIS7.5的伪静态URL Rewrite安装配置和案例综合
http://www.cnblogs.com/dongqi/archive/2010/08/10/1796775.html
Google网站性能优化工具Page Speed试用报告
http://dudo.org/archives/2009060611295.html
你的网站为什么会慢?——用YSlow为你的网站提速
http://dudo.org/archives/2008052016222.html
Yahoo!网站性能最佳体验的34条黄金守则——内容
http://dudo.org/archives/2008051211216.html
Yahoo!网站性能最佳体验的34条黄金守则——服务器
http://dudo.org/archives/2008051322217.html
Yahoo!网站性能最佳体验的34条黄金守则——JavaScript和CSS
http://dudo.org/archives/2008051417218.html
Yahoo!网站性能最佳体验的34条黄金守则——图片、Coockie与移动应用
IIS7配置Gzip压缩
http://www.imkevinyang.com/2009/06/iis7%E9%85%8D%E7%BD%AEgzip%E5%8E%8B%E7%BC%A9.html
IIS为不同的文件设置不同的过期头
http://www.cnblogs.com/dushouke/archive/2010/07/24/iis-only-add-expires-headers-to-images.html
- ASP.NET网站性能优化
如果你是一个做过ASP网站,又做过ASP.NET网站的程序员,你可能会发现,如果按正常的思路开发ASP.NET网站,ASP.NET网站的速度会比ASP网站慢很多,为什么强大的网站语言会比弱得慢的,原因 ...
- 不修改代码就能优化ASP.NET网站性能的一些方法
阅读目录 开始 配置OutputCache 启用内容过期 解决资源文件升级问题 启用压缩 删除无用的HttpModule 其它优化选项 本文将介绍一些方法用于优化ASP.NET网站性能,这些方法都是不 ...
- 不修改代码就能优化ASP.NET网站性能的一些方法 [转]
不修改代码就能优化ASP.NET网站性能的一些方法 阅读目录 开始 配置OutputCache 启用内容过期 解决资源文件升级问题 启用压缩 删除无用的HttpModule 其它优化选项 本文将介绍一 ...
- 记一次ASP.NET MVC性能优化(实际项目中)
前言 在开发中为了紧赶项目进度而未去关注性能的问题,在项目逐渐稳定下来后发现性能令人感到有点忧伤,于是开始去关注这方面,本篇为记录在开发中遇到的问题并解决,不喜勿喷.注意:以下问题都是在移动端上出现, ...
- (摘录)26个ASP.NET常用性能优化方法
数据库访问性能优化 数据库的连接和关闭 访问数据库资源需要创建连接.打开连接和关闭连接几个操作.这些过程需要多次与数据库交换信息以通过身份验证,比较耗费服务器资源. ASP.NET中提供了连接池(Co ...
- ASP.NET MVC性能优化工具 MiniProfiler
ASP.NET MVC性能优化工具 MiniProfiler 2014年04月19日 ⁄ ASP.NET ⁄ 共 1159字 ⁄ 字号 小 中 大 ⁄ 暂无评论 ⁄ 阅读 325 views 次 MV ...
- 26个ASP.NET常用性能优化方法
数据库访问性能优化 数据库的连接和关闭 访问数据库资源需要创建连接.打开连接和关闭连接几个操作.这些过程需要多次与数据库交换信息以通过身份验证,比较耗费服务器资源. ASP.NET中提供了连接池(Co ...
- 【转】记一次ASP.NET MVC性能优化(实际项目中)
前言 在开发中为了紧赶项目进度而未去关注性能的问题,在项目逐渐稳定下来后发现性能令人感到有点忧伤,于是开始去关注这方面,本篇为记录在开发中遇到的问题并解决,不喜勿喷.注意:以下问题都是在移动端上出现, ...
- 不修改代码优化 ASP.NET 网站性能的一些方法
本文将介绍一些方法用于优化ASP.NET网站性能,这些方法都是不需要修改程序代码的.它们主要分为二个方面:1. 利用ASP.NET自身的扩展性进行优化.2. 优化IIS设置. 配置OutputCach ...
随机推荐
- 断命windows上卸载node并重装
抠门儿世界500强给前端开发人员用windows windows不支持n模块没法自动升级 不记得何时安装的旧版本node连个uninstaller都找不到 绕道安装nvm path也自动加进去了丫命令 ...
- win7 安装SQL Server 2005 开发版 图文教程
转自win7 安装SQL Server 2005 开发版 图文教程 ----------------------------写在安装前------------------------------ 一. ...
- 创建支持CRUD(增删改查)操作的Web API(二)
一:准备工作 你可以直接下载源码查看 Download the completed project. 下载完整的项目 CRUD是指“创建(C).读取(R).更新(U)和删除(D)”,它们是四个 ...
- poj1741 bzoj2152
树分治入门 poj1741是男人八题之一,经典的树分治的题目这里用到的是点分治核心思想是我们把某个点i作为根,把路径分为过点i和不过点i先统计过点i这样的路径数,然后在统计其子树中的答案,这样就不断地 ...
- Java正则表达式应用总结
http://lavasoft.blog.51cto.com/ http://lavasoft.blog.51cto.com/62575/179324 Java正则表达式应用总结 一.概 ...
- 切换Oracle数据库实例
如果多个实例,需要切换可以采用以下命令: export ORACLE_SID=SID
- selenium webdriver(4)---模拟鼠标键盘操作
webdriver提供Actions来模拟鼠标悬浮.拖拽和键盘输入等操作,详细代码见org.openqa.selenium.interactions.Actions.本文通过几个实例来说明Action ...
- 2013 ACM区域赛长沙 K Pocket Cube hdu 4801
题意:给了一个2*2的魔方..每步操作可以将任意一面翻转90度..现在问在N(<=7)步内.最多能翻出几面相同的. 直接打表模拟每种翻转情况 #include<cstdio> #in ...
- 《Differential Equations with Boundary-Value Problems》-chaper2-一阶线性方程
学习微分方程中,一个很常见的疑惑就是,我们所熟悉的非齐次微分方程的通解是对应齐次方程的通解加特解,但是更为重要的是,我们需要知道这句话是怎么得来的. 我们探讨一个未知问题的一般思路是将其不断的与已知已 ...
- ARCGIS 点抽稀的实现
点抽稀是制图综合的一部分,即在点数据点特别密集是,需要选取比较重要的点而舍去不要重的点,使得图面整洁. 一.基本原理 先把所有的点符号都设成透明.这样显示是没有点的.然后给这些点设置标注.标注方法很奇 ...