wordpress-theme-puock icon indicating copy to clipboard operation
wordpress-theme-puock copied to clipboard

文章连续点赞导致cpu持续100%

Open HiddenScholars opened this issue 1 year ago • 7 comments

  • 主题版本号:2.7.10
  • WordPress版本:6.3.1
  • PHP版本:8.0.26
  • 问题阐述:你好,在使用该主题过程中,文章点赞没有任何限制,持续一直点赞会造成服务器cpu一直100%,导致其他正常流量无法处理

HiddenScholars avatar Sep 07 '23 13:09 HiddenScholars

  1. 单人对单文章是不可以持续点赞的
  2. 检查是否有其他插件导致此原因的

Licoy avatar Sep 08 '23 04:09 Licoy

打开f12后,页面点赞一次向服务器发送一次post请求,都被服务器处理占用服务器资源导致正常用户无法访问,其他按钮没有这个问题

HiddenScholars avatar Sep 08 '23 09:09 HiddenScholars

这个业务很简单的,你可以查看源码,我感觉不应该是这个导致的

Licoy avatar Sep 13 '23 12:09 Licoy

确实是有这个问题,就算已经点赞了也会向后端请求验证是否已经点赞,连续点击的话会造成cpu占用增大,我加了个节流函数

{
    key: "eventSendPostLike",
    value: function() {
        var a = this;
        var lastClickTime = 0;  // 上次点击的时间
        var throttleTime = 2000; // 节流时间为2000毫秒

        $(document).on("click", "#post-like", function(t) {
            var currentTime = new Date().getTime(); // 获取当前时间

            // 如果时间差大于节流时间,则发送请求
            if (currentTime - lastClickTime >= throttleTime) {
                lastClickTime = currentTime; // 更新上次点击时间

                var e = $(a.ct(t)),
                    t = e.attr("data-id");

                // 在请求过程中禁用按钮
                e.prop("disabled", true);

                $.post("/wp-admin/admin-ajax.php", {
                    action: "puock_like",
                    um_id: t,
                    um_action: "like"
                }, function(t) {
                    0 === t.e ? (e.find("span").html(t.d),
                        e.addClass("bg-primary text-light")) : a.toast(t.t)
                }, "json").fail(function() {
                    a.toast("点赞异常", TYPE_DANGER)
                }).always(function() {
                    // 无论请求成功还是失败,总是重新启用按钮
                    e.prop("disabled", false);
                });
            } else {
                a.toast("太多请求,开始节流", TYPE_DANGER);
            }
        });
    }
}

oliverkirk-sudo avatar Oct 15 '23 08:10 oliverkirk-sudo

确实是有这个问题,就算已经点赞了也会向后端请求验证是否已经点赞,连续点击的话会造成cpu占用增大,我加了个节流函数

{
    key: "eventSendPostLike",
    value: function() {
        var a = this;
        var lastClickTime = 0;  // 上次点击的时间
        var throttleTime = 2000; // 节流时间为2000毫秒

        $(document).on("click", "#post-like", function(t) {
            var currentTime = new Date().getTime(); // 获取当前时间

            // 如果时间差大于节流时间,则发送请求
            if (currentTime - lastClickTime >= throttleTime) {
                lastClickTime = currentTime; // 更新上次点击时间

                var e = $(a.ct(t)),
                    t = e.attr("data-id");

                // 在请求过程中禁用按钮
                e.prop("disabled", true);

                $.post("/wp-admin/admin-ajax.php", {
                    action: "puock_like",
                    um_id: t,
                    um_action: "like"
                }, function(t) {
                    0 === t.e ? (e.find("span").html(t.d),
                        e.addClass("bg-primary text-light")) : a.toast(t.t)
                }, "json").fail(function() {
                    a.toast("点赞异常", TYPE_DANGER)
                }).always(function() {
                    // 无论请求成功还是失败,总是重新启用按钮
                    e.prop("disabled", false);
                });
            } else {
                a.toast("太多请求,开始节流", TYPE_DANGER);
            }
        });
    }
}

大佬,我需要在哪里添加这个代码实现节流

Tyler913 avatar Apr 30 '24 03:04 Tyler913

打开f12后,页面点赞一次向服务器发送一次post请求,都被服务器处理占用服务器资源导致正常用户无法访问,其他按钮没有这个问题

我很无聊的试了一下,只要三个设备一起点15秒左右。我那个2核心的小肉鸡就宕机了

Tyler913 avatar Apr 30 '24 04:04 Tyler913

打开f12后,页面点赞一次向服务器发送一次post请求,都被服务器处理占用服务器资源导致正常用户无法访问,其他按钮没有这个问题

我很无聊的试了一下,只要三个设备一起点15秒左右。我那个2核心的小肉鸡就宕机了

你可以全局搜索一下 key: "eventSendPostLike",看这个文本在哪

oliverkirk-sudo avatar Apr 30 '24 04:04 oliverkirk-sudo

v2.8.6会优化此功能,感谢 @oliverkirk-sudo 提供的方向

Licoy avatar Aug 19 '24 03:08 Licoy