繁体   English   中英

为什么我的AJAX请求这么慢?

[英]Why is my AJAX request so slow?

这个AJAX请求大约需要一秒钟才能执行,我想知道是否有加速它的方法?

这是一个Twitter风格的后续/取消关注的背景下按钮单击事件。

JS:

$.ajax
({
    type: "POST",
    url: "follow.php",
    data: {id: id, shop_name: shop_name},
    context: this,
    success: function(data)
    {
        if ($(this).html() == 'Add')
        {
            $(this).toggleClass('btn-primary');
            $(this).html('<span class="glyphicon glyphicon-ok"></span> Added');
        }

        else if ($(this).html() == '<span class="glyphicon glyphicon-ok"></span> Added')
        {
            $(this).toggleClass('btn-primary');
            $(this).html('Add');
        }
    }
});

PHP:

ini_set('display_startup_errors',1);
ini_set('display_errors',1);
error_reporting(-1);

include('connect.php');

$id = $_POST['id'];
$user_id = $id['id'];
$shop_name = mysqli_escape_string($con, $_POST['shop_name']);

$feed_id_query = "SELECT DISTINCT feed_id FROM shopaholic WHERE shop_name = '$shop_name'";
$feed_id = mysqli_query($con, $feed_id_query) or die(mysqli_error($con));
$row = mysqli_fetch_array($feed_id);
$feed_id = $row[0];

$query = "SELECT * FROM sh_subscriptions WHERE user_id = $user_id AND feed_id = $feed_id";
$result = mysqli_query($con, $query) or die(mysqli_error($con));

// check if row exists
if (mysqli_num_rows($result) > 0)
{
    // row already exists, so check whether it is active
    $query2 = "SELECT * FROM sh_subscriptions WHERE user_id = $user_id AND feed_id = $feed_id AND active = 1";
    $result2 = mysqli_query($con, $query2) or die(mysqli_error($con));

    if (mysqli_num_rows($result2) > 0)
    {
        // row is active, so deactivate it
        $query3 = "UPDATE sh_subscriptions SET active = 0 WHERE user_id = $user_id AND feed_id = $feed_id";
        $result3 = mysqli_query($con, $query3) or die(mysqli_error($con));
    }

    else
    {
        // row is inactive, so activate it
        $query4 = "UPDATE sh_subscriptions SET active = 1 WHERE user_id = $user_id AND feed_id = $feed_id";
        $result4 = mysqli_query($con, $query4) or die(mysqli_error($con));
    }
}

else
{
    // row does not exist, so create it
    $query5 = "INSERT INTO sh_subscriptions (user_id, feed_id, active) VALUES ($user_id, $feed_id, 1)";
    $result5 = mysqli_query($con, $query5) or die(mysqli_error($con));
}

更新

我正在检查控制台中的AJAX加载时间。 绝大多数的时间都花在“等待”,这我相信是PHP做其工作。 它还加载比较慢的第一时间(从50毫秒慢东西至少),然后通常变快。

您可以尝试的一件事是在两个选择项中都添加“ LIMIT 1”

$feed_id_query = "SELECT DISTINCT feed_id FROM shopaholic WHERE shop_name = '$shop_name' LIMIT 1";

$query = "SELECT * FROM sh_subscriptions WHERE user_id = $user_id AND feed_id = $feed_id LIMIT 1";

由于您在每个查询中仅保留一个结果

同样在这里

$query2 = "SELECT * FROM sh_subscriptions WHERE user_id = $user_id AND feed_id = $feed_id AND active = 1 LIMIT 1";

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM