【对所有的用户说声抱歉,因为某些原因网站被搁置了5个月无人打理。】

广告合作 | wordpress站内搜索 | 网页配色 | 投稿 | 快捷访问 | 交流QQ群:51353722 |

当前位置:wordpress主题 > wordpress教程 > wordpress加速优化进阶教程:DNS 预获取(DNS Prefetching)

wordpress加速优化进阶教程:DNS 预获取(DNS Prefetching)

今天小V在逛免费资源部落时无意中发现部落的网站头部加上了一段以前从来没见过的代码,下面是当时免费资源部落的头部代码截图:

DNS prefetching(dns预读)

小V以前也没见过dns prefetch这类标签,dns prefetch翻译成中文大概是dns预取、dns预读的意思(PS:小V英语烂~翻译的大概意思就是这样)。当时小V就觉得很奇怪了这类标签怎么没听说过啊,正好没事小V就去请教一下谷歌老师。谷老师立即丢出一条链接来:Controlling DNS prefetching 链接是Firefox官方文档的,绝对权威。文档的中说的dns prefetch标签是在读取一个网站页面时,把规定好的几个域名的dns事先都解析好,从而达到给网站加速的效果。好了既然了解dns prefetch标签的作用,那么骚年还等什么动手吧!给自己的网站加上一个。

那么下面小V来教大家如何让wordpress支持dns prefetch标签。

function v7v3_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', 'v7v3_dns_prefetch');

wordpress主题的functions.php文件中加上以上代码后wordpress就会自动在头部载入dns prefetch标签,当然这个前提是你的主题加载了wp_head()钩子。不过以上代码是全局载入的,也就是说在每个页面都会载入这段代码,如果每个页面都设置了dns预取域名的话则每个页面都要对设置中的域名做一次预取操作这样一来预取标签就相当于没有用了,那么如何只让首页加载dns预取标签呢?其实我们可以给代码加上个判断,即可。

function v7v3_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', 'v7v3_dns_prefetch');

但是如果只在网站首页显示dns预取标签的话,入口页面不在首页的访客就感觉不到dns预取的加速效果了,其实我们可以给访客的浏览器写入一个cookies来判断访客是否为第一访问网站,如果是第一次访问则在入口页面输出dns预取标签,那么wordpress如何来写入cookie呢?小V之前曾经写过一篇wordpress写入cookie的教程《wordpress二次开发教程手记:写入cookie记录访客行为》,我们再将两篇文章的代码结合起来使用,首先在functions.php文件中加上以下代码:

