asp.net-mvc – 神秘的ASP.NET MVC Action高延迟问题?
使用Firebug和Chrome开发人员工具,我可以看到通过一个动作加载一些 javascript和css文件可以在我的开发机器上花费额外的500ms.这发生在不同的调用上的不同文件,并且不管我把它们放在什么样的顺序上.如果我直接链接到这个文件,这个500ms的延迟是不会发生的.我可以一遍又一遍地刷新页面,并获得不同的值,但是它们总是在请求时间内添加500ms.如果我保持刷新页面,额外的500ms显示在不同的单个文件或有时两个文件,其中一个是1000ms延迟,如下图所示. 编辑 将Monitor.Enter放入我的HttpModule的BeginRequest和EndRequest中的Monitor.Exit导致延迟消失,所以我猜测它与线程多个请求有关. 我使用Evan Nagel here描述的方法进行缓存,但是当我使用刚刚传递原始文件的操作将链接替换为我自己的控制器时,会发生同样的情况: public FileResult RawFile(string path,string contentType) { var server = HttpContext.Server; string decodedPath = server.UrlDecode(path); string mappedPath = server.MapPath(decodedPath); return File(mappedPath,contentType); } 这是我的html头部的代码: <link rel="stylesheet" href="@Url.Action("RawFile",new { controller = "Content",path = "~/Content/Site.css",contentType = "text/css" })" type="text/css" /> <script src="@Url.Action("RawFile",path = "~/Scripts/debug/FBINFO.js",contentType = "application/x-javascript" })" type="text/javascript"></script> <script src="@Url.Action("RawFile",path = "~/Scripts/jquery-1.4.1.min.js",contentType = "application/x-javascript" })" type="text/javascript"></script> 这似乎不会在我的生产服务器上发生,至少不是很频繁,但是更难说,因为延迟更高.这是不是不要担心?会造成什么?它发生在Cassini和我的本地IIS服务器在Windows 7 Home Ultimate 64位. 我添加了一个自定义属性来调用调用,OnAction / OnResult Executing和Executed之间的时间通常是毫秒级.我在操作方法周围使用了一个秒表(ZipController写入响应流并且不返回结果),并且时间同样总是很小,平均为1.5ms,总是在10ms以下. 在Fiddler头文件中我唯一真正的区别是X-AspNetMvc-Version头,所以我设置它不被追加,甚至删除X-AspNet-Version头无效.我尝试启用和禁用压缩,以及我能想到的其他一切.这是在我添加了自己的Cache-Control和ETag头后没有效果.有趣的是,即使在不发送身体的304未修改响应的情况下,也会发生500ms的延迟.有时两个文件会有延迟,一个500ms,另外1000ms. 直接文件: HTTP/1.1 200 OK Content-Type: application/x-javascript Last-Modified: Sun,29 May 2011 22:42:27 GMT Accept-Ranges: bytes ETag: "b57a84af511ecc1:0" Server: Microsoft-IIS/7.5 Date: Mon,30 May 2011 04:38:20 GMT Content-Length: 1336 RawFile动作: HTTP/1.1 200 OK Cache-Control: public Content-Type: application/x-javascript ETag: "CD9F383D0537373C6D2DC8F60D6519A6" Server: Microsoft-IIS/7.5 Date: Mon,30 May 2011 04:34:37 GMT Content-Length: 1336 根据IanT8的评论,我添加了一个HttpModule来跟踪开始/结束请求,以及添加日志调用作为我的动作方法的第一个和最后一个语句.长篇小说,两个请求同时进入,在执行第二个调用的动作方法之前,在第一个EndRequest之后发生500ms的延迟.这个延迟通常是499ms,一次是497ms,一次498ms,一次492ms. 2011-05-31 00:55:19.1874|INFO|20110531 00:55:19.196 BeginRequest: http://localhost:51042/Zip/Style?Path=~/Content/Site.css 2011-05-31 00:55:19.1874|INFO|20110531 00:55:19.197 BeginRequest: http://localhost:51042/Zip/Script?Path=~/Scripts/jquery-1.4.1.min.js|~/Scripts/debug/FBINFO.js 2011-05-31 00:55:19.2034|INFO|20110531 00:55:19.203 Style() Start 2011-05-31 00:55:19.2034|INFO|20110531 00:55:19.208 Style() End 2011-05-31 00:55:19.2034|INFO|20110531 00:55:19.212 EndRequest: http://localhost:51042/Zip/Style?Path=~/Content/Site.css 2011-05-31 00:55:19.7044|INFO|20110531 00:55:19.704 Script() Start 2011-05-31 00:55:19.7044|INFO|20110531 00:55:19.712 Script() End 2011-05-31 00:55:19.7044|INFO|20110531 00:55:19.713 EndRequest: http://localhost:51042/Zip/Script?Path=~/Scripts/jquery-1.4.1.min.js|~/Scripts/debug/FBINFO.js 现在真的很有趣的部分.我在HttpModule上创建了一个静态对象,并在EndRequest中的BeginRequest和Monitor.Exit中调用Monitor.Enter.延迟消失了. Chrome显示一个通话约15-20ms,另外一个通话需要30-40ms,因为它必须等待第一个通话结束,但是500ms的延迟已经消失.这个解决方案显然不是最佳的. 解决方法尝试禁用会话(SessionStateAttribute).(编辑:十堰站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- ASP.NET中XML转JSON的方法实例
- asp.net-mvc – 如何使输入字段仅允许使用EF和数据注释的数
- asp.net – 如何正确地大写希腊字在.NET?
- ASP.NET AJAX与ASP.NET MVC中的jQuery
- asp.net-mvc – 使用没有ORM的ASP.NET MVC
- asp.net-mvc – 在ASP.NET MVC中的LinkButton
- asp.net-mvc-3 – 在MVC Razor View中使用If语句
- asp.net-mvc – 不应加载引用程序集以执行
- asp.net – 如何使用resxresourcewriter写入所有三个值?
- asp.net – 在IHTTPHandler中以编程方式创建System.Web.UI.
- asp.net文件上传功能(单文件,多文件,自定义生成
- asp.net-mvc – asp.net mvc 4从控制器按钮调用方
- asp.net-mvc – 使用ASP.NET MVC进行项目组织的最
- asp.net – UserControl Viewstate在回发后丢失所
- 加快ASP.NET中的构建时间
- asp.net-core – 如何使用ASP.NET注册OData 5
- asp.net-mvc – 在EditorFor for child对象中使用
- asp.net-mvc – 将DropDownListFor绑定到字典
- ASP.NET SQL成员资格表
- asp.net-mvc – UpdateModel前缀 – ASP.NET MVC