Asp.net 网站性能优化二则分享

随着后端优化空间越来越小,现在越来越多的网站更注重前端性能的优化,就是浏览器,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的提示看看还有哪些是可以比较简单而有效的进行优化的。(来源:蛙蛙池塘)

(0)

相关推荐

  • 分享提高ASP.NET Web应用性能的技巧

    在这篇文章中,将介绍一些提高 ASP.NET Web 应用性能的方法和技巧.众所周知,解决性能问题是一项繁琐的工作,当出现性能问题,每个人都会归咎于编写代码的开发人员. 那性能问题到底该如何解决?以下是应用系统发布前,作为 .NET 开发人员需要检查的点. 1.debug=「false」 当创建 ASP.NET Web应用程序,默认设置为「true」.开发过程中,设置为「true」是非常有用多,但在应用程序发布部署时,需将其设置为「false」. <compilation defaultLang

  • ASP.NET性能优化之构建自定义文件缓存

    现在,借助于.NET4.0中的OutputCacheProvider,我们可以有多种选择创建自己的缓存.如,我们可以把HTML输出缓存存储到memcached分布式集群服务器,或者MongoDB中(一种常用的面向文档数据库,不妨阅读本篇http://msdn.microsoft.com/zh-cn/magazine/gg650661.aspx).当然,我们也可以把缓存作为文件存储到硬盘上,考虑到可扩展性,这是一种最廉价的做法,本文就是介绍如果构建自定义文件缓存. 1:OutputCachePro

  • .NET获取枚举DescriptionAttribute描述信息性能改进的多种方法

    一. DescriptionAttribute的普通使用方式 1.1 使用示例 DescriptionAttribute特性可以用到很多地方,比较常见的就是枚举,通过获取枚举上定义的描述信息在UI上显示,一个简单的枚举定义: public enum EnumGender { None, [System.ComponentModel.Description("男")] Male, [System.ComponentModel.Description("女")] Fem

  • 不可忽视的 .NET 应用5大性能问题

    实现有效 APM 策略所面临的挑战: 代码依赖 过度或不必要的日志 同步与锁 潜在数据库问题 潜在的基础架构问题 1.代码依赖 开发程序是一项具有挑战性的工作.你不仅要为了满足商业需求而建立程序逻辑,还要选择最合适的代码库和工具来帮助你.你能想象自己创建所有的日志管理代码,XML 和 JSON 解析逻辑,或所有的序列化库么?你当然可以编写代码来完成这些事,但是诸多开源开发者团队已经做好了这些事情,你又何必亲力亲为呢?此外,如果你正在与第三方系统集成,你会自己读完专有的通信协议规范,还是购买供应商

  • Asp.net 网站性能优化二则分享

    随着后端优化空间越来越小,现在越来越多的网站更注重前端性能的优化,就是浏览器,http层面的优化,这里写两点最简单最有效的 asp.net网站优化技巧. 了解常见的网站性能优化技巧 首先我们要学一些优化网站性能和体验的理论和基础知识,雅虎已经帮我们总结好了,详见参考链接中的几篇文章,有好心人已经给翻译成中文了.这里面提到的一些技巧可操作性都很强,建议每一个网站开发人员都仔细学习并进行实践,可以说不了解这里面说的优化技巧,提升网站前端性能就无从谈起. 诊断网站性能 要想优化网站的前端性能,首先要查

  • Asp.Net 网站性能优化之缓字决 (上) 缓冲写数据

    大家已经看到很多关于Asp.Net缓存的文章了.所以我写的时候要改变一下思路,从缓冲写数据开始说起.缓冲写数据的意思是在数据需要更新时不马上把数据存到数据库,而是先缓冲一下,然后在适当的时机再写入到数据库中. 缓冲写数据可以避免在网站并发访问多的时候,数据库瞬间承受过大压力,而造成死锁或响应不及时的情况. 那么什么时候适合缓冲写呢?是不是所有情况都适用呢?缓冲写会导致数据在内存中或者web server硬盘或者第三方存储中驻留一段时间,在这段时间内如果从数据库中查询最新数据的话,会有遗漏.大多数

  • asp.net小谈网站性能优化

    当然,网站性能优化是多方面的,这里先谈一下这些天来的所获: 1.书写代码的习惯: 再复杂的逻辑,也是从最简单的开始.在书写代码的过程中,很多不好的规范都会影响网站的性能: 以下是整理出来的些许代码习惯: 1)字符串的比较 用 string.Empty 代替 " " 2)在遍历过程中,先定义好计数变量, 再遍历, 这样会减少每次遍历就分配一次内存空间: 复制代码 代码如下: int i; for( i=0; i<100;i++) { // codeing } 3)同样的,用 Str

  • MySQL性能优化技巧分享

    MySQL性能优化 在互联网公司MySQL的使用非常广泛,大家经常会有MySQL性能优化方面的需求.整理了一些在MySQL优化方面的实用技巧. Schema与数据类型优化 整数通常是标识列最好的选择,因为它们很快并且可以使用AUTO_INCREMENT 完全"随机"的字符串(如:MD5().SHA1()或者UUID()等产生的字符串)会任意分布在很大的空间内,会导致INSERT以及一些SELECT语句变的很慢 如果希望查询执行得快速且并发性好,单个查询最好不要做太多的关联查询(互联网公

  • JavaScript提高网站性能优化的建议(二)

    在javascript关于提高网站性能的几点建议(一)中,从HTTP请求到页面渲染几个方面对提高网站性能提出了几点建议,本文是学习Steve Sounders的另外一本书<高性能网站建设进阶指南>之后,从JavaScript性能的角度进行总结概括,诸君共勉. JavaScript性能是实现高性能Web应用程序的关键 --Steve Sounders 1 利用js作用域链 作用域链(scope chain) 当执行一段JavaScript代码(全局代码或函数)时,JavaScript引擎会创建为

  • SQLite 性能优化实例分享

    最早接触 iOS 开发了解到的第一个缓存数据库就是 SQLite,后面一直也以 SQLite 作为中坚力量使用,以前没有接触到比较大量数据的读写,所以在性能优化方面关注不多,这次对一个特定场景的较多数据批量读写做了一个性能优化,使性能提高了十倍. 大致应用场景是这样: 每次程序启动会从服务器拉取一些数据,对本地数据库两个表进行同步更新,不存在就写入,存在就更新其字段.数据少的时候几十条,多的上千条. 由于缓存的数据可能会存在异步同时读写,所以做了一个后台同步队列,所有的缓存数据库操作都在这个队列

  • Python 代码性能优化技巧分享

    如何进行 Python 性能优化,是本文探讨的主要问题.本文会涉及常见的代码优化方法,性能优化工具的使用以及如何诊断代码的性能瓶颈等内容,希望可以给 Python 开发人员一定的参考. Python 代码优化常见技巧 代码优化能够让程序运行更快,它是在不改变程序运行结果的情况下使得程序的运行效率更高,根据 80/20 原则,实现程序的重构.优化.扩展以及文档相关的事情通常需要消耗 80% 的工作量.优化通常包含两方面的内容:减小代码的体积,提高代码的运行效率. 改进算法,选择合适的数据结构 一个

  • Mysql性能优化方案分享

    网上有不少mysql 性能优化方案,不过,mysql的优化同sql server相比,更为麻烦,同样的设置,在不同的环境下 ,由于内存,访问量,读写频率,数据差异等等情况,可能会出现不同的结果,因此简单地根据某个给出方案来配置mysql是行不通的,最好能使用status信息对mysql进行具体的优化. mysql> show global status; 可以列出MySQL服务器运行各种状态值,另外,查询MySQL服务器配置信息语句: mysql> show variables; 一.慢查询

  • Android端TCP长连接的性能优化教程分享

    前言 大家应该都知道,在Android端实现TCP长连接场景其实不多,我们最熟悉的不过推送和HTTP协议的实现(OkHttp),本文讨论的是在实现推送长连接的情况下怎么来做性能优化,下文只是我的一点拙见,有不妥之处还望指出,下面话不多说了,来一起看看详细的介绍吧. 推送长连接 可以说大部分APP是离不开推送(push)这个功能的,不过平常我们都是接入第三方SDK(极光.个推等)居多,因为要做一个推送服务,不光客户端要编写相应的Socket通信代码,服务器端更是麻烦,要处理大规模的长连接服务,消息

  • Vue 项目性能优化方案分享

    目录 前言 一.代码层面的优化 1.1.v-if 和 v-show 区分使用场景 1.2.computed 和 watch  区分使用场景 1.3.v-for遍历必须为item添加key,且避免同时使用v-if 1.4.长列表性能优化 1.5.事件的销毁 1.6.图片资源懒加载 1.7.路由懒加载 1.8.第三方插件的按需引入 1.9.优化无限列表性能 1.10.服务端渲染 SSR or 预渲染 二.Webpack 层面的优化 2.1.Webpack 对图片进行压缩 2.2.减少 ES6 转为

随机推荐