2009-09-29 2 views
0

Моя поисковая программа AJAX продолжает спрашивать PHP о результатах конкретного поискового запроса. Начало PHP-скрипта читается через базу данных MySQL и инициализируется, поэтому, если PHP перезагружается, ему придется читать DB миллионы раз. Если я смогу сохранить его в живых и позволить нескольким глупым запросам AJAX обслуживаться одним запущенным экземпляром сценария PHP, я уверен, что производительность улучшится.Как вы обрабатываете несколько запросов AJAX в PHP?

Как вы обычно это делаете? Использовать услугу? Можно ли это сделать с помощью служб?

+0

это для системы маркировки? Невозможно разобрать текст для ключевых слов и найти найденные ключевые слова, превращенные в ссылку раз и навсегда? Возможно, объясните, что вы намереваетесь сделать точно. – pixeline

+0

В основном у меня есть один PHP-скрипт, который должен запрашивать запрос AJAX. Я не уверен, как я собираюсь сделать часть AJAX, но сначала я хочу понять сторону PHP. –

ответ

1

Как насчет хранения результатов БД в переменной сеанса? Сначала вы должны проверить, нет ли ключевого слова в сеансе (сеансы позволяют переносить значения переменных между обновлениями страницы), а если нет, выполните запрос db.

Чтобы сохранить его:

$_SESSION['storedQueries']['keyword']= 'its definition, from the database'; 

Чтобы искать его:

$index= array_search('keyword',array_keys($_SESSION['storedQueries'])); 
    $result = ($index) ? $_SESSION['storedQueries'][$index] : 'nothing found, you should do a db query'; 

Аякса часть довольно легко, если вы используете библиотеку JavaScript, такие как JQuery:

$('#resultZone').load('find.php',{keyword: $('input.search').val() }); 
+0

Перечисляются ли переменные сеанса по HTTP? –

+0

из документа: «Посетителю, обращающемуся к вашему веб-сайту, присваивается уникальный идентификатор, так называемый идентификатор сеанса. Он либо хранится в файле cookie на стороне пользователя, либо распространен в URL-адресе». – pixeline

1

Если вы знаете, что результаты одинаковы каждый раз, просто переместите эти результаты в переменную сеанса.

PHP сессий объясняются очень хорошо в своей документации:

http://us3.php.net/manual/en/book.session.php

2

PHP не имеет понятия долгоживущих объектов или общего состояния между потоками или запросами, каждый запрос всегда начинается с нуля (excep t для состояния сеанса, конечно). Вы можете эмулировать долгоживущие объекты путем кэширования на диск или память (см. memcached).

У вас есть особая причина для чтения всей базы данных при инициализации вашего скрипта?

1

Если результат поиска будет похож на несколько пользователей, я обычно создаю файл кеша и сериализую там набор результатов. В качестве имени файла я мог бы использовать md5sum строки, содержащей поисковый запрос и, возможно, группу пользователей. Тогда, когда Ajax нуждается в данных, мне просто нужно проверить, слишком ли старый файл, если нет, мне просто нужно отправить его клиенту или, возможно, просто перенаправить HTTP-запрос Ajax в файл (при условии, что он отформатирован правильно) , Если файл слишком старый, я просто обновляю его новым контентом.

Для сайтов с очень большим объемом memcached обычно является лучшим вариантом. А также некоторый вид кэша php-кеша и объединение SQL-соединений снижает накладные расходы при открытии SQL-соединений.

0

Подключение к БД - очень дорогостоящая операция, и вы можете обойти это, кэшируя результаты, взгляните на Zend_Cache и посмотрите, как он может спасти вас, чтобы получить головную боль.

Смежные вопросы