为啥我在使用本地 IIS 时等待 ttfb 的时间这么长?

Posted

技术标签:

【中文标题】为啥我在使用本地 IIS 时等待 ttfb 的时间这么长?【英文标题】:Why are my waiting times for ttfb so long when using Local IIS?为什么我在使用本地 IIS 时等待 ttfb 的时间这么长? 【发布时间】:2018-03-03 21:23:55 【问题描述】:

尽管整个服务器的性能测试始终返回约 50 毫秒的结果,但在我的 c# 代码中使用 angularjs (1.4) 或 jquery (1.9.1) 对控制器方法的任何调用都会产生不一致的 ttfb 时间。有时他们会在不到 100 毫秒的时间内成功返回数据,而其他时候 ttfb 会达到 1.5 秒以上。我还单独测试了通过我的浏览器调用控制器方法(缓存被禁用),返回的数据很快(不到 50 毫秒)。

调用我的控制器:

$http.get(baseUrl + "Home/AnnouncementsPartial",  params:  startIndex: 
$scope.startIndex, numberMessages: $scope.numberMessages, resetSearch: reset 
 ).success(function (data)     

瀑布演示:

我在 localhost 上运行,因此知道我的控制器方法在 ~50 毫秒内返回数据,我希望 ttfb 时间至少低于 100 毫秒。非常感谢任何帮助

【问题讨论】:

如果你在调试中运行,那总是会更慢。另一个考虑因素是距上次活动的时间。如果您让它一段时间不活动,IIS 将关闭主机进程,以便在下一个请求时再次启动它 我在发布和调试上都运行过。然而,他们都返回了相似的等待时间。是的,我注意到 IIS 会这样做,但是即使在最近的请求之后它也有很长的 ttfb 内容文件配置了什么缓存策略?您是否启用了压缩(静态或动态)? 如果你有很多连接,浏览器通常一次只会运行 2 个并发连接。但是,如果这只是加载文本,将其包含在隐藏块中的初始 html 中会不会更有意义?这样就没有对服务器的动态调用,因为它都是在初始放置中预加载的。 我没有启用压缩。也忘了提,我做缓存服务器端。缓存的条件是数据库没有更新或自上次缓存以来还没有过去 5 天。我已经测试了服务器端缓存,它按预期工作 【参考方案1】:

这个问题的答案是 DiskJunky 在 cmets 部分中提到的,Web 浏览器可以在一个连接中处理的最大并发请求数,直到它开始按顺序生成新请求。对于这种情况,我的代码结构略有不同,因此优先级较高的请求首先执行,因此彼此同时运行。

【讨论】:

以上是关于为啥我在使用本地 IIS 时等待 ttfb 的时间这么长?的主要内容,如果未能解决你的问题,请参考以下文章

为啥 IIS 返回空响应?

为啥在 IIS7 中调试会一直超时?

当我使用 for 循环时,为啥我的代码没有在 forEach 中等待? [复制]

为啥在 IIS 上使用 open_basedir 和 PHP 作为 FastCGI?

改进 Nuxt TTFB

为啥我的 mvc 项目重定向到默认的 403 错误页面,而不是我重定向到的页面,而不是在本地的 IIS 上?