Chr*_*ris 15 git github html5-appcache
我正在GitHub上托管一个OSS项目,该项目有几个不同的开发人员.该项目是一个Web应用程序,它使用AppCache告诉浏览器哪些文件应该脱机使用.
这是appcache文件的本质,它需要更新(例如,我们在注释中使用时间戳),一旦缓存中的文件更改为使缓存无效并强制浏览器重新加载所有文件.
当人们现在在不同的开发分支上工作时,他们正在使用每个提交更新appcache中的时间戳.
问题是,这将产生阻止自动合并的冲突.
使用CVS我可以用$ Id $替换时间戳,让程序自动处理它...
我在使用由Rails堆栈提供服务的AppCache支持的应用程序方面拥有丰富的经验.
到目前为止,我发现最简单的方法是不将您的版本硬编码到AppCache中.您应该动态生成文件,并以编程方式为该版本生成唯一值.理想情况下,没有人应该对清单本身进行更改,它们应该对以编程方式生成文件的输入引入更改.
这对AppCache来说并不是唯一的.如果您发现几乎每次提交都需要修改某个特定行的位置,那么您可能不应该对该行进行硬编码.它应该以某种方式生成,基于repo中的任何更改,提示更改该行.
回到AppCache,我发现最简单的事情是:
我不知道你正在使用什么语言,但在Rails世界中,我的AppCache清单看起来如下所示.没有人必须更改此文件,他们只会添加或删除@files数组中的文件,该文件在提供此清单的控制器中进行管理:
CACHE MANIFEST
<% if Rails.env.development? %>
<% @cached_files.each do |file| %>
# <%= File.mtime(file) %>
<% end %>
<% else %>
# <%= `git rev-parse HEAD` %>
<% end %>
CACHE:
<% @cached_files.each do |file| %>
<%= file %>
<% end %>
NETWORK:
*
Run Code Online (Sandbox Code Playgroud)
第一部分包含Rails.env.development?输出一系列注释行,包含清单中包含的每个文件的最后修改时间.这意味着,在开发期间,只要修改了包含在其中的任何文件,AppCache就会自动过期.
在生产中,部署新提交时,AppCache已过期.这可能对你来说太过分了; 如果你想避免不必要地使你的用户的AppCache过期,你应该做一些更聪明的事情,比如散列所涉及的文件,以便当内容改变时缓存过期.
最后,我结束了编写一个小型库,以帮助消除重复的生成清单.如果您使用Rails,您可能会发现它很有用:https://github.com/meagar/rails_appcache