在HTML5 appcache中缓存php页面

时间:2015-07-23 11:38:28

标签: php html5 offline html5-appcache cache-manifest

我正在开发一个离线应用程序,它也有一组.php页面。目前我已将这些php文件放在.appcache清单文件中,并且工作正常。但问题是,即使我在线,当我尝试访问php页面时,它会加载缓存版本。我更喜欢的是这样的功能,

  • 如果在线 - 连接到服务器并加载最新信息,并用新信息覆盖缓存的信息。
  • 如果离线 - 显示上次更新的静态html页面。

这是我的.appcache清单文件内容

CACHE MANIFEST
#2
taskmanager.php
public/css/bootstrap.css.map
public/css/bootstrap.min.css
public/css/bootstrap-theme.css.map
public/css/bootstrap-theme.min.css
public/css/main.css
public/css/task-manager.css
public/js/app.js
public/js/taskmanager.js
public/js/offlink.js
public/js/jquery-2.1.4.js
public/js/bootstrap.min.js

NETWORK:
*
http://*

taskmanager.php所做的是从数据库中读取任务并显示它。当我像上面一样缓存它时,它将始终显示第一次加载时的任务列表。即使我在线,它也不会调用数据库并获取新条目。而是从缓存加载。所以,我的解决方案是将它放在FALLBACK部分中,如第一个答案所述。 即使我将taskmanager.php文件放在FALLBACK部分下面,如下所示,

FALLBACK
taskmanager.php static_taskmanager.php

现在,如果我有互联网连接,taskmanager.php将运行并将显示最新任务。但是我想以这样的方式创建static_taskmanager,它将与那些最新的任务集同步。这意味着,当用户离线时,static_taskmanager.php将显示当用户在线时taskmanager.php返回的最新任务列表。但目前它作为一个完整的静态页面。

  1. 可以这样做吗?
  2. 如何解决此问题?
  3. 修改

    正如我通过搜索SO和Google所理解的,实现此目的的一种方法是使用AJAX加载动态内容。但我想知道只使用清单文件本身就可以做到。

1 个答案:

答案 0 :(得分:1)

如何使用FALLBACK?

  

FALLBACK

     

FALLBACK部分告诉浏览器当用户提供什么时   尝试在脱机时访问未缓存的资源。因为这,   它看起来与CACHE和NETWORK略有不同。它包含两个   每行的值,以空格分隔。第一个值是请求   要匹配的URI,第二个是匹配时发送的资源。它   将资源缓存在右侧以供离线使用,因此这应该是一个   显性路径。 (http://html5doctor.com/go-offline-with-application-cache/

FALLBACK:
/main.php /static.php

使用此配置,除非用户处于脱机状态,否则将提供对/main.php的请求,在这种情况下,用户将看到/static.php的最后一个缓存版本。

请记住,更新服务器上的资产不会触发缓存更新。您必须修改清单文件。在这种情况下,您可能希望在创建新版本的static.php时使用版本或时间戳注释更新清单。

# Generated: 2015-07-23 10:34a

后来的注释

在这种情况下,我建议从缓存中删除main.php,或者使用静态回退来让用户知道他们正在查看较旧的内容。原因是即使static.php被更新,如果用户离线并且没有获得该更新,他们仍会看到旧内容。

如果您发现性能问题并希望减少服务器上的负载,可以使用wget创建一个静态版本的main.php,如下所示:

wget http://example.com/main.php -O main.html

这会将页面内容存储为HTML。作为一个cron作业运行,它可以每五分钟左右刷新一次。

另一种方法是每次都更新static.php和appcache,这可能会导致重新加载所有资产 - 从而破坏了缓存的意图。