Azure网站

时间:2015-10-14 20:29:07

标签: asp.net asp.net-mvc azure azure-web-sites

我在Azure网站上遇到了这个有趣的问题。我的网站使用4个脚本文件和3个样式文件,每个文件都缩小了。它们不是那么大,最大的接近200 KB。网站已经开始。 Azure的Always On选项已打开。当我向WebApi调用数据时,它返回< 50ms。

Azure website scripts/styles loading time

当app重新加载时,它需要250毫秒才能从最小的脚本获取第一个字节,而其他人需要更多。初始Html在60毫秒内加载。脚本/样式被缓存,因此不会下载,但TTFB时间会破坏性能。这会重复每次重新加载。应用程序不包含任何复杂的配置,因此它应该比它运行得快得多。

可能导致此类问题的原因是什么?

6 个答案:

答案 0 :(得分:3)

虽然您的静态文件已缓存,但浏览器仍会使用if-modifies-since标头发出请求(结果为304)。

虽然它不需要下载实际内容,但仍需要等待RTT +服务器思考时间才能继续。

我建议两件事:

  1. 添加缓存控制和过期标题 - 在某些情况下有助于避免使用304(除非你点击F5,否则很有帮助)
  2. 使用适当的CDN - 例如Incapsula或其他,可以最大限度地减少RTT +思考时间。它还可用于轻松控制各种资源的缓存设置。
  3. 这里有更好的东西。

    祝你好运!

答案 1 :(得分:0)

我的猜测是Azures永远在 如果它像CloudFlare提供的那样工作,它基本上代理请求并尝试缓存它 根据Azure端的此缓存的确切实现,它可能会等待脚本输出完成以缓存它/验证缓存,然后将其传递给浏览器。

如果可能,您可能有机会检查缓存配置并始终禁用脚本。

答案 2 :(得分:0)

脚本和样式是静态文件,默认情况下是压缩的(您可以使用HTTP标头和#34; content-encoding":gzip进行检查),然后再发送给客户端。因此,TTFB包括网络延迟,浏览器HTTP通道调度和来自服务器的静态文件压缩时间。

另一方面,您的Web API数据是动态数据,默认情况下不会被压缩,因此其TTFB可能小于静态文件的TTFB。

但是,您不需要关闭静态压缩,否则TTFB会被最小化,但内容传输时间会延长。实际上,您不必担心TTFB,请参阅更多信息:https://blog.cloudflare.com/ttfb-time-to-first-byte-considered-meaningles/

答案 3 :(得分:0)

我完成了在Azure存储上存储文件并由Azure CDN提供服务。它提供高速响应并且无需任何成本。我在Gulp的Pre-build事件中将每个发布添加到blob中。

答案 4 :(得分:0)

来自here

  

如前所述,IIS 7缓存了静态的压缩版本   文件。因此,如果请求到达压缩的静态文件   版本已经在缓存中,不需要进行压缩   试。

     

但是如果缓存中没有压缩版本怎么办?请问IIS 7   然后立即压缩文件并将其放入缓存?答案   是的,但仅限于经常请求文件。不是   压缩只是不经常请求的文件,IIS 7保存   CPU使用率和缓存空间。

     

默认情况下,如果文件被认为是经常被请求的话   每10秒要求两次或更多次。

因此,为您的用户提供javascript文件的未压缩版本的原因是因为它不符合压缩的默认阈值;换句话说,javascript文件在10秒内没有被请求2次。

要控制这一点,我们必须在<serverRuntime>元素上更改一个属性,该元素控制压缩:frequentHitThreshold。为了在您的文件被请求一次时压缩文件,请将<serverRuntime>元素更改为如下所示:

<serverRuntime enabled="true" frequentHitThreshold="1" />

如果你有许多javascript文件正在服务并且你经常有用户,这会略微影响你的CPU性能,但是如果你的用户经常足以影响CPU压缩这些文件,那么它们已经被压缩和缓存了!

答案 5 :(得分:-9)

嗯......您的网站存在两个主要问题:

  1. 你正在使用AZURE - 性价比高的高价服务....不要问我为什么人们认为这是一项很好的服务

  2. 您将客户端文件与服务器文件并排存储..而服务器文件应存储在特定服务器中,客户端文件实际上可以从... 到处提供

  3. 所以 - 请使用CDN(或任何其他服务器)作为客户端文件(主要是css和js,你也可以考虑移动字体和图像)