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搜索功能让我的网站崩溃的主要内容,如果未能解决你的问题,请参考以下文章
php 网站可以连接到在不同服务器上运行的现有 Parse 服务器吗?