当前位置: 首页 > 工具软件 > Zopfli > 使用案例 >

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

阮轶
2023-12-01
[url]https://code.google.com/p/zopfli/[/url] 是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


来试试看吧, :D
 类似资料: