gpt4 book ai didi

gwt - GWT ClientBundle 缓存如何工作?

转载 作者:行者123 更新时间:2023-12-02 21:25:13 26 4
gpt4 key购买 nike

我试图更好地理解 GWT ClientBundle 和缓存的使用。

例如,如果我有一个大型文本文件,我想向我的客户提供该文件,我可以使用

public interface MyResources extends ClientBundle {
public static final MyResources INSTANCE = GWT.create(MyResources.class);
@Source("myText.txt")
public TextResource myText();
}
//-- then later to use the text
String text = MyResources.INSTANCE.myText().getText();

这是否意味着客户端第一次运行应用程序时将从服务器下载文件“myText.txt”,然后该文件将存储在浏览器的缓存中,以便将来使用该应用程序时,文件不需要下载吗?

如果是这样,如果我更改“myText.txt”会发生什么,应用程序是否知道获取新版本?

最后,如果文件确实存储在缓存中,那么这与 HTML5 中的本地存储有何不同?

谢谢。

最佳答案

  • 正如 Daniel Kurka 已经提到的,资源可以内联到 js 文件(*.cache.* 文件)中,其中已编译的 GWT 代码的其余部分位于该文件中。
  • 客户端 bundle 中的所有资源不会发生内联。例如。大图像永远不会内联,也可以使用 @ImageOptions.preventInlined() 来阻止,并且ExternalTextResources 不会发生这种情况。

这两种情况的共同点是,结果将位于 *.cache.* 文件中,其唯一名称会在源文件内容发生更改时自动更改(您必须不过请重新编译 GWT 应用程序!)

这允许服务器通过 appropriate caching HTTP headers 传递这些文件(你必须自己设置!)对于客户端来说,这意味着它不仅能够缓存内容(无论如何,即使没有设置这些 header ,它也会这样做),而且它甚至可以跳过询问服务器是否存在更新版本。

ClientBundles 的一大优点是文件名会自动更改。最大的缺点是,当资源发生更改时,您必须重新编译 GWT 应用程序。如果您不希望这样,那么最好使用其他方法来加载文件:您仍然可以让浏览器缓存您喜欢的任何文件(通过设置 HTTP header ),但是您必须小心当内容更改时,手动给它们一个新名称。

关于gwt - GWT ClientBundle 缓存如何工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12652371/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com