上回讲了一些WordPress的优化小技巧,这次来说说typecho,对于WordPress来说,其实所谓的优化大多数是对功能的删减,而对于本身就十分简洁的typecho来说,优化主要是增加一些功能。

  首先来说访问速度的优化,一些通用的方法,例如压缩合并js和css,利用CDN等在此就不在赘述了,其实typecho本身速度已经很快了,我觉得影响速度的地方有两处,一处是后台的个人设置页面gravatar头像源没有选择国内镜像,因为一些众所周知的原因常常会加载超时,另一方面即是typecho的后台版本更新检测和官方日志,因为typecho采用了国内的服务器,后者对速度的影响很小,但考虑到typecho的更新频率,个人认为更新检测等这些功能是可以去掉的,官方发布新版更新时再根据官方日志更新即可。

  一、修改gravatar头像源为多说或者七牛镜像
  打开var/Typecho/Common.php,找到下面的代码,大概在939行。

$url = $isSecure ? 'https://secure.gravatar.com' : 'http://www.gravatar.com';

替换为:

$url = $isSecure ? 'https://secure.gravatar.com' : 'http://gravatar.duoshuo.com';

  二、去除typecho后台版本更新检测和官方日志
  打开admin/index.php,找到下面的代码,删除,大概在96-105行。

<div class="col-mb-12 col-tb-4" role="complementary">
    <section class="latest-link">
        <h3><?php _e('官方最新日志'); ?></h3>
        <div id="typecho-message">
            <ul>
                <li><?php _e('读取中...'); ?></li>
            </ul>
        </div>
    </section>
</div>

  接着找到下面的代码,删除,大概在105-147行。

<script>
$(document).ready(function () {
    var ul = $('#typecho-message ul'), cache = window.sessionStorage,
        html = cache ? cache.getItem('feed') : '',
        update = cache ? cache.getItem('update') : '';

    if (!!html) {
        ul.html(html);
    } else {
        html = '';
        $.get('<?php $options->index('/action/ajax?do=feed'); ?>', function (o) {
            for (var i = 0; i < o.length; i ++) {
                var item = o[i];
                html += '<li><span>' + item.date + '</span> <a href="' + item.link + '" target="_blank">' + item.title
                    + '</a></li>';
            }

            ul.html(html);
            cache.setItem('feed', html);
        }, 'json');
    }

    function applyUpdate(update) {
        if (update.available) {
            $('<div class="update-check"><p>'
                + '<?php _e('您当前使用的版本是 %s'); ?>'.replace('%s', update.current) + '<br />'
                + '<strong><a href="' + update.link + '" target="_blank">'
                + '<?php _e('官方最新版本是 %s'); ?>'.replace('%s', update.latest) + '</a></strong></p></div>')
            .appendTo('.welcome-board').effect('highlight');
        }
    }

    if (!!update) {
        applyUpdate($.parseJSON(update));
    } else {
        update = '';
        $.get('<?php $options->index('/action/ajax?do=checkVersion'); ?>', function (o, status, resp) {
            applyUpdate(o);
            cache.setItem('update', resp.responseText);
        }, 'json');
    }
});

</script>

  三、后台增加标签列表选择
  typecho采用的是后台直接输入标签名的方式,如果标签比较多,有时会忘记是否曾经建立过这个标签,当输入标签名时,特别是英文标签时,容易造成标签重复。例如Typechotypecho,由于大小写的区别,系统会认为这是两个标签,但很显然,我们的本意只需要有一个这样的标签即可,所以在输入标签时如果可以列出已存在标签,从而进行选择或者创建新的标签,可以很好的避免这种情况,具体方法:

  打开admin/write-post.php,找到

<p><input id="tags" name="tags" type="text" value="<?php $post->tags(',', false); ?>" class="w-100 text" /></p>

  在下面添加

<p>
<?php
$stack = Typecho_Widget::widget('Widget_Metas_Tag_Cloud')->stack;
$i = 0;
while (isset($stack[$i])) {
    echo "<a style=\"cursor:pointer\" onclick=\"t=document.getElementById('tags').value;c=t?',':'';document.getElementById('tags').value=t+c+'", $stack[$i]['slug'], "'\">", $stack[$i]['slug'], "</a>";
    $i++;
    if (isset($stack[$i])) echo ", ";
}
?>
</p>

  四、typecho 301 重定向
  打开根目录下.htaccess文件,在RewriteRule ^(.*)$ /index.php/$1 [L] 后添加

# 带 www 的跳转到不带的 
RewriteCond %{HTTP_HOST} ^www.moobei.com$ 
RewriteRule ^(.*)$ http://moobei.com/$1 [R=301,L]

  或者

# 不带 www 的跳转到带的 
RewriteCond %{HTTP_HOST} ^moobei.com$ 
RewriteRule ^(.*)$ http://www.moobei.com/$1 [R=301,L]