惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

D
Docker
博客园 - 【当耐特】
S
SegmentFault 最新的问题
阮一峰的网络日志
阮一峰的网络日志
大猫的无限游戏
大猫的无限游戏
WordPress大学
WordPress大学
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
The Cloudflare Blog
Apple Machine Learning Research
Apple Machine Learning Research
小众软件
小众软件
博客园 - 三生石上(FineUI控件)
Martin Fowler
Martin Fowler
云风的 BLOG
云风的 BLOG
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
F
Fortinet All Blogs
Y
Y Combinator Blog
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
J
Java Code Geeks
Engineering at Meta
Engineering at Meta
MyScale Blog
MyScale Blog
B
Blog
酷 壳 – CoolShell
酷 壳 – CoolShell
人人都是产品经理
人人都是产品经理

博客园 - 非我

目前主流的四大浏览器内核Trident、Gecko、WebKit以及Presto 随手记录: MVC自定义提交form 在文本框的光标处插入指定的文本(另一种方式) 在文本框的光标处插入指定的文本(兼容IE6和Firefox) Javascript对象的比较 javascript对象的深拷贝 对mootools的颜色选择器做个小改进 用户中心 - 博客园 检查矩阵是否有线性相关性 - 非我 - 博客园 WOW笑话,笑死我了 动态修改/添加CSS文件链接 使用.net验证控件遇到的小麻烦 (转)40种网站设置技巧 访问者模式-Visitor 学习与思考 累啊~用记事本写的小程序 Observer pattern 观察者模式 艾薇尔新歌GrilFriend的MV Command Pattern - 命令模式(ASP.NET版) 动态控件的问题
对Response.End的疑问
非我 · 2007-03-28 · via 博客园 - 非我

今天作一个最简单的Ajax访问服务器获得返回信息的小例子(现在才作,似乎好晚啦,哈哈)。按照google来的例子很顺利的作成了,但我觉得很奇怪,就是第一次xmlhttp请求响应很慢,我找了找,发现是Response.End造成的。一般大家都是这么写的

Response.Write("Server Message !" );
Response.End();

如果不加Response.End,用responseText得到的信息就不仅是我们写的了,整个页面的html代码都在里头,处理起来更麻烦。可是我在去掉 Response.End后发现,虽然传回去的数据很多,但第一次响应的速度反而更快。

按照我一直以来的理解,调用Response.End的话,页面在回发时应该少做了不少工作,速度会比不调用快,但现在看来显然不是。我看了下帮助,试了几个办法,发现这样写第一次请求就不会慢了。

Response.Write("Server Message !");
Response.Flush();
Response.Close();

帮助对Response.Close的解释是关闭到客户端的连接。对Response.End的解释是停止该页的执行,并引发Application_EndRequest,而对Application_EndRequest的说明就不怎么详细了,帮助里就找到了这么一句:Application_EndRequest事件使您可以有机会关闭或处置用于该请求的资源。

还是不明白,于是我想看看Response.End里面到底做什么了

                if (this._context.IsInCancellablePeriod)
                
{
                    InternalSecurityPermissions.ControlThread.Assert();
                    Thread.CurrentThread.Abort(
new HttpApplication.CancelModuleException(false));
                }

                
else
                
{
                    
this.Flush();
                    
this._ended = true;
                    
this._context.ApplicationInstance.CompleteRequest();
                }

结果看了更晕了……

虽然我似乎找到了解决问题的办法,但我对这个办法心里没底,就这么直接断开客户端的连接会不会引起其他的问题呢?