
调试
你可能有过许多Web开发者都遭遇过的经历:花费了许多时间逐行更改源代码,并每次更改后都在浏览器中刷新页面——但结果还是保持不变。在服务器到浏览器之间存在着许多用来临时储存Web内容的空间。多数情况下这都很有助于节约带宽,但它也让Web开发者损失了许多休息时间。
糟糕的是离线Web应用程序让这一问题变得更加复杂。添加了额外的缓存组件之后,基本上很难搞清楚各个元素在哪个缓存里更新了哪又没更新。为了要解决这个问题,必须使用结构化的方法。
首先需要确保的是Web服务器确实输出了当前版本的缓存清单。
HTTP状态码代表着已经成功处理访问文件的请求,代表文件处于未更改状态,因此未受理访问请求(译者注:表示服务器认为目标文件与缓存中一致,指示浏览器直接访问缓存)。
下一个调试选项内嵌在浏览器中。它因浏览器而异,目前来说Firefox及GoogleChrome的工具最方便。
GoogleChrome可以在开发者工具控制台中追踪applicationCache对象的当前状态。表展示了浏览器创建离线存储过程中对页面的第一次调用。接下来所有相关文档被下载完毕,每次下载结束都将触发一个progress事件(同样见节)。重新加载页面将产生noupdate事件,因为缓存清单文件尚未被修改。Chrome将所有事件清晰地按顺序排列。
MozillaFirefox的开发者们将与缓存有关的信息直接集成到浏览器中。在地址about:cachedevice=offline下,Firefox将此缓存中的所有元素以列表方式显示。若浏览器为离线模式,你可以得到每个元素的更详细信息,譬如说文件在硬盘上的位置。
要让浏览器重新加载缓存清单,需要先修改清单的内容。使用相同内容将文件重新保存,或是使用UNIX命令touch来更新最新修改时间是不够的。开发应用程序时,这会逼得开发人员需要先在注释目录上加人一个字符然后再删除它以完成一个重复性重载请求——虽然这样做确实可以,但如何自动化处理仍然是个问题。
若你使用了Subversion(SVN)—类的版本控制工具,可能会设想依靠ID或revision一类的关键字让SVN自动替换修改过的版本,但关键字也只在清单文件的内容改变时才会改变——所以这是另一个死胡同。靠谱的办法是通过一个脚本,在分发新版本应用程序时,
宁波网站制作认为读取目录下所有文件列表,并将其写入缓存清单文件中。这个解决方案得要缓存清单里包含目录中所有内容。UNIX下的shell命令大概是这样:
SVNV=$(svnversion-n)&&\sed-e"s/Ammsvn.*/mmsvnrepoversion$SVNV/"\-imenu.appcache它把注释行替换为当前目录的Subversion版本。
本文由乐华网络编辑,转载请注明出处
宁波网站制作www.leseo.net