本来想写一个网站优化的系列(前端到后端的数据库,垂直优化到分布式,后面会补上),但没有时间(借口),今天就总结一下前几天优化网站的过程。

网站优化重点在于找出出现性能问题的地方,往往是解决方案很简单,过程很艰辛。

先介绍一下场景:公司某网站产品的一个页面加载速度非常慢,完全加载完成大约8秒左右,要尽可能的提高网站加载速度。

线上环境:IIS6.0 +ASP.NET MVC4

解决思路:

对于网站优化我曾经总结过一套方法论:顺着HTTP请求方向追一排查,例如:浏览器->IIS服务器->ASP.NET->数据库。根据二八原则,其中几个阶段的20%的代码造成了80%的性能问题,所以我要重点寻找那20%的代码。但方法论始终是方法论,根据我对业务判断,我的排查流程就变成了这样 : 数据库->ASP.NET->IIS服务器->浏览器。(后来结果证明,我应该按照方法论走)

优化过程:

一、用SQL Profiler监控慢SQL

用SQL Profiler把Duration在3000毫秒以上的慢SQL赛选出来,结果一条也没有,缩小Duration到2000毫秒。结果没有。继续观察有没有N+1的问题,也没有。

二、查看是否是ASP.NET应用程序的问题

用HttpModule监控每个URL的请求时间:

结果当前请求的URL非常快。进行下一步

  三、查看IIS的相关配置。

结果:动态压缩,静态压缩都已经启用。

开始分析IIS日志,IIS日志中记录了每个请求的执行时间,这个时间和HttpModule的时间相减就是网络传输时间,由此可以判断是否是网络引起的问题。

理想总是好的,结果IIS日志已经十几G了,要挨个分析不知道啥时候,放弃,进行下一步。

以后会上LogStash,然后升级IIS(IIS6用起来真蛋疼)。

四、观察浏览器响应时间

由上图接收时间可以看出:网站响应时间大部分都浪费到了网络下载。而且页面大小为1.7M。难道是网络延时太大?ping一下

以上说明网络没有太大延时。这时候突然想起来了公司的网络限速了,下载速度平均200kb/s , 那么1.7M网页下载时间也就大约8s左右了。

再查看1.7M网页内容全是html,而且响应报文头里没有Contend-Ecoding ,说明没进行压缩。但明明服务器开启了动态压缩。

这时想起了博客园写的一篇文章:迁入阿里云后:解决了一个IIS动态内容压缩的问题 但IIS6下没有这个节点,需要修改metabase.xml,修改metabase.xml会影响所有网站,网站出现问题,风险太大,我们需要做的只是压缩当前网站的动态内容,想其他方案。

五、自己写HttpModule解决压缩问题

开始想造轮子 : 在EndRequest用Gizp压缩然后输出,结果EndRequest始终拿不到响应内容。

在万能的Stackoverflow找到这两篇文章 Can I detect if content has been compressed in my HttpModule?

Use .Net 2.0 compression library and HttpModule to compress your webpages

那个代码不适合,然后改造 ,最后修改后的代码:

上线以后经过测试,该页面响应速度2s以内了,而且响应报文头里面也有了Content-Encoding:gzip

总结,其实一开始我应查看浏览器的响应时间这些信息,但根据以往的优化经验和现在的业务,我把关注点放在了后端,不过以后我会按照我的方法论走,那样解决问题的成本更低。

