今天小编在逛免费资源部落时无意中发现部落的网站头部加上了一段以前从来没见过的代码,下面是当时免费资源部落的头部代码截图:
小编以前也没见过 dns prefetch 这类标签,dns prefetch 翻译成中文大概是 dns 预取、 dns 预读的意思 (PS:小编英语烂~翻译的大概意思就是这样) 。当时小编就觉得很奇怪了这类标签怎么没听说过啊,正好没事小编就去请教一下谷歌老师。谷老师立即丢出一条链接来:Controlling DNS prefetching 链接是 Firefox 官方文档的,绝对权威。文档的中说的 dns prefetch 标签是在读取一个网站页面时,把规定好的几个域名的 dns 事先都解析好,从而达到给网站加速的效果。好了既然了解 dns prefetch 标签的作用,那么骚年还等什么动手吧!给自己的网站加上一个。
那么下面小编来教大家如何让 WordPress 支持 dns prefetch 标签。
function wxd_dns_prefetch() { <meta http-equiv="x-dns-prefetch-control" content="on" /> <link rel="dns-prefetch" href="//bdimg.share.baidu.com/" /> <link rel="dns-prefetch" href="//api.share.baidu.com/" /> <link rel="dns-prefetch" href="//hm.baidu.com/" /> <link rel="dns-prefetch" href="//0.gravatar.com/" /> <link rel="dns-prefetch" href="//1.gravatar.com/" /> } add_action( 'wp_head', 'wxd_dns_prefetch');
在 WordPress 主题的 functions.php 文件中加上以上代码后 WordPress 就会自动在头部载入 dns prefetch 标签,当然这个前提是你的主题加载了 wp_head() 钩子。不过以上代码是全局载入的,也就是说在每个页面都会载入这段代码,如果每个页面都设置了 dns 预取域名的话则每个页面都要对设置中的域名做一次预取操作这样一来预取标签就相当于没有用了,那么如何只让首页加载 dns 预取标签呢?其实我们可以给代码加上个判断,即可。
function wxd_dns_prefetch() { wp_reset_query(); if(is_home()){?> <meta http-equiv="x-dns-prefetch-control" content="on" /> <link rel="dns-prefetch" href="//bdimg.share.baidu.com/" /> <link rel="dns-prefetch" href="//api.share.baidu.com/" /> <link rel="dns-prefetch" href="//hm.baidu.com/" /> <link rel="dns-prefetch" href="//0.gravatar.com/" /> <link rel="dns-prefetch" href="//1.gravatar.com/" /> <?php } } add_action( 'wp_head', 'wxd_dns_prefetch');
但是如果只在网站首页显示 dns 预取标签的话,入口页面不在首页的访客就感觉不到 dns 预取的加速效果了,其实我们可以给访客的浏览器写入一个 cookies 来判断访客是否为第一访问网站,如果是第一次访问则在入口页面输出 dns 预取标签,那么 WordPress 如何来写入 cookie 呢?小编之前曾经写过一篇 WordPress 写入 cookie 的教程 《WordPress 二次开发教程手记:写入 cookie 记录访客行为》,我们再将两篇文章的代码结合起来使用,首先在 functions.php 文件中加上以下代码:
function set_newuser_cookie() { if (!isset($_COOKIE['wxd_cookie'])) { setcookie('wxd_cookie', 1, time()+1209600, COOKIEPATH, COOKIE_DOMAIN, false); } } add_action('after_setup_theme', 'set_newuser_cookie');
然后在主题文件夹下新建一个 dns.php 文件并加入以下代码:
<?php if (is_home()) { //判断当前页面是否为首页 echo ' <meta http-equiv="x-dns-prefetch-control" content="on" /> //开启 dns 预取 <link rel="dns-prefetch" href="//bdimg.share.baidu.com/" /> <link rel="dns-prefetch" href="//api.share.baidu.com/" /> <link rel="dns-prefetch" href="//hm.baidu.com/" /> <link rel="dns-prefetch" href="//0.gravatar.com/" /> <link rel="dns-prefetch" href="//1.gravatar.com/" /> '; } elseif (isset($_COOKIE['wxd_cookie'])) { //判断是否为初次访问 echo '<meta name="author" content="WordPress Dns Prefetch Is By NaiZui" /> '; } else { echo ' <meta http-equiv="x-dns-prefetch-control" content="on" /> <link rel="dns-prefetch" href="//bdimg.share.baidu.com/" /> <link rel="dns-prefetch" href="//api.share.baidu.com/" /> <link rel="dns-prefetch" href="//hm.baidu.com/" /> <link rel="dns-prefetch" href="//0.gravatar.com/" /> <link rel="dns-prefetch" href="//1.gravatar.com/" /> '; } ?>
然后在主题的 header.php 文件的</head> 标签之前加入以下代码:
<?php include TEMPLATEPATH. '/dns.php'; ?>
好了这样一来 WordPress 将只在首页和访客初次访问的时候显示 dns 预取标签了 (PS:预取域名可以按照自己网站的具体需求去设置) 。另外再说下,大家搞网站都不容易,有时候心血来潮花个几个小时写原创也不容易吧?某些人转载留个链接你也不损失什么是吧?你觉得被人家鄙视好还是留个链接好呢?