gpt4 book ai didi

Git:处理应用程序缓存?

转载 作者:IT王子 更新时间:2023-10-29 00:33:49 24 4
gpt4 key购买 nike

我在 GitHub 上托管一个 OSS 项目,该项目有几个不同的开发人员。这个项目是一个 Web 应用程序,它使用 AppCache 告诉浏览器哪些文件应该离线可用。

一旦缓存中的文件发生更改以使缓存无效并强制浏览器重新加载所有文件,它就需要更新应用缓存文件的性质(例如,我们在评论中使用时间戳) .
现在,当人们在不同的开发分支上工作时,他们会在每次提交时更新应用缓存中的时间戳。

现在的问题是,这会产生阻止自动 merge 的冲突。

  • 如何以一种不会在未来再次发生冲突的方式解决这个问题?
  • 在相同情况下其他开发团队在做什么?

使用 CVS,我可以用 $Id$ 替换时间戳,让程序自动处理它...

最佳答案

我在处理由 Rails 堆栈提供的 AppCache 支持的应用程序方面拥有丰富的经验。

到目前为止,我发现最简单的事情是将您的版本硬编码到您的 AppCache 中。您应该动态生成文件,并以编程方式为版本生成唯一值。理想情况下,没有人应该自己对 list 进行更改,他们应该对以编程方式生成文件的输入进行更改。

这并不是 AppCache 独有的。如果您发现在几乎每次提交中都需要修改某一行,那么您可能不应该对该行进行硬编码。它应该以某种方式生成,基于 repo 中的任何更改提示对该行的更改。

回到 AppCache,我发现最简单的事情是:

  • 在开发中,包括应用缓存中所有文件的最后修改时间
  • 在生产中,包括已部署的 Git 提交的提交 ID

我不知道您使用的是什么语言,但在 Rails 世界中,我的 AppCache list 如下所示。没有人需要更改此文件,他们只会在 @files 数组中添加或删除文件,该数组在提供此 list 的 Controller 中进行管理:

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:
*

第一部分包含在 Rails.env.development? 中,输出一系列注释行,包含 list 中每个文件的最后修改时间。这意味着,在开发过程中,只要其中包含的任何文件被修改,AppCache 就会自动过期。

在生产中,AppCache 在部署新提交时过期。这对你来说可能有点矫枉过正;如果你想避免不必要地使你的用户的 AppCache 过期,你应该做一些更聪明的事情,比如对所涉及的文件进行哈希处理,以便缓存在它们的内容发生变化时过期。

最后,我写了一个小库来帮助消除生成 list 的重复部分。如果您正在使用 Rails,您可能会发现它很有帮助:https://github.com/meagar/rails_appcache

关于Git:处理应用程序缓存?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29880529/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com