Производителен ли запрос лайв поиска на AJAX + PHP + RedBeanPHP?

Есть скрипт для отображения подсказок при поиске на сайте.
Вопрос — устойчив ли такой код, как его оптимизировать и в каких случаях сервер может лечь?

JS
$('form input[name="q"]').on('keyup keydown', function(){
			if ($(this).val().length > 1){
				$.ajax({
					response: 'text',
					url: '/assets/actions/search-hint.php',
					type: 'POST',
					dataType: "html",
					data: $('.form').serialize(),
					success: function(response){
						$('.products').html(response);
					},
				});
			} else {
				$('.products').html('');
			}
		});


PHP
if (mb_strlen($_POST['q']) > 1){
		$query = $_POST['q'];

		$products = R::find('products', 'name LIKE ? OR article LIKE ?', [
			'%' . $query . '%',
			'%' . $query . '%'
		]);

		$response = '';

		foreach ($products as $product){
			$response .= '<div class="product">';
			$response .= '<div class="img"><img src="' . $product->img_1 . '" alt="' . $product->name . '"></div>';
			$response .= '<h3>' . $product->name . ' ' . $product->article . '</h3>';
			$response .= '</div>';
		}

		echo $response;

		R::close();

	}
  • Вопрос задан
  • 85 просмотров
Пригласить эксперта
Ответы на вопрос 1
@kirill-93
У вас обычный примитивный поиск. "тяжесть" поиска зависит от размера таблицы, длины поля, индексов и мощности сервера. В целом, если значения в полях короткие, то нормально. Если у вас там тексты, то нужен полнотекстовый поиск (sphinx, elasticsearch).
Оптимизировать можно следующее:
1. нужно на стороне клиента тот момент, что сейчас у вас при каждом нажатии клавиши летит запрос. То есть если я наберу слово из 5 букв, то полетит 5 запросов. А нужен один. Используйте для этого тайм-аут. Гуглите js debounce.
2. Используйте не keyup keydown, а input. Сейчас при нажатии на клавишу у вас летит 2 запроса - при нажатии и при отжатии.

В каких случаях сервер может лечь? В случае слишком большого количества запросов к этому скрипту. Ну тут стоит отметить, что при большом количестве запросов любой сервер и любой скрипт положат рано или поздно сервер. Тут беспокоиться не о чем.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы