草庐IT

php - 在 HTML5 appcache 中缓存 php 页面

coder 2023-08-12 原文

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

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

这是我的 .appcache list 文件内容

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. 我该如何解决这个问题?

编辑

正如我通过搜索 SO 和 Google 了解到的那样,实现此目的的一种方法是使用 AJAX 加载动态内容。但我想知道是否可以仅使用 list 文件本身来做到这一点。

最佳答案

使用 FALLBACK 怎么样?

FALLBACK

The FALLBACK section tells the browser what to serve when the user tries to access an uncached resource while offline. Because of this, it looks a bit different than CACHE and NETWORK. It contains two values per line, separated by a space. The first value is the request URI to match, and the second is the resource sent upon matching. It caches the resource on the right for offline use, so this should be an explicit path. (http://html5doctor.com/go-offline-with-application-cache/)

FALLBACK:
/main.php /static.php

使用此配置,除非用户离线,否则将提供对/main.php 的请求,在这种情况下,用户将看到/static.php 的最后缓存版本。

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

# 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 和应用程序缓存,这可能会导致重新加载所有 Assets - 从而违背了缓存的意图。

关于php - 在 HTML5 appcache 中缓存 php 页面,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31586253/

有关php - 在 HTML5 appcache 中缓存 php 页面的更多相关文章

  1. ruby - 使用 ruby​​ 将 HTML 转换为纯文本并维护结构/格式 - 2

    我想将html转换为纯文本。不过,我不想只删除标签,我想智能地保留尽可能多的格式。为插入换行符标签,检测段落并格式化它们等。输入非常简单,通常是格式良好的html(不是整个文档,只是一堆内容,通常没有anchor或图像)。我可以将几个正则表达式放在一起,让我达到80%,但我认为可能有一些现有的解决方案更智能。 最佳答案 首先,不要尝试为此使用正则表达式。很有可能你会想出一个脆弱/脆弱的解决方案,它会随着HTML的变化而崩溃,或者很难管理和维护。您可以使用Nokogiri快速解析HTML并提取文本:require'nokogiri'h

  2. ruby-on-rails - Rails HTML 请求渲染 JSON - 2

    在我的Controller中,我通过以下方式在我的index方法中支持HTML和JSON:respond_todo|format|format.htmlformat.json{renderjson:@user}end在浏览器中拉起它时,它会自然地以HTML呈现。但是,当我对/user资源进行内容类型为application/json的curl调用时(因为它是索引方法),我仍然将HTML作为响应。如何获取JSON作为响应?我还需要说明什么? 最佳答案 您应该将.json附加到请求的url,提供的格式在routes.rb的路径中定义。这

  3. ruby-on-rails - 使用 Sublime Text 3 突出显示 HTML 背景语法中的 ERB? - 2

    所以我在关注Railscast,我注意到在html.erb文件中,ruby代码有一个微弱的背景高亮效果,以区别于其他代码HTML文档。我知道Ryan使用TextMate。我正在使用SublimeText3。我怎样才能达到同样的效果?谢谢! 最佳答案 为SublimeText安装ERB包。假设您安装了SublimeText包管理器*,只需点击cmd+shift+P即可获得命令菜单,然后键入installpackage并选择PackageControl:InstallPackage获取包管理器菜单。在该菜单中,键入ERB并在看到包时选择

  4. ruby - 如何在 Ubuntu 中清除 Ruby Phusion Passenger 的缓存? - 2

    我试过重新启动apache,缓存的页面仍然出现,所以一定有一个文件夹在某个地方。我没有“公共(public)/缓存”,那么我还应该查看哪些其他地方?是否有一个URL标志也可以触发此效果? 最佳答案 您需要触摸一个文件才能清除phusion,例如:touch/webapps/mycook/tmp/restart.txt参见docs 关于ruby-如何在Ubuntu中清除RubyPhusionPassenger的缓存?,我们在StackOverflow上找到一个类似的问题:

  5. ruby-on-rails - Ruby url 到 html 链接转换 - 2

    我正在使用Rails构建一个简单的聊天应用程序。当用户输入url时,我希望将其输出为html链接(即“url”)。我想知道在Ruby中是否有任何库或众所周知的方法可以做到这一点。如果没有,我有一些不错的正则表达式示例代码可以使用... 最佳答案 查看auto_linkRails提供的辅助方法。这会将所有URL和电子邮件地址变成可点击的链接(htmlanchor标记)。这是文档中的代码示例。auto_link("Gotohttp://www.rubyonrails.organdsayhellotodavid@loudthinking.

  6. ruby-on-rails - Ruby on Rails 计数器缓存错误 - 2

    尝试在我的RoR应用程序中实现计数器缓存列时出现错误Unknownkey(s):counter_cache。我在这个问题中实现了模型关联:Modelassociationquestion这是我的迁移:classAddVideoVotesCountToVideos0Video.reset_column_informationVideo.find(:all).eachdo|p|p.update_attributes:videos_votes_count,p.video_votes.lengthendenddefself.downremove_column:videos,:video_vot

  7. ruby-on-rails - capybara ::ElementNotFound:无法找到 xpath "/html" - 2

    我正在学习http://ruby.railstutorial.org/chapters/static-pages上的RubyonRails教程并遇到以下错误StaticPagesHomepageshouldhavethecontent'SampleApp'Failure/Error:page.shouldhave_content('SampleApp')Capybara::ElementNotFound:Unabletofindxpath"/html"#(eval):2:in`text'#./spec/requests/static_pages_spec.rb:7:in`(root)'

  8. ruby - 如何使用 Ruby 将 CSV 文件读入 HTML 表格? - 2

    我正在尝试将一个简单的CSV文件读入HTML表格以在浏览器中显示,但我遇到了麻烦。这就是我正在尝试的:Controller:defshow@csv=CSV.open("file.csv",:headers=>true)end查看:输出:NameStartDateEndDateQuantityPostalCode基本上我只获取标题,而不会读取和呈现CSV正文。 最佳答案 这最终成为最终解决方案:Controller:defshow#OpenaCSVfile,andthenreaditintoaCSV::Tableobjectforda

  9. ruby - 在 ASP 页面上 Mechanize 中断 - 2

    require'mechanize'agent=Mechanize.newlogin=agent.get('http://www.schoolnet.ch/DE/HomeDE.htm')agent.clicklogin.link_withtext:/Login/然后我得到Mechanize::UnsupportedSchemeError。 最佳答案 Mechanize不支持javascript但您可以将搜索字段添加到表单并为其分配搜索词并使用mechanize提交表单form=page.forms.firstform.add_fie

  10. ruby - 如何使用 Nokogiri 解析纯 HTML 表格? - 2

    我想用Nokogiri解析HTML页面。页面的一部分有一个表,它没有使用任何特定的ID。是否可以提取如下内容:Today,3,455,34Today,1,1300,3664Today,10,100000,3444,Yesterday,3454,5656,3Yesterday,3545,1000,10Yesterday,3411,36223,15来自这个HTML:TodayYesterdayQntySizeLengthLengthSizeQnty345534345456563113003664354510001010100000344434113622315

随机推荐