обновление боковой панели jquery слишком чрезмерно?

#jquery

#jquery

Вопрос:

У меня на моем сайте есть 2 боковые панели, и из-за характера сайта (это игровой скрипт / сайт) некоторые их части необходимо часто обновлять — каждые 10 секунд или около того.

На левой боковой панели есть ссылка на ПОЧТУ и ссылка на ОПОВЕЩЕНИЯ, оба из которых мигают, если у вас есть новый контент в любом из них.

На правой боковой панели отображается ваша статистика, здоровье и т. Д.

Чтобы сделать это, я испортил некоторые вещи jquery. Например, для левой боковой панели у меня есть этот код в head теге моей главной страницы.

 <script>
 $(document).ready(function() {
   $("#leftbar").load("leftbar.php");
   var refreshId = setInterval(function() {
      $("#leftbar").load('leftbar.php?randval='  Math.random());
      }, 9000);
   $.ajaxSetup({ cache: false });
   });
</script>
  

Затем на боковой панели у меня есть <div id="leftbar"></div> тег, который обновляет его каждые 10 секунд. У меня то же самое для правой боковой панели.

Моя проблема в том, что в моем leftbar.php он настроен как обычная страница. Вверху он подключается к базе данных, запрашивает таблицы, а затем выводит HTML-код в зависимости от того, есть ли новый контент. Затем снова закройте соединение с БД.

Это то, как это делается? Кажется чрезмерным открывать и закрывать соединение с БД каждые 10 секунд.

ПРИМЕЧАНИЕ: я ничего не знаю о javascript / jquery

Комментарии:

1. не уверен, что понимаю вашу озабоченность. 10 секунд — это то, что вы определили. Вы беспокоитесь об использовании базы данных или сетевом трафике или о чем?

2. Использование БД действительно. Мой сайт просто работает немного медленно, и я пытаюсь точно определить, почему. Я не настолько опытен в PHP / SQL, поэтому просто проверял, делаю ли я все как обычно.

3. Я бы проверил запросы, чтобы узнать, используют ли они индексы в первую очередь, плохо сформированный SQL-запрос или плохо проиндексированные таблицы в 99,99% случаев будут причиной замедления работы (и что-то, что вы не заметили бы при программировании, поскольку обычно вы тестируете с несколькими строками, но затем в производстве, когдаданные загружаются изо дня в день, когда вы замечаете проблемы с отсутствующими индексами и т. Д.)

4. в 99% случаев «медленная» часть связана с медленными запросами. Убедитесь, что вы используете подготовленные операторы, и что ваши индексы корректны и хорошо используются.

5. я не слишком знаком со всеми терминами, такими как «подготовленные операторы», Важность индексов и т. Д., Но Все это часть обучения, да. Что бы вы назвали медленным запросом?

Ответ №1:

да, это нормально.

Для некоторых плагинов автозаполнения ajax при каждом нажатии клавиши выполняется подключение к БД, что может происходить несколько раз в секунду. Соединение не является «дорогостоящим» в mysql и большинстве db. Должен признаться, я тоже был удивлен, когда обнаружил это несколько лет назад, исходя из oracle.

Дело в том, что ajax-запрос — это полный http-запрос с заголовком и всем остальным. Вы можете сохранить соединение открытым для сеанса пользователя, но это будет стоить почти столько же, сколько закрытие и открытие нового. И некоторые случайные соединения могут накапливаться и загрязнять базу данных.

Ответ №2:

хм… хороший вопрос, мне любопытно, есть ли какие-либо рекомендации для этого.

На мой взгляд, вам следует прочитать несколько статей о технологиях NoSQL 🙂

Ответ №3:

Что ж, вы откусили немалый кусочек для своего введения в jQuery / JavaScript! 🙂

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

Вы также можете изучить технологию push (длительный опрос), чтобы сообщить вам, когда доступны обновления, вместо проведения обычного опроса. Конечно, это может поставить apache на колени.

Итак, есть несколько отличных библиотек для разгрузки такого рода работы, например, nodejs и ape, которые могут выполнять некоторые сложные вещи с помощью опроса и очень маленьких следов 🙂

Ответ №4:

Обычно это делается именно так, хотя обычно вам не нужно каждый раз вручную закрывать соединение. Обычно он достаточно умен, чтобы открывать и закрывать себя, когда он запрашивает данные. Смотрите Эти документы для mysql_close получения дополнительной информации / лучшего объяснения.

Комментарии:

1. Ах да. итак, mysql_close в нижней части моего leftbar.php стоит ли удалять?