Простой поисковый движок с JavaScript.Любое предложение? - PullRequest
1 голос
/ 06 июня 2011

Я бы сделал простой поисковик с javascript.Идея состоит в том, чтобы прочитать текстовый файл на стороне сервера, разобрать его и найти любое выражение, соответствующее запросу пользователя.И да, я должен использовать сценарии на стороне клиента.

У вас есть какие-либо предложения?

Спасибо.

РЕДАКТИРОВАТЬ - Подробности для ответа на комментарии

Мне нужно проанализировать 1 файл (макс. 10.000 строк).Мне не нужно автозаполнение: я просто хочу отобразить запрос соответствия строк в элементе SELECT.Кроме того, я хотел бы избежать использования JQuery, если это возможно.

Ответы [ 3 ]

2 голосов
/ 06 июня 2011

У вас возникнут кросс-браузерные проблемы с запросом, поэтому использование библиотеки, которая абстрагируется, - это разумный выбор. Однако вот возможный каркас для необходимых вызовов.

Будьте уверены, что хранение большого файла в переменной javascript не очень разумно. Остерегайтесь того, что вы делаете!

var words = [];
var query = "";

function parseText(data) {
 // taking care of data
 // check null handle errors
 var data = data.replace(/\W+/g,' '); // replace non words with spaces
 words = data.split(' '); // split and cache this if you need it again without refetching
 doSearch(query);
}

function doSearch(query) {
  // handle the loop trough the array
  // you may save the data into a variable and use regex instead of splitting into an array
}

function handler() {
 if(this.readyState == 4 && this.status == 200) {
  // so far so good
  if(this.responseXML != null && this.responseXML != "")
     // success!
   parseText(this.responseXML);
  else
   parseText(null);
 } else if (this.readyState == 4 && this.status != 200) {
  // fetched the wrong page or network error...
  parseText(null);
 }
}

query = "someword";
var client = new XMLHttpRequest();
client.onreadystatechange = handler;
client.open("GET", "/remote.txt");
client.send();
1 голос
/ 06 июня 2011

Если я вас правильно понял, вам нужно автозаполнение.Для jQuery я мог бы порекомендовать этот .

0 голосов
/ 06 июня 2011

Некоторые общие рекомендации:

  • Если вы не хотите использовать jQuery или подобные библиотеки, используйте (микро) библиотеку по вашему выбору (например, moo.ajax (заявление об отказе: я никогда не использовал это, никаких гарантий, yada yada)), чтобы хотя бы абстрагировать AJAX-запрос для текстового файла.Не поддавайтесь искушению думать, что написать свой собственный тривиально и заставить его работать кросс-браузерно.
  • Если вы хотите оптимизировать скорость, используйте trie или аналогичную структуру, чтобы сохранитьтрек струнных.Для 10 000 строк с разумной энтропией (то есть не полностью случайными данными) требования к памяти для этого, надеюсь, не являются проблемой.Вы можете игнорировать небольшие запросы (т. Е. Менее 3 символов и т. П.).
  • Если вы хотите оптимизировать использование памяти, сохраняйте только список строк в памяти в виде массива и используйте простой цикли indexOf или регулярное выражение (имейте в виду, что /foo/.test(str) быстрее, чем str.match(/foo/)!) тестирование для получения списка совпадающих строк.
  • Использование записи innerHTML для элемента select и конкатенация строк для генерации<options>.Манипулирование тысячами элементов DOM обычно происходит намного медленнее.Убедитесь, что HTML экранирует значения, и помните, что вы можете потерять выбранное состояние (и положение прокрутки) в списке, если это важно для вашего приложения.

Надеюсь, это поможет!

...