WordPress优化:为anylink插件增加缓存 - 汇站网
WordPress优化:为anylink插件增加缓存
最近更新 2022年04月05日
资源编号 21339

WordPress优化:为anylink插件增加缓存

2021-12-20 WordPress教程 0 1,279
温馨提示丨升级SVIP终身会员可免费下载海量资源
下单流程:
选择资源
赞助获取
网盘下载
额外(二次开发 网站建设)
立即下载 升级会员 下单教程 售后支持
  下载须知
下载前请认真阅读本重要提示:“如下载按钮未弹出请检查您的浏览器是否安装了某个扩展插件导致JS不兼容,换浏览器或者关闭该扩展插件即可!本站以用户的需求为基础,将最有价值的信息和资源分享给广大编程人员及源码爱好者调试、参考和研究。本站不提供任何技术服务,所有资源禁止任何商业环境使用,杜绝利用本站资源进行触犯国家法律法规,下载者如触犯以上声明,所产生的一切后果由下载者自行承担!请悉知!其次,源码模板过多不能保证每个细节都符合你的需求,也可能存在未知的BUG与瑕疵、残次和版本过旧等问题。你下载的资源和程序源码组件因其特殊性均为可复制品,所以不支持任何理由的退款兑现;请认真阅读本站声明和相关条款,谨慎斟酌后再下载”!
SVIP活动倒计时仅剩:-23时-33分-60秒523毫秒
详情介绍

最近一直在整理网站的代码,试图加快网站的速度,主要是从代码、软件和网络方面,都是从网站切换到 HTTPS 开始的。

已经连续观察 CDN 多天了,现在是检查缺口和陷阱的时候了。目前也把整个网站备份到另一个服务器,把网站解析到这个服务器本地,开始查代码。调试已打开,一些大问题已得到处理。然后对主题的代码进行了整理,网站还增加了 Redis 缓存。然而,仙森发现,即使使用 Redis,有时打开和生成一个网页也需要一秒多的时间。很不解,一直想弄清楚是什么情况。

故障排除工具
很久以前,在主题 footer.php 的末尾添加了以下代码,这样登录后就可以看到当前网页的查询次数和生成时间:

<?php if (is_user_logged_in()){
    echo "<pre>".get_num_queries().'次查询,用时';
    timer_stop(3);
    echo '秒</pre>';
?>

这个代码网络无处不在,相信很多人都添加了。在网站加入 Redis 之前,网页查询次数为 150+次,生成时间为 2-3 秒甚至更长。用了之后减少到 50+次,但有时候还是要 1 秒多,犯难了。

然后对所有优化后的主题代码进行优化后,查询次数为 30+次,生成时间减少到 1 秒左右,但是还是不满意,所以想看看执行了哪些查询,然后在网上找到了这段代码,和上面的有点类似。

首先,您需要添加代码,将查询保存在 WordPress 的根配置文件 wp-config.php 中:

define('SAVEQUERIES', true);

然后也是在 footer.php 的网页最后部分添加打印代码:

<?php
if (current_user_can('administrator')){
    global $wpdb;
    echo "<pre>";
    print_r($wpdb->queries);
    echo "</pre>";
}
?>

但是添加后看了一下,差点当场去世,这样打印出来的是一个很大的多维数组,看的人眼花缭乱,重点是太长了还显示不全。先将打印复制出来,拿到 NotePad++里面打开,依旧显得很乱。

但是,简单看一下,大数组的每个键值代表一个查询,然后出现一个查询数组。第一个值是执行的 SQL,第二个值是使用的时间,第三个值是调用代码的位置。其实我们可以做一个带循环的格子,让前端显示看起来更方便,但是比较懒。在线检查后,有一些插件可以在不修改 wp-config.php 的情况下执行相关功能,即调试查询。所以仙森懒得自己写,就装了一个来排除故障。

需要注意的是,Debug Queries 已经很久没有更新了,安装可能会报错,但仍然可以正常使用。其实 Debug query 的介绍页面也推荐使用 Debug Objects 插件,但是先试了 Debug query 之后,就懒得再试别的插件了。

疑难解答问题
当工具准备好了,就会来找出查询到底慢在哪里。

插件安装好之后,看打印出来的查询信息会更清晰。森先比较了一下。大部分的查询都是 0.00x 秒,也就是几毫秒,但只要涉及到 wp _ al _ urls 的查询,就会是瞬间甚至几百毫秒。

Wp _ al _ urls 查询-2

wp _ al _ urls 的查询

看了一下。这个表属于插件 anylink。这个插件主要是把网站上所有的外链转换成内链。单击后,您可以跳转到外部链。

对于 anylink,也在这里发了两篇相关文章:
WordPress 为 anylink 插件的跳转添加了一个漂亮的跳转页面。

WPJAM BASIC 插件与任何链接冲突

这个插件从网站建起就一直在用。这是一个非常有用的插件,但是我没想到这个插件的查询速度会很慢。

从上面的

截图

可以看到,wp _ al _ urls 的查询条件是网站链接。看看数据库。这个 SQL 是为了得到内链的 slug 记录:

Anylink 获得 slug -3

任何链接都会被删除

我在这里查找的其实是网页主体中的外部链接,以及每个评论老板的网址对应的内部链接地址。

看了一下表,没想到是 10M 大小,接近 10 万条数据,这里查询的是 al _ origURL 字段。看了一下,这个字段没有索引。

解决问题
对于 MySQL 查询,能想到的优化方法就是添加索引,所以仙森直接操作添加索引,但是报错了:

索引 al _ origURL 字段时出现错误-4

索引 al _ origURL 字段时出错

错误报告与字段的格式有关。看看这个字段的类型,它是 mediumtext。此字段用于存储网址。有些网址很长。如果是 varchar,可能会有问题。varchar 长度为 255 个字符。我在网上搜索了一段时间的解决方案,所有这些都意味着与文本相关的类型无法索引。对数据库索引了解不多,只好放弃这条路。

能想到的第一种方法是查看这个查询的代码,并找到一种方法将结果保存到 Redis 进行缓存。至于如何找到实际执行的代码,先看了一下,直接找调用的最后一段就行了。

 

如您所见,这两个 SQL 实际上是相同的。他们在查找同一个 URL,但是结果的执行时间实际上更长,所以我们真的要缓存结果。

为了优化代码,仙森在 PhpStorm 中将整个网站作为一个项目,不得不说一个好的 IDE 工具写代码真的很舒服。直接全局搜索,寻找 get_slug_by_url 的函数,成功找到代码。

搜索 get_slug_by_url 函数-6

搜索 get_slug_by_url 函数

这里有两个结果。第一个是原函数,已经被仙森注释了,第二个是仙森修改后的。

可以看到,这个函数是调用$wpdb 来执行 SQL 语句并返回结果。功能比较简单,先修改一下也有好处。

然后仙森发现 WordPress 是怎么增加缓存的,发现很简单。

WordPress 操作缓存
WordPress 为我们提供了使用对象缓存的功能,方便我们使用对象缓存。
Wp_cache_add():将数据添加到缓存中,如果数据已经存在,则返回 flase。

Wp_cache_set():将数据添加到缓存中,如果数据已经存在,缓存将覆盖该数据。

Wp_cache_get():获取缓存中的数据,如果数据不存在则返回 false。

Wp_cache_delete():从缓存中删除数据

Wp_cache_replace():替换缓存中的数据,类似于 wp_cache_set,但如果数据不存在,则不会自动添加。

Wp_cache_flush():清除所有缓存

如果没有安装redis缓存插件,则上述功能都在。/WP-includes/cache.php .如果安装了 Redis Object Cache 等插件,会自动添加一个/wp-content/object-cache.php 文件,这些函数也会存在于这个文件中存储在缓存中。

对象缓存使用示例

$result = wp_cache_get( 'my_result' );
if ( false === $result ) {
    $result = $wpdb->get_results( $query );
    wp_cache_set( 'my_result', $result );
}
对 anylink 的 get_slug_by_url 函数改造

 

any link get _ slug _ by _ URL 函数的转换
有了上面的情况,为 anylink 功能添加缓存就非常方便了。这个例子非常简单,get_slug_by_url 函数本身也很简单,所以转换如下:

public function get_slug_by_url( $url ) {
    $arr_slug = wp_cache_get( $url );
    if ( false === $arr_slug ) {
        global $wpdb;
        $arr_slug = array();
        $arr_slug = $wpdb->get_row($wpdb->prepare(
            "SELECT *
        FROM " . ANYLNK_DBTB . " 
        WHERE al_origURL = %s",
            $url
        ), ARRAY_A);
        wp_cache_set( $url, $arr_slug );
    }
    return $arr_slug;
}

 

因为示例和函数非常匹配,所以该函数与示例结构几乎相同。首先,去 Redis 获取缓存的数据。如果拿不到,就去 MySQL 查询,然后保存到 Redis。

 

提示:Redis 最好不要使用默认端口 6379,除非安全性非常好。
使用 Redis 时要注意以下几点:

1.请务必配置强密码;

2.安全组和防火墙必须在最小范围内让 Redis 端口通过,即让通过访问指定的 IP;

3.尽量不要使用默认端口。

由于 Redis 的存在,仙森经常会遇到服务器中的木马病毒防护。

摘要
一开始觉得给 WordPress 加 Redis 很麻烦。在实践中,他发现它真的很香。他建议所有有能力的朋友都去看看。毕竟,生命是无穷无尽的。本文最重要的是记录慢网页查询的过程和解决方法,希望能为其他朋友提供思路。

转载请注明:汇站网 » WordPress 优化:为 anylink 插件增加缓存

温馨提示:(本资源会持续更新),若下载链接失效,请在下方(留言)或在网站左侧导航栏 (私信)站长处理!
收藏 (0)

微信扫一扫

支付宝扫一扫

点赞 (0)

感谢您的来访,获取更多精彩资源请收藏本站。

本站声明

本资源仅用于个人学习和研究使用,禁止用于任何商业环境!

 1.  本网站名称:汇站网
 2.  本站永久网址:https://www.huizhanii.com/
 3.  本站所有资源来源于网友投稿和高价购买,所有资源仅对编程人员及源代码爱好者开放下载做参考和研究及学习,本站不提供任何技术服务!
 4.  未经原版权作者许可,禁止用于任何商业环境,任何人不得擅作它用,下载者不得用于违反国家法律,否则发生的一切法律后果自行承担!
 5.  为尊重作者版权,请在下载24小时内删除!请购买原版授权作品,支持你喜欢的作者,谢谢!
 6.  若资源侵犯了您的合法权益, 请持您的版权证书和相关原作品信息来信通知我们请来信     通知我们 我们会及时删除,给您带来的不便,我们深表歉意!
 7.  如下载链接失效、广告或者压缩包问题请联系站长处理!
 8.  如果你也有好源码或者教程,可以发布到网站,分享有金币奖励和额外收入!
 9.  本站资源售价只是赞助,收取费用仅维持本站的日常运营所需!
 10.  因源码具有可复制性,一经赞助 ,不得以任何形式退款。
 11.  更多详情请点击查看

汇站网 WordPress教程 WordPress优化:为anylink插件增加缓存 https://www.huizhanii.com/21339.html

汇站

站长资源下载中心-找源码上汇站

常见问题
  • 如果付款后没有弹出下载页面,多刷新几下,有问题联系客服!
查看详情
  • 本站所有资源版权均属于原作者所有,这里所提供资源均只能用于参考学习用,请勿直接商用。若由于商用引起版权纠纷,一切责任均由使用者承担。
查看详情

相关文章

发表评论
暂无评论
  随机评论 表情开关按钮图片
表情表情表情表情表情表情表情表情表情表情表情表情表情表情表情表情表情表情表情表情表情表情表情表情 表情表情表情表情表情表情表情 表情表情表情表情表情表情表情表情
登录后评论
联系官方客服

为您解决烦忧 - 24小时在线 专业服务

(汇站网)一个专注站长资源的平台网站,提供最新的网站模板和整站源码,内容包含各类精品网页模板,企业网站模板,网站模板,DIV+CSS模板,织梦模板,帝国cms模板,discuz模板,wordpress模板,个人博客论坛模板,上千种免费网页模板下载尽在汇站网.找源码上汇站.huizhanii.com