作为我们安装程序构建的一部分,我们必须将数千个大数据文件压缩到大约十或二十个“包”中,每个包中有几百个(甚至数千个)文件,这些文件都依赖于与其他文件一起保存在包裹。(如果您愿意,它们会一起进行版本控制。)
然后在实际安装过程中,用户选择他们希望在他们的系统中包含哪些包。这也让他们可以从我们的站点下载包的更新作为一个大的版本化文件,而不是要求他们下载数千个单独的更新,这也可能导致他们与同一包中的其他人不同步。
由于这些是数据文件,其中一些在设计和编码阶段会定期更改,这意味着我们必须重新压缩该特定 zip 包中的所有文件,即使只有一个文件发生了更改。这使得我们的安装程序构建的打包步骤每次都需要一个多小时,其中大部分用于重新压缩我们没有接触过的东西。
我们已经考虑单独保留 zip 包,然后替换其中的特定文件,但是从 zip 中间插入和删除大文件并没有给我们带来那么大的性能提升。(有点,但还不够值得。)
我想知道是否可以将文件预处理为缓存的原始“压缩状态”,该状态与将其写入 zip 包的方式相匹配,但只有数据本身,而不是 zip 标头信息等。
我的想法是,如果可能的话,在我们的构建步骤中,我们将首先查找任何没有与之关联的压缩缓存的数据文件,如果没有,我们将压缩该文件并将结果写入缓存。
接下来,我们将简单地将所有缓存附加到一个文件流中,添加文件所需的任何适当的 zip 标头。
这意味着我们仍然在每次构建期间重新创建整个 zip,但我们只是重新压缩已更改的数据。其余的将按原样写入,这非常快,因为它是直接写入磁盘的。如果一个数据文件发生变化,它的缓存就会被破坏,所以下一次构建过程会重新创建它。
但是,我不确定这样的事情是否可能。是吗,如果是的话,是否有任何文件显示人们将如何尝试这样做?