代码之家  ›  专栏  ›  技术社区  ›  Jaka Jančar

HTML5离线应用中需要swapCache()吗?

  •  11
  • Jaka Jančar  · 技术社区  · 14 年前

    如果我不执行任何 updateready 事件处理程序,不调用 swapCache()

    如果没有,那为什么 swapCache()

    6 回复  |  直到 13 年前
        1
  •  12
  •   Johan    13 年前

    Swapcache确保对缓存资源的“后续”调用是从新缓存中获取的。 若要查看此操作,请尝试在 updateready事件中的swapcache调用(以便浏览器在特定的 时间)。请确保此图像尚未加载到页面的其他位置,因为这将 扭曲这个测试。 在浏览器中重新加载页面。 现在注释掉对swapcache的调用。 对清单文件进行更改并重新加载页面,从而重新加载所有资源。 再次刷新页面(以确保有新缓存中的版本)。 再次重新加载页面:现在可以看到图像的旧版本。 未调用swapcache,图像仍从旧缓存中获取。

    如果不在页面中动态加载资源,则swapcache无效。

    first没有任何效果,因为重新加载页面将从新缓存获得它。

        2
  •  7
  •   ggutenberg    14 年前

    swapCache() ,完成后将显示一条新消息,指示完成。

    不确定这是否回答了你的问题(为什么 需要 swapCache() 至少。

        3
  •  4
  •   James Newton    10 年前

    1. 你打电话来 location.reload() applicationCache.swapCache() 在这种情况下不需要。

    2. 您的用户将继续与您的页面交互,而无需重新加载。此交互将导致资源动态加载。为了便于讨论,让我们假设它是一个滚动图像,让我们假设您刚刚更新了这个滚动图像。没有 ,您的用户将继续看到旧的滚动图像。之后 应用程序缓存.swapCache() ,他/她将看到新的滚动图像。

    应用程序缓存.swapCache() 他说:“让页面保持加载时的样子,但是在页面要求时立即使用任何新资产。”。

        4
  •  3
  •   Andy Monis    14 年前

    此外,浏览器的实现随缓存何时更新而变化,我发现iPhone特别顽固。swapCache让我重新控制我的应用程序的更新方式,即我可以选择自动应用修补程序或让用户选择何时应用等。

        5
  •  2
  •   BobFromBris    14 年前

    当我重新加载它时,它似乎已被应用。我似乎不需要调用swapCache()。我已经准备好从应用程序调用它,但是到目前为止还没有注意到任何对更新过程的影响。

        6
  •  0
  •   duncanwilcox    13 年前

    swapCache 将从缓存清单中列出的前一组资源(加载正在运行的webapp时)切换到新的集。你这么做是为了回应 updateready

    这不应与加载单个资源混淆,通常的浏览器缓存策略仍适用于这些资源。换句话说,您将交换一组资源,但是单个资源需要它们自己的缓存管理,以确保在需要时重新加载它们。

    我还没有尝试过,但它似乎建议将代码构造为处理更新过程的“更新控制器”javascript文件,以及具有已知入口点的版本化文件名(或URL)的javascript源。