PHP搜索功能让我的网站崩溃

Posted

技术标签:

【中文标题】PHP搜索功能让我的网站崩溃【英文标题】:PHP search funtion makes my website collapse 【发布时间】:2017-12-13 05:11:21 【问题描述】:

我只是创建了一个具有搜索功能的网页,并且在每次搜索中我都有一个数据库查询来返回建议。但是当我触发这个 onkeyup 函数太多次(我的意思是 10-20 次)时,因为它在尝试时一次又一次地被触发,在太多触发网站崩溃并给我一个错误页面之后,标准谷歌杂项错误页面(不是 php错误页面解释什么是错误的)1分钟后,一切正常。你有什么想法吗?

谢谢。

这是我的 JS 代码

    var timer;
    $('#search').keyup(function(e)
            timer = setTimeout(function()
        var searchname = $('#search').val();
        $.ajax(
            url:"php/fetchsuggest.php",
            type:'POST',
            data:searchname:searchname,
            success: function(data)
                $('#fetch').show();
                $('#fetch').html(data);

                //select fetch as val
                $('.fetched').click(function()
                    var innerval=$(this).text();
                    $('#search').val(innerval);
                    $('#fetch').hide();
                    $('#search').focus();
                );             
            
        );
        ,300);
    );

【问题讨论】:

盲目地在 keyup 上触发事件是不好的做法。如果你真的想要一个 keyup 搜索,那么你应该在 javascript 中添加一个 0.5 秒的超时,并在下一个 keyup 事件上“覆盖它”(清除它并设置另一个)。如果启动了新的 ajax 请求,也会中止之前的 ajax 请求。 @apokryfos 谢谢你的回答。我明白你在说什么,我现在就试一试。我会让你知道结果。 【参考方案1】:

@apokryfos 在他的评论中完全正确。

您的onkeyup 事件处理程序以某种方式启动了 mysql 查询:可能通过从用户浏览器到 php 页面的 ajax 样式请求。然后,在 MySQL 查询有机会完成并将其结果集返回给浏览器之前,下一个事件处理程序开始另一个查询。

一旦 MySQL 查询开始(在通常的 php 实现中),它就会运行完成。即使用户在查询进行时关闭浏览器到 php 的连接也是如此。如果您的用户能够快速启动许多查询——通过快速输入——这些查询将堆积在 MySQL 服务器中,直到它耗尽资源。

这里可能存在恶性循环。用户认为“可能我的请求没有通过”并再次单击,开始另一个请求。

jQueryUI 自动完成小部件有一个delay 参数来控制发送请求的频率。 http://api.jqueryui.com/autocomplete/#option-delay 根据我的经验,一到两秒的设置会产生高质量的用户体验。您可能会发现使用这样的小部件很有帮助;其他人已经调试了用于延迟的 javascript 超时的复杂性。

【讨论】:

以上是关于PHP搜索功能让我的网站崩溃的主要内容,如果未能解决你的问题,请参考以下文章

Facebook 爬虫机器人崩溃网站

PHP实现维护页面

php 网站可以连接到在不同服务器上运行的现有 Parse 服务器吗?

你好 我的php连接不上SQL 在网站上找需要打开php.ini也没有搜索到 该如何解决

href =“”中的PHP代码

如何让我的整个网站在移动设备上响应?