我在Azure网站上遇到了这个有趣的问题。我的网站使用4个脚本文件和3个样式文件,每个文件都缩小了。它们不是那么大,最大的接近200 KB。网站已经开始。 Azure的Always On选项已打开。当我向WebApi调用数据时,它返回< 50ms。
当app重新加载时,它需要250毫秒才能从最小的脚本获取第一个字节,而其他人需要更多。初始Html在60毫秒内加载。脚本/样式被缓存,因此不会下载,但TTFB时间会破坏性能。这会重复每次重新加载。应用程序不包含任何复杂的配置,因此它应该比它运行得快得多。
可能导致此类问题的原因是什么?
答案 0 :(得分:3)
虽然您的静态文件已缓存,但浏览器仍会使用if-modifies-since标头发出请求(结果为304)。
虽然它不需要下载实际内容,但仍需要等待RTT +服务器思考时间才能继续。
我建议两件事:
这里有更好的东西。
祝你好运!
答案 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)
嗯......您的网站存在两个主要问题:
你正在使用AZURE - 性价比高的高价服务....不要问我为什么人们认为这是一项很好的服务
您将客户端文件与服务器文件并排存储..而服务器文件应存储在特定服务器中,客户端文件实际上可以从... 到处提供
所以 - 请使用CDN(或任何其他服务器)作为客户端文件(主要是css和js,你也可以考虑移动字体和图像)