Octopress 加速 - 对静态资源预 Gzip 压缩

来源:转载

Nginx 等 HTTP 服务器加载了 Gzip 模块都可以开启对静态资源的压缩,减少与客户端间的传输消耗,那为什么还要实行预 Gzip 压缩呢?这么做的好处是:节省了服务器压缩静态资源的开销,同时预压缩可以提供最大压缩比。

新建 rake 任务如下:

require "parallel"require "zlib"desc "Gzip static files"task :gzip, :dir do |t, args| puts "## Gzip Static Files" args.with_defaults(:dir => "#{public_dir}") Parallel.map(Dir.glob("#{args.dir}/**/*.{html,css,xml,packed.js,eot,ttf,otf,svg}"), :in_threads => n_cores) do |f| open(f) do |src| Zlib::GzipWriter.open("#{f}.gz", Zlib::BEST_COMPRESSION) do |gz| gz.puts src.read end end endend

用到了 2 个 Gem, zlib用于压缩, parallel添加并行处理能力。除了 html、xml、css、js 等一般静态资源文件外,也对 eot、otf、otf、svg 进行压缩(woff 已经是压缩格式,所以不再压缩)。

在 rake deploy中自动调用:

desc "Default deploy task"task :deploy do # Check if preview posts exist, which should not be published if File.exists?(".preview-mode") puts "## Found posts in preview mode, regenerating files ..." File.delete(".preview-mode") Rake::Task[:generate].execute end # Apply custom tasks Rake::Task[:minify_html].execute Rake::Task[:gzip].execute Rake::Task[:copydot].invoke(source_dir, public_dir) Rake::Task["#{deploy_default}"].executeend

minify_html任务在另一篇文章 Octopress 加速 - 压缩 Html中构建。

服务器端 Nginx 需进行相应设置,开启 gzip_static模块:

location ~* /.(svg|eot|ttf|otf)(/?.*)?$ { gzip_static on; expires max; access_log off; log_not_found off;}location ~* /.(css|js)(/?.*)?$ { gzip_static on; expires 7d; log_not_found off;}location ~* /.(html|xml)$ { gzip_static on; expires -1; log_not_found off;}


分享给朋友:
您可能感兴趣的文章:
随机阅读: