降低即时搜索的服务器压力

在做即时搜索(就是像百度搜索输入文本框内容的时候自动搜索出类似的信息)的时候一般都是点击键盘触发搜索事件 一般用onkeydowm或onkeyup (也许onpropertychange是很好的,但可惜在ff和chorme下是不支持的)这样每次点击键盘就会搜索 如果有很多用户的情况下,那么服务器的压力是很大的 怎么办 只能减少提交搜索次数解决了下面这两个方法是文本框每次onkeyup的触发事件---Str是搜索关键字
AjaxSearch: function (Str) {
            if (Str.trim() == "") { return false; }
            if (NetHome.PostMessage.posting == false) {     //NetHome.PostMessage.posting 一个判断是否在提交中的变量
                NetHome.PostMessage.posting = true;
                setTimeout("NetHome.Utility.AjaxSearching()", 1000);
            }
        },
        AjaxSearching: function () {
            var Str = $('#searchtxt').val().trim();//文本框的值
            $.post("/Ajax/AjaxSearch", { SearchKey: Str }, function (Msg) {
                     //处理展示搜索内容的代码
                }
                NetHome.PostMessage.posting = false;
            });
        },

这样的效果就是 第一次触发提交事件的一秒后才执行提交搜索 搜索的关键字也是一秒后输入的关键字 并且在一次提交过程中,不会再接受其他提交事件  从而大大降低每次点击键盘都提交给服务器带来的压力

注意:setTimeout的第一个参数(待执行的代码)要当作字符串输入 并且代执行的代码
如果是有参数的方法  那么参数必须是全局变量(至少不能是在这个方法中定义的变量)

posted @ 2012-01-29 22:03  我有我在  阅读(109)  评论(0编辑  收藏  举报