最近发现一个不错的用go语言写的静态博客程序gor,原理是用gor程序生成整站静态的html网页。
我把它放在了阿里云上测试,发现打开网站速度有点慢,同样的我现在博客非静态的都比他快。
后查原因,原来gor直接调用go自带的http.FileServer实现web服务,而Go自带的http.FileServer没有对文本文件进行优化,浪费了大量带宽,如css、js等文本文件可以进行gzip压缩(Content-Encoding gzip),如jpg、js、css等不常变的文件可以设置在浏览器本地缓存时限(Expires Sat, 08 Jun 2013 19:42:15 GMT)。
阅读 Go\\src\\pkg\\net\\http\\fs.go 源码发现不是很深奥,自己有时间可以动手改。
有趣的是发现 七牛存储 整站也没有进行优化。
-------------------------------------------------------------------------------------------------
后续发现 FileServer 带有 Last-Modified 标签,这个是文件最后修改时间,当浏览器再次请求同一文件时 会把 Last-Modified 加入到请求 If-Modified-Since 标签,服务器收到后跟服务器端对比如果没有改变则返回304,否则返回新的文件。
而Expires标签不同,只要浏览器发现文件没过期,就不会发送询问文件有没修改的请求,这样就减轻了服务器的压力。