我正在开发一个离线应用程序,它也有一组.php页面。目前,我已经把这些php文件在一个。appcache清单文件,它工作得很好。但问题是,即使我在线,当我试图访问一个php页面,它加载缓存的版本。我更喜欢这样的功能,
- 如果在线-连接到服务器并加载最新的信息,并用新的信息覆盖缓存的信息。
- 如果离线-显示最近更新的静态html页面
这是我的。appcache manifest文件内容
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在用户在线时返回的最新任务列表)。但目前它作为一个完整的静态页面。
- 这是可能的吗?
- 如何解决这个问题?
编辑
正如我通过搜索SO和Google所理解的那样,实现这一目标的一种方法是使用AJAX加载动态内容。但是我想知道是否可以只使用清单文件本身。
使用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
<标题>后指出h1> 这种情况下,我建议从缓存中删除main.php,或者有一个静态回退,让用户知道他们正在查看旧的内容。原因是,即使static.php更新了,如果用户离线并且没有得到更新,他们仍然会看到旧的内容。
如果您看到性能问题并希望减少服务器上的负载,您可以使用wget创建main.php的静态版本,如下所示:
wget http://example.com/main.php -O main.html
这将把页面内容存储为HTML。作为cron作业运行,它可以每五分钟左右刷新一次。
另一种方法是每次更新static.php和appcache,这可能会导致所有的资产被重新加载,从而违背了缓存的意图。
标题>