Felix 技术园地

学如逆水行舟,不进则退

葛绍飞ID:sfeig
3179次访问,排名2万外好友0人,关注者0
大学毕业后的我曾在部队任教4年,深刻理解纪律、团结的重要性,对未来的生活有着无限的向往,并脚踏实地的为之努力,热爱编程,在2004年部队转业加入到程序员的大本营,工作并快乐着,喜欢结交各个行业的朋友,并一起探讨人生、创业、技术、以及各种业余爱好,平时喜欢羽毛和乒乓球,喜欢周末近郊自驾游。
2000毕业后一直耕耘在微软的技术领域中,有长达8年的B/S系统开发经验,精通dhtml,javascript,css;立足asp.net平台开发,精通c#和.net 类库;开发各种控件无数,包括htc,jsControl,asp.net usercontrol,custom control;
熟练使用VC++进行Activex控件开发。熟练掌握各种设计模式,OOP,AOP,对.net remoting 和 Nhibernate有着丰富的经验,自行设计过若干个中等规模的系统软件架构。
sfeig的文章
原创 10 篇
翻译 0 篇
转载 0 篇
评论 24 篇
最近评论
文章分类
收藏
    相册
    Blog
    marshine(RSS)
    宝玉(RSS)
    开心就好的代码人生(RSS)
    速马(RSS)
    存档
    软件项目交易
    订阅我的博客
    XML聚合  FeedSky
    订阅到鲜果
    订阅到Google
    订阅到抓虾
    订阅到BlogLines
    订阅到Yahoo
    订阅到GouGou
    订阅到飞鸽
    订阅到Rojo
    订阅到newsgator
    订阅到netvibes

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

    新一篇: 数据表客户端排序及其他特色实现

          从昨天下午到今天一直在查找一个很重要的问题,原因是从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设为空等。

    发表于 @ 2005年08月25日 11:07:00|评论(loading...)|编辑

    评论:没有评论。

    发表评论  


    登录
    Csdn Blog version 3.1a
    Copyright © Felix