一个不起眼的问题导致性能的严重的下降

      从昨天下午到今天一直在查找一个很重要的问题,原因是从objectDataSource控件的数据缓存失效查起,导致了站点的性能下降,没想到花了一天的工夫最后查出的原因让人跌破眼镜。
     有经验的美工喜欢用<img src="" width="1" height="3">这种方式来精确的控制换行的高度,因为这样可以通过控制<img>的height来实现像素级的换行高度控制,然而这样做对服务器来说却是一个不折不扣的考验和折磨。
     当用户请求访问某个页面时,浏览器将首先获取该页面的源代码,然后执行,在执行的过程中,将会在内存中创建该页面对象实例,加载各种资源,激发各种相应的客户端事件,执行对应的javaScript脚本,直到最后展现给我们一个精美的页面。
     如果将图片的src设为空,浏览器会将该图片的链接地址设定为站点的地址,如:http://localhost/myWebsites,这一点我们可以通过右键单击图片属性查看url地址得到证实,这时候,浏览器将会按照此地址向服务器请求该图片的实际内容字节流,以便显示该图片,可是按照此地址向服务器请求时,将会执行站点的默认主页面,就像我们请求访问了该主页面一样,服务器将会执行主页面的所有生命周期内的相关代码,然后返回客户端该主页面的生成字节流,由于该图片字节流实际上是一个页面的源代码,所以浏览器将不能正确的显示该图片。
     到这里我们也看得很清楚了,当用户请求访问含有<img src="">页面时,将会导致了服务器额外的执行站点主页面,相当于我们同时访问了当前页面和站点主页面两个页面。服务器会将这两个页面内容字节流返回客户端,不但浪费了服务器的资源,还白白消耗了宝贵的网络带宽。如果您的系统是多层架构的话,同样将会影响到每一层服务器的性能。
为了验证这里的结论,我们不妨做两个页面:
Page1.htm
<html>
<body>
this is the default page.
</body>
</html>

Page2.htm
<html>
<body>
<img src="" width=500 height=100><br>
this is the user requested  page.
</body>
</html>
在IIS中将page1.htm设为主页面,分两次访问page2.htm:
第一次:访问page2.htm页面,并将该页面保存。
第二次:删除page2.htm页面代码中的<img src="" width=500 height=100>,保存该页面代码,然后再访问此页面,并保存该页面;
结论验证:
服务器端验证:
     这一点我们可以通过查看IIS服务日志来确认,默认的IIS日志地址为:C:/WINDOWS/system32/LogFiles/w3svc1,打开该文件夹,可以看到以日期命名的文本文件,格式如:ex050825.log,打开该文件可以看到我们刚才的访问请求记录,如下: #Date: 2005-08-25 01:47:14
#Fields: date time s-ip cs-method cs-uri-stem cs-uri-query s-port cs-username c-ip cs(User-Agent) sc-status sc-substatus sc-win32-status
2005-08-25 01:47:14 127.0.0.1 GET /MasterPageAndDefaultRelationStudy/page2.htm - 80 - 127.0.0.1 Mozilla/4.0+(compatible;+MSIE+6.0;+Windows+NT+5.2;+Maxthon;+.NET+CLR+1.1.4322;+.NET+CLR+2.0.50215;+.NET+CLR+1.0.3705) 200 0 0
2005-08-25 01:47:14 127.0.0.1 GET /MasterPageAndDefaultRelationStudy/page1.htm - 80 - 127.0.0.1 Mozilla/4.0+(compatible;+MSIE+6.0;+Windows+NT+5.2;+Maxthon;+.NET+CLR+1.1.4322;+.NET+CLR+2.0.50215;+.NET+CLR+1.0.3705) 200 0 0
2005-08-25 01:47:22 127.0.0.1 GET /MasterPageAndDefaultRelationStudy/page2.htm - 80 - 127.0.0.1 Mozilla/4.0+(compatible;+MSIE+6.0;+Windows+NT+5.2;+Maxthon;+.NET+CLR+1.1.4322;+.NET+CLR+2.0.50215;+.NET+CLR+1.0.3705) 304 0 0
     很明显,我们在第一次访问page2.htm页面时,IIS同时向客户端还返回了站点的默认主页面,page1.htm,然而在我们第二次访问page2.htm页面时,服务器并没有返回page1.htm页面。
客户端验证:
     浏览到我们刚才分别两次保存页面的地方看看,对于第一次保存的页面,同时还生成了一个同名的文件夹,里面存放的就是以站点名称命名的*.htm页面,其实就是刚才的page1.htm页面;而对于我们第二次保存的页面,并没有生成同名的文件夹。

     上面的只是一个示例性质的验证,我们可以写一个更复杂的含有执行代码的验证实例,同时可以启动断点调试功能,这样就能看得更清楚了。
     所以最后的结论是:在我们的页面中千万不能含有<img src="">这样的代码,这同样也包括客户端的javascript脚本的动作行为,如创建一个img元素,而将其src设为空等。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值