试用zopfli - 更高效的zlib压缩工具

https://code.google.com/p/zopfli/ 是Google最新推出的zlib压缩工具,和之前的gzip算法相比,能够节约3~8%的压缩空间,压缩时间差不多要慢100~1000倍。虽然压缩时间要慢很多,但是它很适合用来做网页静态资源压缩,节约用户下载时间和运营中的流量带宽成本。第一时间在我们的一个生产环境试用了一下,对于js和css文件可以节约5%的size,很不错。

使用zopfli很简单,下载源码,编译即可:
git clone https://code.google.com/p/zopfli/
cd zopfli
make


开启nginx的静态gz文件支持:
server {
  gzip_static on;
}


然后对需要压缩的js和css文件执行
zopfli application.js
zopfli application.css


这样浏览器请求application.js的时候,就会自动下载用zopfli压缩好的application.js.gz了。

如果你在用rails或者其他基于sprockets的ruby web框架,还可以写一个Sprockets::Asset的monkey patch,放在initializers目录或者其他lib目录下,自动化地将原先默认用zlib压缩的js和css,改成用zopfli来处理:
module Sprockets
  class Asset
    def write_to(filename, options = {})
      # Gzip contents if filename has '.gz'
      options[:compress] ||= File.extname(filename) == '.gz'

      FileUtils.mkdir_p File.dirname(filename)

      # Write out as is
      File.open("#{filename}+", 'wb') do |f|
        f.write to_s
      end

      if options[:compress]
        # 调用命令行来处理,等zopfli的ruby binding gem发布后,就可以用pure ruby code
        `/your/path/to/zopfli/zopfli #{filename}+`
        # Atomic write
        FileUtils.mv("#{filename}+.gz", filename)
      else
        # Atomic write
        FileUtils.mv("#{filename}+", filename)
      end

      # Set mtime correctly
      File.utime(mtime, mtime, filename)

      nil
    ensure
      # Ensure tmp file gets cleaned up
      FileUtils.rm("#{filename}+") if File.exist?("#{filename}+")
    end
  end
end


来试试看吧, 

你可能感兴趣的:(lib)