Есть ли способ сделать этот скрипт завершения вкладки JavaScript более эффективным? - PullRequest
1 голос
/ 05 мая 2010

Этот код необходимо интегрировать в систему чата 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, найденных?

Ответы [ 3 ]

0 голосов
/ 05 мая 2010

То, как вы сейчас это закодировали:

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

Вы проверяете длину имен пользователей и длину searchTerm, а также получаете подстроку из имен пользователей [i] КАЖДЫЙ раз, когда цикл повторяет цикл

Для любого из них, который вы не ожидаете изменить в течение цикла, вы должны сохранить их в переменной до начала цикла.

Получение значения из переменной намного быстрее, чем проверка свойства объекта или метода.

Так что-то вроде:

for(i = 0,ii=usernames.length,j=searchTerm.length; i < ii && usernames[i].substr(0,j) != searchTerm; i++);
0 голосов
/ 05 мая 2010

Микрооптимизация: вместо того, чтобы получать подстроку и сравнивать ее (создавая много временных строк) ...

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

... вы должны использовать indexOf, который не создает временных строк ...

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

Что вы подразумеваете под "обнаружением нескольких экземпляров searchTerm"? Можете ли вы привести пример проблемы, о которой вы думаете?

0 голосов
/ 05 мая 2010

Вы можете сделать это значительно более эффективным (при большом количестве пользователей), сохранив отсортированный массив и используя бинарный поиск, чтобы найти совпадение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...