很多人采用wordpress来做图片型的网站,在页面上通常需要加载很多上传的附件图片。虽然wordpress的空间可以指定附件为一个绝对的URL地址,但远远不够解决浏览器下载的线程机制的限制。下面是我针对wordpress的解决办法。
在说办法之前,先来了解下浏览器的下载线程是什么。简单点来说,就是你在用浏览器打开一个网页页面时,若这个页面上所有图片、样式、js等放在同一个域名之下,那么浏览器向服务器请求时就必须请求一个下载完再请求下一个(或可以同请求几个下载完再继续请求,不同浏览器有所不同)。若这个页面下的图片、样式、js等这些文件都放一个域名并过多的话,打开网页页面时等待的队列也就长。(如你2M的宽带对比4M的宽带是快不了多少的)
解决的思路就是同时下载更多数据,限于同域名下的限制问题,我们可以采用多域名的方式来解决。
若你的空间允许绑定多个子目录,那么可以设多个子域名绑定到wordpress的附件wp-content/uploads/下。
我的是把我的子域名http://pic0.tsov.net/和http://pic1.tsov.net/绑定到wp-content/uploads/下的。
同时在后台的“设置”,“媒体”中指定你设定的子域名(若你博客已有数据,可用phpmyadmin执行语句,一次性把附件转换过来),
比如我的设置为:(文件的完整 URL 地址: http://pic.tsov.net)
接着在你主题下的functions.php文件中加入下面代码。
<?php |
上面的代码作用就是把你日志中的图片路径进行随机的替换。
如:http://pic.tsov.net/2010/10/baishamen/100_9590.jpg
随机替换成:http://pic0.tsov.net/2010/10/baishamen/100_9590.jpg
或 http://pic1.tsov.net/2010/10/baishamen/100_9590.jpg
当然,若你站图片非常多,那么可以把随机生成的rand(0,1)改为rand(0,9)。那么你就要把你的子域名:
http://pic0.tsov.net
http://pic1.tsov.net
http://pic2.tsov.net
http://pic3.tsov.net
http://pic4.tsov.net
http://pic5.tsov.net
http://pic6.tsov.net
http://pic7.tsov.net
http://pic8.tsov.net
http://pic9.tsov.net
都绑定到wp-content/uploads/下。
若你的一个页面上图片不是很多很多的话。就好不要有过多的子域名(域名解析也要是时间呀)。一般控制在2-3个够了。大致可以这个计算一下:一个子域名同时下载5个,那么同一时间里你有多少个需要下载,相应就除以5就是你要用子域名数了。
以上只是我最初的一个实现方法,后来发现采用随机数rand(0,1)图片的路径经常变,这对搜索引擎也许不太好,最好固定,于是我用这么用:
$tsovnet= str_replace('pic.tsov.net','pic'.substr(decbin(md5($match1$i)),-1).'.tsov.net',$match1$i); |
这句就不解释了,太累赘了。不过终于实现我最终的目的了。
当然,上面涉及到很多其它优化的问题,我就不多说了。
另外:比如把子域名指向到不同的空间上,每次发表带附件的日志时,就把附件同步到其它空间上。(这个同步可以写个程序用404下载过去等等怪异的好方法)
说了这么多,大家看时一定一头雾水吧。那就先体验一下实现后的效果吧。
原文:http://tsov.net/category/album/
感谢 simonsu 的投稿