它是这样使用的:

    assets目录下有很多静态资源,比如js,css等文件。

    我们使用strace工具来追踪nginx worker进程的系统调用。

    首先,查看一下nginx的进程号。

    1. www-data 17187 24035 0 Jan26 ? 00:00:04 nginx: worker process

    可以看到nginx的worker进程的pid是17187。

    1. sudo strace -p 17187 2>&1 | grep gz

    我们使用curl工具尝试访问assets目录下的静态资源。

    可以看到strace出现了一行信息。

    1. open("/home/yinsigan/rails365/current/public/assets/application-66a0c9fef334cb918dbbe88caf095db309cb3806af50808f7216a500434b96ec.js.gz", O_RDONLY|O_NONBLOCK) = -1 ENOENT (No such file or directory)

    它会尝试打开找刚才那个js的静态文件,不过后面加了gz作为后缀,也就是压缩过的文件。这个模块的作用就是首先会去找gz文件,找到的话就直接返回给客户端,没有找到,才用这个模块压缩之后再返回。毕竟压缩,再怎样还是要消耗内存,消耗CPU的,如果原本就有gz文件,那肯定是会缩短处理时间的,这也正是这个模块存在的意义。

    来看一下assets目录下的文件。

    1. ~/rails365/current/public/assets$ ls

    可以发现,果然是没有任何gz文件存在的。

    我的应用是使用rails开发的,下面是一段自动生成gz文件脚本,从网上摘录的。

    生成gz文件:

    1. $ mina "rake[assets:gzip]"
    1. ~/rails365/current/public/assets$ ls

    需要注意的事,别对二进制文件,比如图片做gz压缩,因为没有任何意义。

    再次用curl工具访问,可以看到strace的输出:

    可见,已经不会提示文件找不到了。