今天作一个最简单的Ajax访问服务器获得返回信息的小例子(现在才作,似乎好晚啦,哈哈)。按照google来的例子很顺利的作成了,但我觉得很奇怪,就是第一次xmlhttp请求响应很慢,我找了找,发现是Response.End造成的。一般大家都是这么写的
按照我一直以来的理解,调用Response.End的话,页面在回发时应该少做了不少工作,速度会比不调用快,但现在看来显然不是。我看了下帮助,试了几个办法,发现这样写第一次请求就不会慢了。
帮助对Response.Close的解释是关闭到客户端的连接。对Response.End的解释是停止该页的执行,并引发Application_EndRequest,而对Application_EndRequest的说明就不怎么详细了,帮助里就找到了这么一句:Application_EndRequest事件使您可以有机会关闭或处置用于该请求的资源。
还是不明白,于是我想看看Response.End里面到底做什么了
虽然我似乎找到了解决问题的办法,但我对这个办法心里没底,就这么直接断开客户端的连接会不会引起其他的问题呢?
Response.Write("Server Message !" );
Response.End();
如果不加Response.End,用responseText得到的信息就不仅是我们写的了,整个页面的html代码都在里头,处理起来更麻烦。可是我在去掉 Response.End后发现,虽然传回去的数据很多,但第一次响应的速度反而更快。Response.End();
按照我一直以来的理解,调用Response.End的话,页面在回发时应该少做了不少工作,速度会比不调用快,但现在看来显然不是。我看了下帮助,试了几个办法,发现这样写第一次请求就不会慢了。
Response.Write("Server Message !");
Response.Flush();
Response.Close();
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();
}
结果看了更晕了……{
InternalSecurityPermissions.ControlThread.Assert();
Thread.CurrentThread.Abort(new HttpApplication.CancelModuleException(false));
}
else
{
this.Flush();
this._ended = true;
this._context.ApplicationInstance.CompleteRequest();
}
虽然我似乎找到了解决问题的办法,但我对这个办法心里没底,就这么直接断开客户端的连接会不会引起其他的问题呢?