Webpack 真正的持久缓存实现

说现在 webpack 是目前最流行的前端依赖打包工具,应该没人会有异议吧?不过为了在这个开放的工具上达成自己的最优目的,还是要花不少心思的。这里来讲讲在 webpack 里怎么做到真正的持久缓存。

持久缓存,也就是说在相关代码内容没有变化的时候,尽可能的使浏览器利用缓存而不是发送静态资源请求。方法也很简单:

  • 同样的文件内容对应同样的名字,同时设置最大缓存失效期。这样在需要同一份代码时,浏览器总是使用本地缓存(连304请求都不需要)
  • 尽可能将很少变动的代码提取成单独的一份文件,使得这部分代码几乎总是被缓存,从而提高整体缓存利用率

webpack 文档里有一篇非常简单的关于如何做到持久缓存(Long-term Caching),有多简单?它就只告诉了你一件事:记得在文件名里用 chunkhash。

对此,我无力吐槽。。。在实际的场景里,光用 chunkhash 基本上来说并没有什么卵用,因为还有一堆的情况会导致即使实际上相关代码没变, chunkhash 还是变了。

Read More

HappyPack - Webpack 的加速器

最近在组内前端使用的 Webpack 工具引入了一个 HappyPack 的插件,编译效率有显著提升。为此特意查看了 Webpack 和 HappyPack 的源代码,弄清楚效率提升的具体细节。

现在前端行业里模块化已经相当普遍了,模块打包工具也变得必不可少。Webpack 虽然起初只是一个人开发出来的打包工具,但它的流程设计带来的强大的扩展性使其越来越流行,为之开发的三方插件几乎已经囊括了前端所需的一切资源类型。

在我看来,React 这类富应用框架的流行推动了 Webpack 的发展。然而当初第一个 React + Webpack 开发的项目才进行不到一半的时候,Webpack 就有了很明显的性能问题。React 整个框架代码量680+KB,加上业务代码,文件模块数量庞大,Webpack 根本吃不消,动则编译一分钟多,内存占用也大。好在想想办法也能改善一下效率,典型的比如移除不必要的大型库文件的编译。

而这时,有了 HappyPack,编译速度一下子提高了不少,而且可以支持大部分常用的 Loader,绝对可以说是 Webpack 的加速器 —— 虽然内存占用依然很高。来看看 HappyPack 是怎么做到的。

Read More

Squid + stunnel 搭建HTTP代理

原理:

1
2
3
4
使用 squid 搭建http代理。
然后通过 stunnel 创建客户端到代理服务器的加密连接。

连接图: **浏览器** --(http代理)--> **stunnel客户端(国内)** --(stunnel加密连接)--> **服务端stunnel** --(转发)--> **服务端squid** --(squid http代理)--> **内容服务器**

Read More