解决asp.net动态压缩的更多相关文章

  1. asp.net 动态压缩、切割图片,并做缓存处理机制

    在asp.net中,新建一个handler,把需要切割的网内图片,通过调用此URL来切割并缓存.http://localhost:53829/CacheImage/ResizeImage.ashx?s ...

  2. Asp.Net静态资源动态压缩之WebOptimization

    一.Asp.Net中对Css/Js的动态压缩工具 WebOptimization 在Asp.NetMVC自带的模板项目中自动引入了当前WebOptimization工具.如果使用的空模板Nuget命令 ...

  3. asp.net 动态添加自定义控件

    前两天一直纠结asp.net动态添加控件后,后台获取不到控件的问题,查看了网上很多的回答,可能自己的理解有误或者自己所掌握的知识有限,都没有解决我遇到的问题,经过两天的研究,终于把问题解决了. 我这里 ...

  4. asp.net动态输出透明gif图片

    要使用asp.net动态输出透明gif图片,也就是用Response.ContentType = "image/GIF". 查了国内几个中文资料都没解决,最后是在一个英文博客上找到 ...

  5. JQuery EasyUI弹出对话框解决Asp.net服务器控件无法执行后台代码的方法(转)

    原文:JQuery EasyUI弹出对话框解决Asp.net服务器控件无法执行后台代码的方法 jquery-easyui是一个基于jquery的图形界面插件,利用easyui可以创建很多好看的网页界面 ...

  6. MapXtreme+Asp.net 动态轨迹

    MapXtreme+Asp.net 动态轨迹(请求大神指点)   功能简介:在MapXtreme+Asp.net的环境下实现轨迹回放功能,经过两天的努力基本实现此功能.但还有部分问题需要解决,求大神们 ...

  7. IIS7开启gZip动态压缩

    1.安装动态压缩模块: 安装过程可能的报错:This application has requested the Runtime to terminate it in an unusual way. ...

  8. 解决ASP.NET中的各种乱码问题

    解决ASP.NET中的各种乱码问题 阅读目录 开始 页面显示乱码问题 AJAX提交的数据乱码问题 JavaScript中正确的URL编码方式 ASP.NET中正确的URL编码方式 正确的URL编码方式 ...

  9. Asp.net动态页面静态化之初始NVelocity模板引擎

    Asp.net动态页面静态化之初始NVelocity模板引擎 静态页面是网页的代码都在页面中,不须要运行asp,php,jsp,.net等程序生成client网页代码的网页,静态页面网址中一般不含&q ...

随机推荐

  1. APP 版本更新 流程(已上架APP,提交新版本)

    背景: 今天发布app的新版本, 可是无奈换了电脑, 没有了以前上架时候的发布证书和描述文件. 但是没关系, 依然可以上传成功,哈哈哈~ 虽然走了很多弯路 - -|| 如果是向 App Store 提 ...

  2. HTTP与AJAX深入揭秘,不使用AJAX实现页面无刷新

    AJAX的原理是什么? 实际上就是发起HTTP请求,既然就是发起HTTP请求,那只要我们能够实现发起HTTP请求就可以在不使用AJAX的情况下实现相同的效果. 在前端有好多方式可以发起HTTP请求,比 ...

  3. 【.net】从比较两个字节数组谈起

    上午,有位初学者朋友问:如何比较两个字节数组中各字节是否相等? 不许笑,我一向反对嘲笑初学者,初学者不认真学习时你可以批评,但不能讥嘲.你不妨想想,你自己开始学习编程的时候又是什么个光景? 好,于是, ...

  4. JAVA设计模式《二》

    上一篇为大家介绍了一下设计模式中的责任链模式,本篇为大家介绍一下关于设计模式中的单例模式与模板方法模式.单例模式的作用在于,保证应用中某个实例有且只有一个,单例模式又被分为:饱汉模式与饿汉模式,两者的 ...

  5. Android属性动画之ObjectAnimator控制

    Android为我们提供了大量的动画效果,如何通过这些动画来达到我们需要的效果呢?今天就为大家总结一下ObjectAnimator动画控制事件. 该项目的的布局文件只有两个控件:ImageView和B ...

  6. JQuery Datatables服务器端处理示例

    HTML <table class="table table-striped table-bordered table-hover" id="table_repor ...

  7. 如何利用Direct NFS克隆数据库

    CloneDB是Oracle 11.2.0.3推出的一项新特性,它利用的了11g新引入的Direct NFS.它直接利用目标数据库的备份,无需将备份COPY到克隆环境下,使得一个备份可以克隆多个不同用 ...

  8. AIX下如何根据端口号查找相应的进程

    1. $ netstat -Aan |grep 8080 f1000e0002321bb8 tcp 0 0 *.8080 *.* LISTEN 2. $ rmsock f1000e0002321bb8 ...

  9. 算法与数据结构(2)--英雄会第三届在线编程大赛:几个bing

    基础知识的回顾不再写到这里面了,会写一些算法算法的解答或者读一些相关书籍的笔记. 今天做了一道算法题,来自微软必应·英雄会第三届在线编程大赛:几个bing? 做出来了...但不知道为啥执行测试用例失败 ...

  10. 初探JavaScript(一)——也谈元素节点、属性节点、文本节点

    Javascript大行其道的时候,怎么能少了我来凑凑热闹^_^ 基本上自己对于js的知识储备很少,先前有用过JQuery实现一些简单功能,要论起JS的前世今生,来龙去脉,我就一小白.抱起一本< ...