【问题标题】:Is there any way to make this JavaScript tab completion script more efficient?有没有办法让这个 JavaScript 选项卡完成脚本更高效?
【发布时间】:2010-05-05 01:28:23
【问题描述】:

此代码将集成到 AJAX 聊天系统中以启用选项卡自动完成用户名:

var usernames = new Array();
usernames[0] = "Saladin";
usernames[1] = "Jyllaby";
usernames[2] = "CadaverKindler";
usernames[3] = "qbsuperstar03";

var text = "Text and something else q";

// Start of the script to be imported
var searchTerm = text.slice(text.lastIndexOf(" ") + 1);
var i;
for(i = 0; i < usernames.length && usernames[i].substr(0,searchTerm.length) != searchTerm; i++);
// End of the script to be imported

document.write(usernames[i]);

需要注意几点:用户名数组和文本变量都将通过 AJAX 从聊天本身加载(不幸的是,我不知道),最终输出将由 AJAX 处理也是。

有没有更有效的方法来做到这一点?

另外,关于如何处理找到的多个 searchTerm 实例的任何提示?

【问题讨论】:

    标签: javascript ajax performance chat


    【解决方案1】:

    微优化:而不是获取子字符串并进行比较(创建大量临时字符串)...

    usernames[i].substr(0,searchTerm.length) != searchTerm
    

    ...您应该使用 indexOf,它不会创建临时字符串...

    usernames[i].indexOf(searchTerm) == 0
    

    “找到多个 searchTerm 实例”是什么意思?你能举一个你正在考虑的问题的例子吗?

    【讨论】:

    • 如果 searchTerm 是,例如,'var' 并且有两个以 'var' 开头的用户名 - Varsity 和 Variety,假设... 在聊天情况下,您可能想要第二个结果,但目前它只选择它找到的第一个。
    • 使用 JavaScript 数组并将每个匹配的用户添加到其中。如果用户想要查看所有匹配的结果,那么您已经拥有了所有结果。如果您只想显示第一个或最后一个结果,则可以通过索引从数组中获取它。详情请见hunlock.com/blogs/Mastering_Javascript_Arrays
    【解决方案2】:

    您可以通过保持数组排序并使用二分搜索查找匹配项来显着提高效率(提供大量用户)。

    【讨论】:

      【解决方案3】:

      你现在的编码方式:

      for(i = 0; i < usernames.length && usernames[i].substr(0,searchTerm.length) != searchTerm; i++);
      

      您正在检查用户名的长度和 searchTerm 的长度,并从 usernames[i] 每次循环 uh,循环时获取 substr。

      对于您不希望在循环过程中更改的任何这些,您应该在循环开始之前将它们存储在一个变量中。

      从变量中获取值比检查对象属性或方法要快得多。

      比如:

      for(i = 0,ii=usernames.length,j=searchTerm.length; i < ii && usernames[i].substr(0,j) != searchTerm; i++);
      

      【讨论】:

        猜你喜欢
        • 2011-06-28
        • 1970-01-01
        • 2014-12-11
        • 2019-09-12
        • 2015-08-13
        • 1970-01-01
        • 2022-11-19
        • 1970-01-01
        • 2021-02-01
        相关资源
        最近更新 更多