App Engine需要更长时间(> 1秒)来提供静态JS而不是静态CSS

时间:2013-11-01 17:27:21

标签: google-app-engine

(问题编辑b / c我已经意识到它涉及文件类型)

此文件为20kb。它一直采取>服务1秒钟。

http://www.adrenalinemobility.com/js/ss-symbolicons.js

以下是带有.css的相同文件,因为它的扩展名为:

http://www.adrenalinemobility.com/js/ss-symbolicons.css

它的速度提高了近1秒。

这是我的app.yaml:

application: adrenaline-website
version: 1
api_version: 1
runtime: python27
threadsafe: true

libraries:
- name: jinja2
  version: latest

handlers:
- url: /favicon\.ico
  static_files: assets/favicon.ico
  upload: assets/favicon\.ico

- url: /css
  static_dir: assets/css

- url: /img
  static_dir: assets/img

- url: /js
  static_dir: assets/js

- url: /.*
  script: web.APP

我也试过这个static_files行(在/ js处理程序之前),而且它也很慢:

- url: /js/ss-symbolicons.js
  static_files: assets/js/ss-symbolicons.js
  upload: assets/js/ss-symbolicons.js

我观察到的方式:

  • Chrome,Firefox(均在Linux上) - 来自硅谷的DSL连接
  • 来自那台机器的wget,curl等。
  • 从伊利诺伊大学的高速服务器远程维护和卷曲
  • 远程网络测试服务,如网页测试(见下文):

这是一个网页测试瀑布图,说明了这个问题 - 请注意,一个文件有一个巨大的TTFB:http://www.webpagetest.org/result/131101_ZQ_ZGQ/1/details/

如果我手动将mime_type设置为text,那么它会很快。 application/javascriptapplication/x-javascripttext/javascript都很慢。目前,如果您想进行测试,这些文件的服务没有手动指定的mime类型。

更多信息,正如jchu注意到的那样:

慢速版本适用于:Content-Length: 19973,快速版本适用于:Transfer-Encoding: chunked

更多细节:

我通常会得到服务器74.125.28.121。 reddit上的某个人获得了服务器173.194.71.121,它们之间甚至可以提供服务速度。那么它可能依赖于服务器/位置?

Another post about this issue

Here is a pastebin with full curl logs of requests for both files

Here is another pastebin with just the timing information from ten requests on each file in a tight loop

2 个答案:

答案 0 :(得分:3)

将mime_type:text添加到JavaScript静态资源。

需要研究假设mime_type是什么,对于文本和其他mime类型正在做什么聪明的技巧......

答案 1 :(得分:1)

我一直看到同样的行为。

GAE对这些javascript文件有一些奇怪的边缘缓存行为。在第4次或第五次连续请求之后,响应时间显着改善(gzip压缩内容的某种类型的边缘缓存开始)。在我的实验中,它从1.2秒左右开始 - > 190ms

我已经能够在3个GAE应用程序中一致地重现这一点。 如果您使用Chrome,则可以转到DevTools设置并禁用缓存(当DevTools打开时)。重新加载页面几次会使您的javascript传输时间缩短到合理的数量。

谷歌的边缘缓存可能有一些逻辑,它确定它不会打扰缓存gzipped js文件,直到它们被频繁请求。这似乎鼓励您编写一个不断下载js文件的脚本,以确保它们下载速度快几百毫秒。我怀疑边缘缓存足够智能,但一次只能缓存一个区域。