Внесу свою каплю в этот полезный модуль/компонент. Что нашел и что сделал сам:
1. Почему то шаблон модуля не поддавался своим настройкам, поэтому немного самостоятельно переписал tmpl/mod_ajaxsearch.php
2. С включенным ошибками ПХП ругается mod_ajaxsearch/helper.php в 41 строке на не инициализированную переменную $lists. Не стал разбираться поставил @ перед $lists.
3. В ajaxsearch.css надо изменить a.highlight на span.highlight
4. В com_ajaxsearch/ajaxsearch.php для повышения безопасности и страха перед SQL инъекцией экранировал $queryString
$queryString = mysql_escape_string($queryString);
5. Так как в запросе присутствует конструкция LIKE, а mysql_escape_string не экранирует символы % и _, экранировал их вручную:
$queryString = str_replace('%','\%', $queryString);
$queryString = str_replace('_','\_', $queryString);
6. В com_ajaxsearch/ajaxsearch.php в запросе ' WHERE a.title LIKE "%'.$queryString.'%" OR a.introtext LIKE "%'.$queryString.'%" ' убрал первые знаки % в конструкции LIKE, получил в разы более точный поиск с меньшим количеством первых букв, таким образом снизил нагрузку на БД. Получилось:
' WHERE a.title LIKE "'.$queryString.'%" OR a.introtext LIKE "'.$queryString.'%" '
7. В ajaxsearch.js все-таки поставил ограничение на поисковое слово. Поиск начинается с 3 символом. Уменьшил нагрузку на БД.
8. В ajaxsearch.js перед каждой новой буквой поставил setTimeout("",100), то есть паузу в 100мс, попытка уберечь от большого количества открытых соединений к БД.
9. Соединил с com_rokdownloads, очень надо было это сделать. Таким образом запроса стало 2. =(.
10. Если бы jQuery не был бы сжат, то я бы удалил бы из него все, что не используется в модуле.
На самом деле модуль написан так, что соединить можно практически с любым компонентом.
Но все же. Нагрузка на БД осталось. Пообщался с хостером, он сказал, что на моем тарифе возможно лишь 64 открытых подключений к БД. Посещаемость сайта выше 1к в день, таким образом сайт наверняка исчерпает этот лимит. Можно написать кешь и хранить результат в фале, но тогда он разрастется сильно и рано или поздно сайт упадет на файлах.
Все что я смог придумать, так это ограничивать самостоятельно количество открытых соединений, тогда этот модуль не будет рушить сайт. Необходимо каким-то образом узнать количество открытых соединений? Как это сделать? Если известно количество открытых соединений, то их легко можно ограничить в модуле, ну скажем до 40, чтобы на остальные вещи хватало.
Заранее, спасибо.