这基本上与这个尚未回答的SO问题完全相同:离线Web应用程序不在Firefox上缓存,但在Chrome上可以
我遇到了同样的问题,我将提供更多信息,因为它可能有助于某人试图找出试图实现缓存清单的神秘奥秘和陷阱.
问题:点击页面重新加载/刷新,页面应该从脱机缓存重新加载,但事实并非如此.
它在Chrome 23中工作正常:当我从互联网断开连接并刷新页面时,它加载正常,控制台显示Application Cache NoUpdate事件.
但是,Firefox 15.0.1向我展示了我的404页面.
故障排除(Firefox):转到Firebug并单击DOM,然后单击applicationCache.状态显示0,表示未缓存(页面尚未脱机存储).
故障排除(Firefox):转到Firefox选项 - >高级,查看脱机Web内容和用户数据.它显示我的域使用1.4MB数据供离线使用.(这是检查您的页面是否已被缓存的好地方).
故障排除(Firefox):打开一个新选项卡,然后转到about:cache.在这里,您应该看到脱机缓存设备的标题.在这里,您可以看到缓存目录,它是保存脱机缓存文件的位置.如果单击列表缓存条目,您将在脱机缓存清单中看到这些文件.
这里有两件事我觉得很奇怪:1)当我点击列表中的任何文件时,它会转到一个空白页面,上面写着"缓存条目信息您选择的缓存条目不可用".但是,文件确实存在并且在缓存目录中不是空白2)尽管列出了缓存清单中的所有文件,但我在此处未列出我正在呼叫的页面(在Chrome DevTools中,它在清单中显示为主:即使它未在缓存清单文件中明确列出,它也会自动缓存.
这是我在线时看到的内容:使用冷(空)缓存,当我加载页面时,控制台会显示检查,下载,进度和缓存事件,但缓存状态未缓存.基本上,下载缓存文件,但无法访问它们.Firebug DOM applicationCache说:离线缓存中的0项(这与about:cache和Options - > Advanced中显示的内容相矛盾).状态为1,表示空闲.当我在线查看Firebug中的Net选项卡时,它会显示对200 OK响应的页面的GET请求.Expires设置显示1969年12月31日星期三,我认为这意味着将始终提取页面.其他文件显示304 Not Modified响应,这意味着它们是从浏览器缓存加载的,而不是脱机缓存(Chrome对这些文件的类似响应是200 OK(来自缓存),这意味着它们是从离线加载的缓存,而不是浏览器缓存).
当我离线时:使用"未缓存"缓存,GET请求失败,并加载具有200 OK(BFCache)响应的脱机回退404页面.
似乎已下载脱机缓存,因为它实际存在于磁盘上,并且控制台中显示了进度事件,但Firefox从未触发缓存事件,因此某些资源未成功下载.这些文件都是png,js或php格式,所以没有疯狂的文件格式.Chrome会将完全相同的文件下载到缓存中而不会出现问题.我也尝试过移动版Safari,它成功地从离线缓存重新加载页面.
Firefox没有缓存某些文件类型是否存在任何已知问题?我在我的一些文件上使用.html.php扩展名.我还使用php文件动态生成清单,因此它只获取存在的文件,并将它们哈希以检测更改并更新清单.
后续步骤:我将尝试一个简单的清单,看看我是否能让它工作,然后逐个添加文件,看看哪个文件触发了错误.也许Firefox不喜欢我动态生成缓存清单而不是手动更新静态文件的事实?
我已经了解了很多关于缓存清单的神秘错综复杂的知识,但我更像是一个黑客而不是计算机专家.还有其他人在使用Firefox时遇到过这种怪癖吗?
页面的开头:
<!DOCTYPE html>
<html manifest="/directory/manifest.php">
Run Code Online (Sandbox Code Playgroud)
然后manifest.php就是
header('Content-Type: text/cache-manifest');
echo "CACHE MANIFEST\n";
Run Code Online (Sandbox Code Playgroud)
它使用RecursiveDirectoryIterator来获取目录中的所有文件(默认情况下包含的缓存本身除外).
firefox offline application-cache offline-caching html5-appcache
对于HTML5网络存储和应用程序缓存,我很慢但肯定会疯狂.
这是我的例子:http: //daviddarx.com/stuffs/work/custom/54/
缓存清单在http://manifest-validator.com/上有效并经过测试:http://daviddarx.com/stuffs/work/custom/54/cache.manifest
由于它不起作用,我采用了一个非常简单的工作示例,然后尝试逐步添加我的部分代码和数据,添加少量,然后我再次测试它.
当我从简单的例子开始,一切都很好.如果我将我的iPhone置于平面模式,我在启动网站时会收到一条离线消息,但随后我可以查看结果.
当我添加一些我的资产(页面中的HTML代码,1-2个图像等)时,它仍然有效.
如果我然后添加更多的资源(例如,css和所有关联的图像),问题就开始了...如果我进入平面模式然后打开页面,我会得到正常的消息(我得到的是正确的消息)工作),然后另一条消息,要求我重试或取消.如果我取消,该网站只是不显示和应用程序关闭,如果我按下重试按钮,我会一次又一次得到相同的消息....
我真的不知道该怎么做.每次我都会在测试之前验证我的缓存清单,每次我更改URL以确保所有内容都重置.
这是否与缓存文件的重量有关?是否有大小或文件的限制?
另一句话:在测试之前,我总是在计算机的控制台中检查我的页面,以确保它不是一个明显的问题.实际上,每次尝试都会在桌面浏览器上获得成功,并加载所有资产.
你知道那可能来自哪里吗?
编辑:我再次做了很多测试,仍然无法让它工作.
以下是情况的摘要:
2.这是我的缓存清单:http://daviddarx.com/stuffs/work/custom/61/manifest.appcache 根据http://manifest-validator.com/完全有效.
3.当我在chrome(桌面)上加载页面并在控制台显示时,一切正常.所有元素都被缓存,如果我刷新,缓存就可以了.
4.当我在桌面chrome上加载页面并查看网络面板时,我可以看到所有内容都是从缓存中加载的.没有丢失的文件.
5.当我从任何互联网断开我的台式电脑时,它正在工作!如果我在没有任何连接的情况下使用chrome浏览网站,我可以显示页面,一切都很好,我希望它可以在我的Iphone上.
6.当我第一次使用我的iPhone并访问网站时,一切正常.移动safari控制台中没有任何错误.如果我打开"平面模式"并返回safari,我可以显示我所在的页面(我之前无法实现).但是,如果我尝试更改页面,它只是警告我"无法打开页面",然后取消请求.我只能留在当前页面上.
在我的台式电脑上,一切都很完美,但它只是在我的Iphone上工作.
你有什么主意吗?你能在桌面和iPhone浏览器上试试吗?
我目前有一个应用程序,每天有超过20,000个用户受到攻击,他们主要看一个数据表.此数据表填充了大约20行,但是从数据库中的"数据表"中提取,表中包含200,000-600,000条信息记录.编辑:这20行是"动态的",如果用户通过文本框输入任何信息,则会更改.
我目前还持有用户数据和个人资料数据.
每次显示数据表时,我目前正在进行大约4次回调,而我无法将其调低至1次.
问:我想知道我是否能够每隔5秒用200,000-600,000行数据填充应用程序状态,它是否真的可以加快系统速度?编辑:对用户或任何其他用户输入的动态行执行操作时,需要经常刷新内容.
问题2:我实际上可以在应用程序缓存中保留多少并且仍然可以更快地使用它?
编辑:有超过20,000个用户访问这200,000行,我需要缓存所有这些行,或者至少我认为是最佳实践.当用户访问我的网站时,这是他们查看的主要页面之一,每次访问可能会回到2-5次.
编辑:用户确实看到一组20行,这些行可能与用户看到的任何其他20行不同.这是一个非常动态的网站,每两行可以更新一次.
编辑:如果存储在会话状态,那么它只会加快一个人查看页面的次数.不是全部应用程序,因为一个人只能查看一次页面然后离开.
我正在尝试使用应用缓存来批准性能.
我在不同的网站上受过指导.(例如http://xguru.net/621 ......)
make cache.man文件,将mime-type设置为text/cache-manifest.
问题是......
它在谷歌浏览器浏览器上运行良好,但在我的Android手机中不起作用.
我在ICS和Gingerbread进行了测试.
这是清单文件.
CACHE MANIFEST
# manifest version v0.1
CACHE:
./programs.png
./video.png
NETWORK:
*
Run Code Online (Sandbox Code Playgroud)
然后,我像这样设置我的webview.
getSettings().setAppCacheEnabled(true);
getSettings().setDomStorageEnabled(true);
getSettings().setPluginsEnabled(true);
getSettings().setCacheMode(WebSettings.LOAD_DEFAULT);
Run Code Online (Sandbox Code Playgroud)
(我将cacheMode更改为LOAD_NORMAL,NO_CACHE,但它没有区别.)
要查看缓存状态,我使用此站点. http://jonathanstark.com/blog/2009/09/27/debugging-html-5-offline-application-cache/
var cacheStatusValues = [];
cacheStatusValues[0] = 'uncached';
cacheStatusValues[1] = 'idle';
cacheStatusValues[2] = 'checking';
cacheStatusValues[3] = 'downloading';
cacheStatusValues[4] = 'updateready';
cacheStatusValues[5] = 'obsolete';
var cache = window.applicationCache;
cache.addEventListener('cached', logEvent, false);
cache.addEventListener('checking', logEvent, false);
cache.addEventListener('downloading', logEvent, false);
cache.addEventListener('error', logEvent, false);
cache.addEventListener('noupdate', logEvent, false);
cache.addEventListener('obsolete', logEvent, false);
cache.addEventListener('progress', logEvent, false);
cache.addEventListener('updateready', logEvent, false);
function …Run Code Online (Sandbox Code Playgroud) 我正在尝试使用Rails 4创建一个应用程序,无需连接互联网即可使用.我听说过html5应用程序缓存和机架离线gem,这是我采用的方法.现在,它似乎在Rails 4上没有正常工作,因为/application.manifest唯一的节目:
CACHE MANIFEST
# dd1ba6bba9339ef83f9c1225c70289dd6326d3caae01b0d52b502381030dc78f
404.html
422.html
500.html
NETWORK:
*
Run Code Online (Sandbox Code Playgroud)
此外,我正在使用资源预编译,因此application.js,application.css和图像文件的名称中都有一个指纹,类似于application-e8cc2fba8275c884c.js.
直到最近,人们还可以方便地下载 Mozilla 的开发人员文档,developer.mozilla.org.tar.gz以供离线阅读。然而,Mozilla 似乎已将文档升级为新的基于 SQL 的格式,放弃了旧的 TAR.GZ。
人们不怀疑这样的升级是好的,但是我不明白升级,所以现在我很困惑。我现在应该如何离线阅读 Mozilla 的开发人员文档?
参考
我们有一个Web应用程序,允许用户查看SVG.这些SVG通常包含使用相对URL加载的图像.由于我们希望将其作为iPad"网络应用程序",我们还希望将其添加到iPad用户的主屏幕,并通过HTML 5应用程序缓存进行缓存,以便用户可以离线查看这些SVG和相关图像.
当我们的应用程序从iPad主页图标加载时,将正确读取应用程序缓存清单,并缓存所有引用的资源.当用户开始脱机使用应用程序时,会出现此问题.在使用应用程序期间,会在页面DOM中添加和删除SVG.在此期间,SVG中的某些映像无法从应用程序缓存加载,即使它们肯定存在并缓存.相反,向服务器发出了对图像的请求,这显然是因为用户不再在线而失败.
有趣的是,当在iPad上的safari中导航到页面时,似乎不会出现此问题.它似乎特定于整页Web应用程序视图,但我无法保证.
我可以使用这个HTML页面轻松地重现这个:
<!DOCTYPE html>
<html manifest="testfiles.manifest">
<head>
<title>Test</title>
<script src="Javascript/jquery-1.7.1.js" type="text/javascript"></script>
<!-- Remove the browser chrome when the page is loaded from a homescreen icon -->
<meta name="apple-mobile-web-app-capable" content="yes" />
</head>
<body>
<h1>Simple SVG caching test</h1>
<h2>Basket ball SVG</h2>
<p>
<span id="remove">Remove</span> | <span id="add">Add</span>
</p>
<p>
<span id="show">Show</span> | <span id="hide">Hide</span>
</p>
<p>
<span id="reload">Reload</span>
</p>
<embed width='360' height='510' src='TestFiles/Basketball.svg' />
<script type="text/javascript">
$(function ()
{
$("#remove").click(function ()
{
$("embed").remove();
});
$("#add").click(function ()
{
$("<embed width='360' …Run Code Online (Sandbox Code Playgroud) 我正在开发一个利用应用程序缓存的网络应用程序,一切都在桌面浏览器和Android(甚至很老和慢的Android手机)上运行良好.但是,下载appcache在Safari 6和Chrome上的iOS 6上花费的时间要长得多.
我的应用程序缓存总大小仅为2.1Mb,而且我有一个相当稳固的70Mbps(下载)互联网连接.我希望缓存非常快.
这是我到目前为止的时间:
所有这些设备都使用相同的WiFi和互联网连接,我的iPhone/iPad运行正常(没有本地应用程序显示互联网速度问题,常规网站加载正常).在iOS下,似乎有一些绝对贬低AppCache下载速度的东西.
在window.applicationCache.status整个这段时间里appCache.DOWNLOADING,我有一个progress事件正在运行,在下载文件时对这些文件进行计数,所以我确信它不会卡在其他地方.这似乎是下载所需的时间.是什么赋予了?
附录:iPhone也运行得非常热,电池在此操作过程中非常快速地下降.似乎有些东西导致CPU在下载过程中运行平稳.
(注:我不能发布一个链接到web应用这里我们仍处于内部测试阶段,但如果你需要看到它之前,你认为你能帮助诊断它,在给我发电子邮件在我的个人资料中的地址,我将发送一个链接到该应用程序).
我的应用程序缓存有问题,似乎只与Android桌面和Firefox上的Firefox有关.
这是我的清单文件,名为cache.manifest.php(PHP用于设置正确的HTTP标头):
CACHE MANIFEST
CACHE:
images/user.png
images/password.png
lang/de.js?contenthash=e4943126757ac9785cb499482625e0fc
lang/it.js?contenthash=e7c3f04d103d19685436836d445c2a66
images/vismode.png
images/box_tall.png
images/box_tall-red.png
images/box_tall-yellow.png
images/exit.png
fonts/Lato-300.woff
main.css?hash=content-hash-0aba852b903deacca756946164306753
3rdparty.js?hash=content-hash-a4954a81d109d892861216a3c20db476
core.js?hash=content-hash-8330a5d0f688d1f5f31a606d4def86ba
commonui.js?hash=content-hash-09e98ff1134c9f6030766b6216b1885a
zipperlebh.js?hash=content-hash-43070707ebbd8d5206cf3bb555e8430f
NETWORK:
/ajax.php
/error_notify_handler.php
/getfile.php
/getmedia.php
/http-proxy.php
/remotedesktop.php
# complete install hash: 5674308eabef29c807d72f536813e343
# index.php hash: cbee5e08081f0d0cbe70102922ead187
Run Code Online (Sandbox Code Playgroud)
它与这些HTTP响应标头一起提供:
Cache-Control: max-age=1, must-revalidate
Connection: keep-alive
Content-Length: 967
Content-Type: text/cache-manifest
Etag: 65b6119134c5c0e0ba80b9d5635184a5
x-powered-by: PHP/5.4.10
Run Code Online (Sandbox Code Playgroud)
通过桌面上的Android浏览器或Chrome浏览器,我得到了预期的行为:应用程序脱机工作,并在清单更改时更新.到现在为止还挺好.
但是,使用Firefox我得到奇怪的结果:
Cache-Control: no-store在清单中添加一个标题,并尝试将清单URL添加到清单的NETWORK部分,没有任何运气. …我想制作一个Android应用程序,它将清除其他应用程序的缓存。我已经想出如何在棉花糖以下的Android版本中做到这一点。
这是我用于Android Honeycom及更高版本的内容:
if (isExternalStorageWritable()) {
final File externalDataDirectory = new File(Environment
.getExternalStorageDirectory().getAbsolutePath(), "/Android/data");
final String externalCachePath = externalDataDirectory.getAbsolutePath() +
"/%s/cache";
if (externalDataDirectory.isDirectory()) {
final File[] files = externalDataDirectory.listFiles();
for (File file : files) {
if (!deleteDirectory(new File(String.format(externalCachePath,
file.getName())), true)) {
Log.e(TAG, "External storage suddenly becomes unavailable");
return false;
}
}
} else {
Log.e(TAG, "External data directory is not a directory!");
}
} else {
Log.d(TAG, "External storage is unavailable");
}
Run Code Online (Sandbox Code Playgroud)
但是我有一个问题要弄清楚如何针对Android版本棉花糖及更高版本执行此操作。
市场上存在的其他缓存清理器是否能够通过获得可访问性许可或任何其他方式来执行此操作?