代码之家  ›  专栏  ›  技术社区  ›  Andrew G. Johnson

缓慢加载jquery自动完成

  •  2
  • Andrew G. Johnson  · 技术社区  · 15 年前

    嗨,我正在使用jquery为我的公司构建一个内部应用程序 autocomplete 我发现它开始的速度很慢。我的假设是,瓶颈可能是将其元素添加到dom中,因为在第一次查询之后,它看起来要快得多。是否有人知道如何在页面加载时预加载这些元素,而不是在用户开始键入时第一次加载?

    2 回复  |  直到 12 年前
        1
  •  1
  •   serg    15 年前

    如果不必使用ajax调用来检索数据,并且自动完成列表不太大,则可以从js对象数组中为自动完成提供数据。

    让我们假设您拥有这样的数据(您可以尽早构建):

    var data = [{"n":name, "p":pagename,"c":number_of_results},...];
    

    然后自动完成调用将显示:

    $("#autocomplete").autocomplete(data, {
        matchContains: true,
        formatItem: function(row, i, max) {
            return row.n + " ("+row.c+")";
        },
        formatMatch: function(row, i, max) {
            return row.n;
        },
        formatResult: function(row) {
            return row.n;
        }
    
    });
    $("#autocomplete").result(function(event, data, formatted) {
        if(!data) {
            alert("Please select an item");
        } else {
            window.location.href =  data.p;
        }
    });
    

    这将创建一个看起来像 item name (number of results) ,单击某个项目时,它将重定向到相应的项目页面名。

    我有大约1000个项目和自动完成的速度是即时的。

        2
  •  0
  •   Mxyk Edda    12 年前

    php/sql上的服务器端速度很慢。

    不要使用php/sql。我的自动完成写在C++上,并使用哈希表来查找。 见性能 here .

    这是celeron-300计算机,freebsd,apache/fastcgi。

    而且,你看,在大字典上运行得很快。 10000000条记录不是问题。

    此外,还支持优先级、动态翻译和其他功能。