寸志

为什么我讨厌 Static Zombie

我说有种静态资源叫做:static zombie——引用的地方添文件名加了时间戳或者 MD5,源码中又找不到这类文件,但测试或者生产环境上又有这个文件,不过是经过压缩的,一般这类文件时间都比较久远。深深地刺痛着我。

前两天发了这条微博,目的就是吐槽一下我司静态文件管理的混乱(历史原因就是很多 Web 项目之前不是由前端负责的)。造了个词 Static Zombie。在重构这些项目的时候,我发现源码中很多地方的源码就像下面这样:

1
<script type="text/javascript" src="http://example.cdn.com/jquery-1.7.1/20141023.jquery-1.7.1.min.js"></script>

http://example.cdn.com/ 只是一个示例。

这些静态文件的引用包含如下特点:

  • 文件都是从测试/线上环境中获取的;
  • 这些文件在任何源码仓库中都找不到;
  • 带版本号(日期或者 MD5 值);
  • javascript/css/image 都有;
  • 脚本和样式都是经过压缩的;

看到这些文件,我只想说:

我操,我怎么重构?

完全没法改啊,尤其是 css 文件,请求了一看,都是压缩的,而且还引用了很多背景图片。

这就是所谓的 Static Zombie,这种文件没法改,不能更新,也不能删。无论我愿不愿意,它们就在那里,和尸体差不多!

重要的事情说三遍:

千万不要写死版本号!千万不要直接引用 CDN 上的地址!千万通过自动化(不要手动)地工具来管理静态资源!
千万不要写死版本号!千万不要直接引用 CDN 上的地址!千万通过自动化(不要手动)地工具来管理静态资源!
千万不要写死版本号!千万不要直接引用 CDN 上的地址!千万通过自动化(不要手动)地工具来管理静态资源!

否则满满都是坑!

几点关于静态资源管理的心得:

  • 使用 MD5 而不是时间戳;
  • 开发运行时和线上运行时分开——开发引用项目的中的文件,上线时则环境带版本号的 CDN 文件;
  • 全自动化的管理静态资源,任何时候都不要图方便手动写死版本号,或者手动上传到 CDN,然后在项目直接使用 CDN 上的文件。