如何优化使用ajax调用的php函数?

如何优化使用ajax调用的php函数?,php,ajax,Php,Ajax,我目前有一个函数,您可以使用ajax请求搜索此php文件。问题是这个文件很重,导致搜索结果延迟和延迟。例如,如果我搜索John doe,搜索框中会显示:搜索John然后延迟2秒,然后添加doe。ajax请求在key up上调用,php文件如下所示: 如何优化函数以使其在返回数据时更快? 请看gif中我在那里写“你好”的演示 var延迟=20000 你看,你打了多个电话,只是一个接一个的延迟。因此,您将收到多个AJAX调用,每个调用都在20000次之后,获得竞争条件。检查值在20000之后是否发

我目前有一个函数,您可以使用ajax请求搜索此php文件。问题是这个文件很重,导致搜索结果延迟和延迟。例如,如果我搜索John doe,搜索框中会显示:搜索John然后延迟2秒,然后添加doe。ajax请求在key up上调用,php文件如下所示:

如何优化函数以使其在返回数据时更快?

请看gif中我在那里写“你好”的演示

var延迟=20000

你看,你打了多个电话,只是一个接一个的延迟。因此,您将收到多个AJAX调用,每个调用都在20000次之后,获得竞争条件。检查值在20000之后是否发生了变化,如果没有,则调用API,否则只需中断函数即可

编辑: 在伪代码中,它将是:

var delay = 20000;
await new Promise(r => setTimeout(r, delay));
if (oldTextInput == currTextInput){
        $.ajax({
            type: "POST",
            url: url,
            data: {
                term: filter,
                token: "<?= $_SESSION['sess_id']; ?>"
            }, // serializes the form's elements.
            success: function(data) {
                $(".ajaxTicketSocket").html(data);
            },
            error: function(data) {
                $(".ajaxTicketSocket").html(data);
            }
        }, 100); 
}
var延迟=20000;
等待新的承诺(r=>setTimeout(r,delay));
如果(oldTextInput==currTextInput){
$.ajax({
类型:“POST”,
url:url,
数据:{
术语:过滤器,
令牌:“
},//序列化窗体的元素。
成功:功能(数据){
$(.ajaxTicketSocket”).html(数据);
},
错误:函数(数据){
$(.ajaxTicketSocket”).html(数据);
}
}, 100); 
}

您应该在按键时添加一个600毫秒的超时,并在每次按键“缓冲”请求时重置超时,然后当用户停止输入600毫秒时,超时执行并发送请求进行搜索。我也毫不延迟地尝试了,我仍然得到与上面gif相同的延迟和结果,键入长单词时:/Check my edit。只需使用document.GetElementById从输入中获取值,在延迟之前保存旧值,并将其与延迟之后的值进行比较。
function searchAjaxTicket(str) {
        // Declare variables
        var input, filter, table, tr, td, i, txtValue, response;
        input = document.getElementById("ajaxTicket");
        filter = input.value;
        if (filter === '') {
            $('.ajaxTicketSocket').hide();
        } else {
            $('.ajaxTicketSocket').show();
        }

        if (!filter.trim()) {
            $(".ajaxTicketSocket").html('');
        } else {
            $(".ajaxTicketSocket").html('<div class="col-md-12 mt-2 searchAjaxTicketLabel">Söker efter <b>' + stripHTML(
                filter) + '</b> <i class="fas fa-spinner fa-spin" style="font-size: 0.7em;"></i></div>').fadeIn();
            // $(".ajaxTicketSocketResponse")
            var form = $(this);
            var url = '<?= $main->baseUrl(); ?>/cgi/search.php';
            var delay = 20000;
            $.ajax({
                type: "POST",
                url: url,
                data: {
                    term: filter,
                    token: "<?= $_SESSION['sess_id']; ?>"
                }, // serializes the form's elements.
                success: function(data) {
                    $(".ajaxTicketSocket").html(data);
                },
                error: function(data) {
                    $(".ajaxTicketSocket").html(data);
                }
            }, delay);

        }
    }
<input type="text" onkeyup="searchAjaxTicket(this.value)" class="form-control font-weight-light ajaxTicket" id="ajaxTicket" placeholder="Search ticket or order..." autocomplete="FALSE">
var delay = 20000;
await new Promise(r => setTimeout(r, delay));
if (oldTextInput == currTextInput){
        $.ajax({
            type: "POST",
            url: url,
            data: {
                term: filter,
                token: "<?= $_SESSION['sess_id']; ?>"
            }, // serializes the form's elements.
            success: function(data) {
                $(".ajaxTicketSocket").html(data);
            },
            error: function(data) {
                $(".ajaxTicketSocket").html(data);
            }
        }, 100); 
}