ExtJs 应用程序缓存警告

Mar*_*ner 5 extjs html5-appcache

我有一个用 ExtJs 编写的单页应用程序。我没有使用应用程序缓存,但是当应用程序启动时,我在 Chrome 中看到以下警告:

[弃用] 应用缓存 API 已弃用,将于 2020 年 4 月左右在 M82 中移除。有关详细信息,请参阅https://www.chromestatus.com/features/6192449487634432

这个问题已经在 Sencha 论坛(这里这里)上多次发布,可以追溯到几年前。唯一的回应来自一个非煎茶海报,说它“应该没问题”。不完全是您希望的答案。

有谁知道如何摆脱这个警告?考虑到我没有明确使用应用程序缓存,听起来好像 ExtJs 可能在后台用它做一些事情。这就是我所关心的。

Sak*_*aki 6

您可以appCache关闭app.json

/**
  * Settings specific to production builds.
  */
"production": {
    "output": {
        "appCache": {
            "enable": true, // <- change this to false and rebuild
            "path": "cache.appcache"
        }
    },
Run Code Online (Sandbox Code Playgroud)


小智 5

我决定调查这个问题,因为我发现这个问题很有趣。

简短的回答是它真的不会以任何方式影响您的应用程序,除非您明确使用applicationCache.

细节:

即使您只是尝试调用该window.applicationCache属性,也会出现警告

是什么applicationCache用的?它缓存静态文件(js 和 css)以使您的应用程序脱机工作。该技术已被 ServiceWorker 取代。使用 applicationCache 缓存的工作原理如下(简短描述,完整在 MDN 上):

  1. 您创建了一个专门编写的清单...
  2. 并在页面上标签的manifest属性中设置它的路径 html
  3. 之后,该清单中的文件将保存在 applicationCache 中

在 Sencha 应用程序中,这显示为脚本https://docs.sencha.com/extjs/6.2.0/classic/src/Microloader.js.html注入您的页面的结果。

在这个文件中,一个在 applicationCache 上构建的包装器和创建侦听器被分配给applicationCache. 这些侦听器的处理程序更改包装器内的状态并调用该notifyUpdateReady方法,该方法又调用全局appupdate事件。同时,所有这些代码都是抽象的,对applicationCache的整体运行几乎没有影响。

如果有疑问,您可以模拟禁用 applicationCache。在checkAllUpdates方法之前设置调试器if (_cache){...并覆盖 _cache ( _cache = undefined;)。然后将控制权返回给浏览器。什么都不会发生。

我使用 SenchaFiddle 示例测试了所有这些。那里根本没有使用缓存。它没有清单

我重复这个结论——如果你没有明确使用 applicationCache——你就不用担心了。您可以通过查看页面代码和查找清单连接来检查它是否被您使用。也可以在控制台执行以下代码

 window.applicationCache.status
Run Code Online (Sandbox Code Playgroud)

如果结果为 0,则缓存未在您的应用程序中初始化