通过Chrome

时间:2018-03-03 16:35:34

标签: performance google-chrome asp.net-web-api postman fiddler

我有一个公开所有动词的ASP.NET Web API - 方法基本上是空的。

要运行项目,您可以这样做:从VS 2017启动一个新的asp.net Web项目 - 然后选择Web API。创建项目后,执行清理然后重建。打开" ValuesController",在PUT方法中放置一个断点,然后运行你的项目。

以下是API的代码(控制器代码 - 我在PUT方法中添加了一行):

public class ValuesController : ApiController
{
    // GET api/values
    public IEnumerable<string> Get()
    {
        return new string[] { "value1", "value2" };
    }

    // GET api/values/5
    public string Get(int id)
    {
        return "value";
    }

    // POST api/values
    public void Post([FromBody]string value)
    {
    }

    // PUT api/values/5
    public void Put(int id, [FromBody]string value)
    {
        var x = "value: " + value;
    }

    // DELETE api/values/5
    public void Delete(int id)
    {
    }
}

对于其他HTTP方法(GET,POST,DELETE),我没有遇到相同的问题或时差(或者它们是非常微不足道的)。

获取时间数据:

GET timing data

POST时间数据:

POST timing data

删除时间数据:

DELETE timing data

通过 IE 输出时序数据:

enter image description here

现在 - 这是通过 CHROME

的PUT时序数据

PUT timing data

我也尝试将我的API放在服务器上 - 因此调用API会调用http://test-server-01/api/values/1等 - 但PUT的相同问题仍然存在。

我的问题:有人可以解释发生了什么吗?与其他VERBS相比,为什么PUT的调用速度如此之慢?这也只发生在Chrome中 - 我尝试在IE中进行相同的调用,从而提高性能。

[增订]

我使用Chrome Dev Tools进行了一些时间收集,我注意到大部分延迟发生在慢速到第一个字节(TTFB)。以下是我的一个时间数据的屏幕截图:

enter image description here

[更新]

以下是IE与Chrome之间没有Fiddler的更多时间数据。使用相应的开发人员工具捕获计时。

enter image description here

enter image description here

上面的时间几乎是IE和Chrome中多个PUT调用的平均值。 Chrome总是~8秒,IE约为4秒。

相比之下,在IE和Chrome中发布POST会导致它们之间的差异微不足道 - 它们都会导致大约20ms到50ms(尽管Chrome几乎总是更快)。

在结果中进行DELETE调用也类似于POST,范围从~10ms到~18ms(Chrome几乎总是更快)。

[更新更多]

我尝试创建MCVE - 但我无法在其他计算机上复制该问题。我把解决方案放在另一台笔记本电脑上,使用VS 2017运行它,通过Chrome点击localhost - 没有延迟/性能差的PUT。我收集的时间数据与POST或DELETE相同或类似。

所以看起来这个问题可能与我的工作机器有关。可能是网络问题?代理?但如果是这样的话 - 不应该所有的电话,包括POST或DELETE或GET都被延迟或者性能不佳吗?或者,为什么IE在PUT上表现更好 - 如果问题与网络/代理相关?

[更新更多]

我使用bash通过curl运行PUT调用 - 非常快,没有任何延迟来自同一台机器,给了我8秒钟的CHROME。

enter image description here

0 个答案:

没有答案