众所周知,wordpress实在是太大了,文件也多。使用syntaxhighlighter后,还多了一堆js文件。很有必要在文件传输上进行一下优化。
一般像搜索引擎等访问量大的页面都会使用到页面压缩以减少流量和减少服务器负担。通常采用的方法是在HTTP头里加入Content-Encoding选项。
一个典型的HTTP请求:
GET / HTTP/1.1
Host: xiaoxia.org
Connection: keep-alive
Accept: */*
User-Agent: Mozilla/5.0 Chrome/6.0.472.63 Safari/534.3
Accept-Encoding: gzip,deflate,sdch
Accept-Language: zh-CN,zh;q=0.8
Accept-Charset: GBK,utf-8;q=0.7,*;q=0.3
If-Modified-Since: Tue, 19 Oct 2010 04:33:34 GMT
这次对HomeServer所做的内部更新,是检查浏览器可以接受的压缩编码Accept-Encoding,如果含有gzip项,则启用gzip压缩输出Content-Type里含有text的文件,包括动态脚本(php,cgi等)。压缩算法来自zlib。在util.c里增加了一段压缩代码:
int def( const char* in, int in_len, char* out, int out_len ) { z_stream strm; strm.zalloc = (alloc_func) Z_NULL; strm.zfree = (free_func) Z_NULL; strm.opaque = Z_NULL; if( deflateInit2(&strm, Z_DEFAULT_COMPRESSION, Z_DEFLATED, 16+15, 8, Z_DEFAULT_STRATEGY) != Z_OK ){ DBG("deflate failed"); return -1; } strm.avail_in = in_len; strm.next_in = (unsigned char*)in; strm.next_out = (unsigned char*)out; strm.avail_out = out_len; deflate(&strm, Z_FINISH); deflateEnd(&strm); return out_len - strm.avail_out; }
针对512字节到8MB之间的文本文件进行压缩,下面是输出时候的判断。
if( conn->data_size > 512 && conn->data_size < MB(8) && strstr(conn->document_type, "text") && strstr(header_value(conn, "Accept-Encoding"),"gzip") && strstr(conn->header_send, "Content-Encoding")==NULL ){ NEW( buffer, MAX_DATASEND+KB(1) ); int ret = def( conn->data_send, conn->data_size, buffer, MAX_DATASEND+KB(1) ); DBG("compress from %d bytes to %d bytes.", conn->data_size, ret ); if( ret > 0 ){ conn->data_size = ret; DEL( conn->data_send ); conn->data_send = buffer; sprintf( conn->header_send, "%sContent-Encoding: gzip\r\n", conn->header_send ); }else{ DEL(buffer); } }
一般情况下只针对文本文件压缩输出即可,其它文件例如jpg压缩后的大小可能比原来的文件更大。一般页面的压缩后可以节约30%-90%的流量。我测试了下载一个20KB的含有一串以0123456789为循环节的数字文本文件,gzip压缩成86字节传输。而一般html页面都含有大量重复的标签,所以有很高的压缩率。
低碳生活,从我做起!
沙发……飘~~~眼泪啊…………
换wordpress了啊,哈哈,还是原创的好
正在往wordpress里加入大量原创成分~
wordpress 打开挺慢的,不过这次相对上次来时快了不少
第一次打开wordpress慢也很正常。。。浏览器有缓冲后,也许就快多了。gzip压缩也能减少一定的传输时间哦!
ubuntu 10.10 下,博客布局变形,右侧栏跑地下去了,firefox 3.6.10
我的firefox也是3.6.10哦,看起来没问题。难道是因为在ubuntu下才这样的?
希望小虾多多发表一下wordpress 的相关文章,我也想用这个系统,但不怎么会.。.
其实你说的gzip压缩我觉得说的太过绝对了,因为针对性的可能会对服务器造成一定负担。
如果是静态页面,并且在服务器里保存gzip的缓存,gzip就发挥得很好了,也比较少出现你说的负担!
对于不是很大型的服务器,并发访问量不超过100个,开启gzip都不会造成太大的负担吧。