Posts Tagged ‘plugin’

清理主题文件,加速Wordpress

Wednesday, January 23rd, 2008

Wordpress性能差、速度慢是出了名的,加速Wordpress除了安装一些缓存/静态化插件,例如WP-CacheWP-Super-CacheCos-Html-Cache,还可以通过清理主题文件中的一些数据库查询语句,减少Http请求次数,达到优化的目的。

Wordpress主题文件中经常会用到的查询语句主要有以下几个,这些语句完全可以去除或转化为静态方式而无须访问数据库 :

<html xmlns=”http://www.w3.org/1999/xhtml” <?php language_attributes() ?>> 转化为
<html lang=”zh-CN dir=”ltr xmlns=”http://www.w3.org/1999/xhtml>

<meta http-equiv=”content-type” content=”<?php bloginfo(’html_type’) ?>; charset=<?php bloginfo(’charset’) ?>” /> 转化为
<meta content=”text/html; charset=UTF-8 http-equiv=”content-type/>

<meta name=”description” content=”<?php bloginfo(’description’) ?>” />转化为
<meta name=”description” content=”这里直接输入你的博客简介” />

<meta name=”generator” content=”WordPress <?php bloginfo(’version’) ?>” /> 这句可以删除

<link rel=”stylesheet” type=”text/css” href=”<?php bloginfo(’stylesheet_url’); ?>” /> 直接写出style.css文件的链接地址

<link rel=”alternate” type=”application/rss+xml” href=”<?php bloginfo(’rss2_url’) ?>”  /> 直接写出RSS的链接地址

<link rel=”pingback” href=”<?php bloginfo(’pingback_url’) ?>” /> 直接写出pingback的链接地址

以此类推,凡是可以变为静态方式的地方都直接写出具体内容,这些语句大都存在于header.php和footer.php文件中,通过这番清理,大概可以减少10多次的数据库查询。

想进一步优化Wordpress的朋友还可以参考下面两篇文章介绍的方法 : 《优化Wordpress-wp终极优化手册》、《加快WordPress的页面生成和载入速度》。

注 : 本文参考了Speed up and clean up your WordPress!

对《通过优化插件来提高 WordPress 运行效率》的一点补充

Tuesday, January 1st, 2008

我爱水煮鱼所写的通过优化插件来提高 WordPress 运行效率一文非常好,建议所有使用Wordpress的朋友都读一读。对于优化插件问题,我想到了一个方法,就是将所有Blog必需的插件函数写入模板的functions.php文件中,加载模板时也就同时启用了这些函数,但这要求你对插件的结构比较了解,清楚其中哪些语句是函数所必需的,哪些是无谓的,所以我不建议对比较复杂的插件使用此方法,而有些插件我们经常使用并且其本身又短小精悍,最适合使用此法,以中文Blogger必备的中文 WordPress 工具箱为例,其中获取最新文章列表的函数所包含的语句如下:

function get_recent_posts($no_posts = 10, $before = ‘<li> ‘, $after = ‘</li>’, $show_pass_post = false, $skip_posts = 0) {
global $wpdb, $tableposts;
$request = “SELECT ID, post_title, post_date, post_content FROM $tableposts WHERE post_status = ‘publish’ “;
if(!$show_pass_post) { $request .= “AND post_password =” “; }
$request .= “ORDER BY post_date DESC LIMIT $skip_posts, $no_posts”;
$posts = $wpdb->get_results($request);
$output = ”;
foreach ($posts as $post) {
$post_title = stripslashes($post->post_title);
// $post_date = mysql2date(’j.m.Y’, $post->post_date);
$permalink = get_permalink($post->ID);
$output .= $before . ‘<a href=”‘ . $permalink . ‘” rel=”bookmark” title=”Permanent Link: ‘ . $post_title . ‘”>’ . $post_title . ‘</a>’. $after;
}
echo $output;
}

那么只需要将这段代码写入functions.php文件中即可,其他类似的函数还有中文wordpress工具箱中的其他函数、wp-pagenavigravatar等。最后提醒一下,如果你的模板是准备公开发布的,请在functions.php中注明插件出处^_^。

Bad Behavior挡住了它的主人

Thursday, October 12th, 2006

这两天新建了一个Blog,防Spam插件选择了Bad Behavior,因为自己现有的两个Blog都在使用SK2,所以这次想试一试天佑一直推荐的BB的效果。按照天佑的说法,SK2和BB在防Spam的方式上有很大区别,SK2是对已有的留言进行筛选,它有自己一套非常复杂的过滤规则,符合规则的留言会被保留,否则被作为垃圾处理,就我使用的感受来说效果非常好;而BB则是“御敌于国门之外”,当对方有释放Spam的意图时(此时并未真正留言)就会被屏蔽,看起来有些神奇,不过今天我有幸领教了BB的厉害,因为我竟然被当成了Spmmer而无法进入WP的管理界面(见下图)。

刚看到这个页面时我还以为是自己的密码输错了,但发现上面说我的IP被列入了黑名单,莫非是WP 2.1的新功能?但我明明遵纪守法啊~,看看那个修复链接的提示(见图中红色箭头指向的部分),其中有“bb2”的字样,OK,原来是Bad Behavior搞得鬼!真是冤枉啊,当时第一感觉就是赶快把BB删掉,但且慢,如此一来虽然肯定能解决问题,但就放过了我被“冤杀”的真相,于是决定一定要找出元凶!点击那个修复链接,让我去查自己的IP是否真的被收录到了黑名单中,按图索骥,来到了Spamhaus的网站,Spamhaus是一个非盈利性的国际组织,目标是跟踪Spam来源,保护网络安全,它有两个危险IP数据库,而我这个IP赫然在列(见下图):

由此可见,Bad Behavior之所以能够预防Spam,在于它利用了Spamhaus提供的数据,当发现IP在SBL或XBL1中时,就会挡住该IP,使之无法访问网站。而我之所以被错杀,原因在于—————–我在家中使用ADSL拨号上网,今天随机分配给我的IP地址竟然是Spamhaus黑名单中的IP!为了验证这一点,我断开当前连接,重新拨号,这时我的IP已经改变,这次果然恢复正常了。

我的经历证明Bad Behavior确实强悍,但同时也突出了它的一个隐患–过于依赖Spamhaus将可能使它成为“宁可错杀一千,不可放过一个”的暴君,而实际上像我此次的遭遇并不会罕见,想象一下,大多数公司都在内部使用LAN,对外访问只使用同一个公网IP,如果公司内有人在网络上搞破坏导致该公网IP被列入黑名单,那么整个公司就将无法访问有类似BB这样的门神守护的网站,这实在不是一个令人愉快的发现!相比之下,或许还是SK2的处理方式更好一些?

Update:天佑给出了一个解决办法,请遇到类似问题的BB用户帮助测试

  1. Spamhaus的两个黑名单数据库 [back]

Wordpress 2.× Filter完全列表

Friday, April 21st, 2006

Simple Thoughts的Wordpress 2.× Filter完全列表,对于WP插件和主题的开发者很有用。