function set_newuser_cookie() {
if (!isset($_COOKIE['v7v3_cookie'])) {
setcookie('v7v3_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['v7v3_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:预取域名可以按照自己网站的具体需求去设置)。另外再说下,大家搞网站都不容易,有时候心血来潮花个几个小时写原创也不容易吧?某些人转载留个链接你也不损失什么是吧?你觉得被人家鄙视好还是留个链接好呢?

温馨提示:您可以使用方向键来快速阅读本站文章。按ALT + A自动转跳到上一篇文章,按ALT + S自动转跳到下一篇文章,按ALT + Q则回到当前文章所属分类的首页,按ALT + C则随机转跳到一篇文章。
如非注明文章皆由wordpress主题下载原创,转载请注明出处!
文章链接:http://www.v7v3.com/wpjiaocheng/201308250.html
如果您觉得文章不错请把文章分享给更多人!

  1. 腻害
    14楼
    腻害:

    :arrow: 这样设置以后,每个页面源码中都会显示出dns-prefetch标签么?还是只会在第一次访问网站时出现?

    2014-03-14 03:38 [回复]
    • 小V
      小V:

      在不使用静态化插件的前提下,是每次初次访问网站才会显示。

      2014-03-14 12:25 [回复]
      • 腻害
        腻害:

        那要用这个 就不能用supercache这样的插件了么?

        2014-03-14 17:16 [回复]
        • 小V
          小V:

          不能用Mod_rewrite模式缓存 :mrgreen:

          2014-03-14 17:41 [回复]
          • 腻害
            腻害:

            :!: 那还好 用php方式也不赖啊 貌似你的博客没有用缓存?

            2014-03-14 21:01 [回复]
            • 小V
              小V:

              用了缓存,不过我的缓存方式比较奇葩 :mrgreen:

              2014-03-14 23:10 [回复]
              • 腻害
                腻害:

                :eek: 用的万网空间?速度本来就已经很不错了,加上你又是又拍云又是七牛的,速度方面已经做得很不错了。不过这个dns预取对于小站来说没啥必要吧,开启缓存就差不多了。是不是能将wordpress前后端分离呢,前端直接放静态页?不过貌似wp还没有能全站生成静态页的插件吧……

                2014-03-14 23:36 [回复]
                • 小V
                  小V:

                  dns预取也就是快上那么0.045s左右,小站的确没必要,我之前用了一段时间,现在也下撤了。

                  2014-03-14 23:44 [回复]
  2. 极雪
    13楼
    极雪:

    给力!

    2014-02-04 18:49 [回复]
  3. CYs
    12楼
    CYs:

    这文章我先收下了~~

    2013-12-10 14:45 [回复]
  4. 零度博客
    11楼
    零度博客:

    不对啊,我查看源码,访问你的每个页面都实行了预读?怎么回事

    2013-10-10 17:42 [回复]
    • 小V
      小V:

      我在测试预读的效果。

      2013-10-10 18:45 [回复]
  5. 零度博客
    10楼
    零度博客:

    话说七牛或者又拍云的这样的cdn需要预读不?

    2013-10-10 17:33 [回复]
    • 小V
      小V:

      需要的

      2013-10-10 18:34 [回复]
  6. 博主现在好像也没用dns-prefetch哦~

    2013-10-01 15:47 [回复]
    • 小V
      小V:

      用了啊,你看我主页的源代码就知道了。

      2013-10-02 07:36 [回复]
      • 不过怎么是关闭off状态呢?

        2013-10-02 11:11 [回复]
        • 小V
          小V:

          首页如果开启DNS Prefetching会连友链里的域名也预解析,在友链过多的情况下会严重影响网站速度。

          2013-10-02 11:38 [回复]
  7. 整套程序走下来,居然出错了,自已改到functions.php文件中好了!

    2013-09-06 14:14 [回复]
    • 小V
      小V:

      直接用最后一段教程的步骤就好了

      2013-09-09 12:28 [回复]
  8. 应该是有效果的,博主有没有什么好办法可以防止网站被运营商劫持?不知道现在Framekiller有没有效果

    2013-08-20 11:08 [回复]
    • 小V
      小V:

      运营商劫持这个很难处理的除了打电话投诉或者通知访客修改dns,没有更好的处理方法了,以前的框架frame劫持还可以用代码来跳出框架,现在不行了,电信什么的很少用框架劫持了。

      2013-08-20 11:20 [回复]
  9. 这个确实可以加快速度吗? :razz:

    2013-08-18 17:53 [回复]
    • 小V
      小V:

      可以的,你看我的网站就知道了,我是美国vps,速度堪比国内啊。

      2013-08-18 20:11 [回复]
  10. 来回访,支持博主!

    2013-08-18 12:20 [回复]
    • 小V
      小V:

      :grin: 多谢支持。

      2013-08-18 13:01 [回复]
  11. 海棠果
    4楼
    海棠果:

    来访问站长了,我的网站是关于创业的,有时间回访一下,多多交流,交个朋友

    2013-08-17 17:00 [回复]
    • 小V
      小V:

      嗯嗯,必须回访啊

      2013-08-17 17:16 [回复]
  12. 97world
    地板
    97world:

    不是有CDN加速吗?用了CDN加速再用这个CDN预获取效果会不会没那么明显?

    2013-08-14 10:22 [回复]
    • 小V
      小V:

      cdn和dns预读取是两个完全不同的概念,做了cdn后再用dns预读还是有效果的。

      2013-08-14 10:25 [回复]
    • 小V
      小V:

      而且这个不叫cdn预取,这个叫dns预取,也就是在预先就解析好标签中设定的域名。

      2013-08-14 10:27 [回复]
  13. 重复加载会造成DNS缓慢?

    2013-08-14 00:09 [回复]
    • 小V
      小V:

      我查了很多国外的资料,老外都是这么说的,貌似每个页面都加载这个代码的话,那每载入一次网页就要进行一次dns预取操作,所以会减慢。

      2013-08-14 07:56 [回复]
  14. I多普
    沙发
    I多普:

    教程不错哟~以后常来。

    2013-08-13 19:52 [回复]

发表评论

I多普

 表情 表情 表情 表情 表情 表情 表情 表情 表情 表情 表情 表情 表情 表情 表情 表情 表情 表情 表情 表情 表情 表情

wordpress教程
返回顶部