使用离线资产功能构建网络应用

时间:2015-10-11 16:45:50

标签: javascript html5 web-applications offline

自从被要求为某人开发网络应用程序以来,我一直在考虑整个项目。前端需要的主要功能之一是离线操作的能力。起初,似乎将应用程序保持脱机状态很容易:

  1. 数据库中的重要信息可以复制到indexedDB中。
  2. 存储API可用于存储信息的花絮。
  3. 应用程序缓存可以处理离线存储资产。
  4. 在我做一些研究之前,我的想法似乎很可靠。不推荐使用应用程序缓存。显然,它有一些问题,并没有我想象的那么大。现在几乎不可能构建离线应用程序。通过研究和思考,我考虑了一些解决方案,但它们都存在某种缺陷。

    1. 我读过的一篇文章考虑使用localStorage来存储资产。我觉得这似乎没问题,因为应用程序将是单页面的,但CSS,JavaScript库和图像等资源会很大,虽然我可以压缩它们,但在localStorage中将它们存储为字符串似乎有些麻烦。 / p>

    2. MDN向我指出Service workers。这些似乎很好,但也过于复杂,他们的浏览器支持对我不起作用。

    3. 我考虑使用File API而不是localStorage来处理资产。问题是File API似乎只能用于用户交互,例如文件上传或拖放,这不是我需要的。我只需要在幕后使用JavaScript写入文件。但是,即使这样,我也会期望性能受到影响,特别是对于磁盘速度较慢的用户而言。

    4. 从我的解决方案中可以看出,其中一个主要因素是速度。我想这样的程序可以使用WebWorkers与主应用程序隔离,但即使这样,在localStorage中存储文件的感觉也不是很好。

      我不相信任何这些解决方案都是可行的,但我不能太确定。我应该如何为离线应用程序存储资产?理想情况下,我希望获得移动支持,但截至目前,我正在寻找一种解决方案:

      • 严重不会降低性能

      • 在语义上看起来不错,不会使用任何黑客行为或不良行为。

      我有哪些解决方案?以上任何一种解决方案都不错吗?

1 个答案:

答案 0 :(得分:2)

应用程序缓存只是在几周前才被Firefox推荐使用,但对我来说,他们似乎还有一个相当轻率的举动,因为他们还没有完成更换!请参阅https://www.fxsitecompat.com/en-US/docs/2015/application-cache-api-has-been-deprecated/https://bugzilla.mozilla.org/show_bug.cgi?id=1204581(特别是:"我们尚未提供服务工作人员,我们实施的没有服务工作者的Cache API对于替换appcache并不是很有用。& #34;

我估计至少要等几年才能从浏览器中删除AppCache,而且正如您所发现的那样,现在它是您跨浏览器兼容性的唯一真正选择。随着服务工作者变得更加成熟,可能会开发一个包装器以简化从AppCache到SW等效的过渡。 (听起来可能,至少:Is Service Worker intended to replace or coexist with Appcache?

这让我想到了下一点:对于离线数据库的东西,我推荐使用LocalForage,Mozilla的各种离线存储选项包装器。它将在用户的浏览器中选择最佳可用选项,为您节省决策的麻烦。我刚刚在项目上使用它,它使用起来非常简单。 https://mozilla.github.io/localForage/

速度方面,你可能会感到惊喜。即使使用LocalStorage(这是同步的,因此在运行时阻止执行),您可能永远不会注意到实际使用中的任何延迟。