Google App Engine appengine-web.xml配置文件允许您指定哪些文件是静态内容,哪些文件是资源。当你把你的应用程序上传到谷歌时,只有指定为静态的内容将被放置在静态内容服务器上,只有指定为资源的文件才会被推送到应用程序服务器(从https://developers.google.com/appengine/docs/java/config/appconfig转述)。
我有一些配置语句看起来像…
<static-files>
<include path="/**.html" />
<include path="/**.js" />
<include path="/**.css" />
<include path="/**.ico" />
<include path="/**.png" />
<include path="/**.jpg" />
<include path="/**.gif" />
</static-files>
<resource-files>
<include path="/**.ftl" />
</resource-files>
我的问题是……
当我将文件添加到静态文件列表时,是否意味着它们也不会作为资源文件发送?
当我将文件添加到资源文件列表时,是否意味着它们不会作为静态文件发送?
或者我需要在每个部分中提供一个完整的排除路径集吗?
这里的文档是模糊的(至少我没有看到任何显式的)。因为这只是一个节省空间的优化(和一些上传时间,我猜),它可能对我来说还不是太重要。但我似乎没有任何办法告诉内容是否做了或没有使它无论是静态或资源区域时,推到谷歌。
谢谢!
几点说明:
-
静态文件的要点是它们直接提供给最终用户。它们不是由GAE服务器提供服务,而是由专门的(内部)Google CDN服务器提供服务。这改善了加载时间。对于静态文件,你也可以声明' cache -control'头,甚至进一步改善加载时间(因为客户端缓存和下游缓存会缓存它)。
-
资源文件应该被应用程序代码使用,而不是直接服务。当然,它们仍然作为文件提供,但是它们由GAE服务器提供,因为它们需要位于GAE实例上。
-
WAR的公共部分中的文件默认被视为静态文件和资源文件。因此,如果您希望它们作为文件使用,则需要显式地排除它们。
-
/WEB-INF下的文件永远不会被服务,但可以通过代码访问。另外,放到代码目录(/src)中的文件可以被代码访问,但不会作为静态文件(它们将被复制到/WEB-INF/classes中)。