作为程序员，你在 2015 年都有哪些进步、收获与成长？
谢邀。 这问题我关注了一整天，好些大牛都关注了这个问题，但都木有来回答，可能是中秋忙着团圆咯~ 那么就让我来抛个砖，引个玉。 讨论这个问题有一个前提，就是 ES6 还没有普及，因为 ES6 本身就有模块化方案，所以不需要 Browserify 等工具去打包了。 Browserify 跟其它模块化方案有点不同，它并非在「运行时」加载模块，而是在「构建时」对模块进行打包。很多人使用 Browserify 时，只是简单粗暴地把所有模块打包成一个文件，这导致的问题我想大家一下子都能想到，那就是即使我只修改一行代码，用户都要重新下载一整个文件。 所以使用 Browserify 所会引伸出来的问题，实际上是一个关于静态资源管理的前端性能优化问题。 当然了，大家都知道，通过设置 Cache-Control/Expires 可以控制客户端的缓存过期时间，非常简单，仅仅需要是一两行配置的问题。所以问题的核心其实是如何去更新缓存资源。 而这个问题，根据项目的大小不同，实际上处理的手法也是不一样的。 如果你面对的仅仅是一个小型项目，直接打包下来的 JS 文件只有一百多 KB，那谈这个就有点多余了；如果你面对的是一个大到像百度那么大的公司，下面有无数个项目，那我相信云龙的 讲得要比我好得多；既然我是来抛砖引玉的，那么我就讲一个像计蒜客这样的不大不小的网站，如何去做缓存的静态资源的性能优化。 根据我们目前的情况，对于最终引入的结果，我设计了三层结构： 那如何去实现呢？ 对于基础层和组件层，我们使用一个配置表去手动管理： resource.json 配置完之后，我们通过自动化构建工具（如 gulp）根据 resource.json，把它们打包和加 MD5 戳，于是得到这样的表： rev-manifest.json 对于业务层，以 PHP 为例，我们在 View 层这样写： 我们通过自动化构建工具，用正则去分析 js 和 css 所需要的文件，把它们打包后，修改 rev-manifest.json： rev-manifest.json 接下来是资源加载： 我们在 php 中添加一个方法 loadBaseAndWidget，用于输出 base 以及 widget 的链接，它应该写在 js() 和 css() 的前面： loadBaseAndWidget()、js() 和 css() 会去读取 rev-manifest.json，然后页面就渲染成这样： 这个架构实现了非覆盖式的静态资源发布，可以快速迭代。 当然了，有人会说那这样的合并方式，不是会加载冗余的组件和模块么？是的没错，这个架构确实存在这个问题。但是，前端性能优化不仅是一个工程问题，而且还是一个统计问题，一点冗余代码都没有是不可能做到的。我们能做的是要从改造的时间、实现的难度上去考虑，尽可能地从统计学上获得最大的收益。 希望我的答案能给大家带来一些参考价值。