Как эффективно опросить базу данных MySQL с помощью $ http.get

** УГЛОВОЙ 1.X **
Здравствуйте все! Мне нужна помощь в том, чтобы сделать эту функцию $ http.get асинхронной, как вы можете видеть из кода, мое текущее временное решение состоит в том, чтобы установить интервал displayData. Что, очевидно, не является эффективным решением, потому что оно занимает слишком много ресурсов ЦП, слишком много пользовательских данных и может вызвать мерцание пользовательского интерфейса. Я хочу, чтобы массив обновлялся при обновлении базы данных.
Пожалуйста, не рекомендую переходить на другие фреймворки.
благодарю вас

$scope.displayData = function() {
$http.get("read.php").success(function(data) {
$scope.links = data;
});
}
setInterval(function(){$scope.displayData();}, 500);

Это мой PHP («read.php»)

  <?php
include("../php/connect.php");
session_start();
$output = array();
$team_id = $_SESSION['team_id'];
$sql  = "SELECT record_id, user_id, link, note, timestamp FROM
link_bank WHERE team_id = '$team_id' AND status = 'valid'";
$result = mysqli_query($connect, $sql);
if (mysqli_num_rows($result) > 0) {
while ($row = mysqli_fetch_array($result)) {
$output[] = $row;
}
echo json_encode($output);
}
?>

1

Решение

Некоторые детали из проверки средств отладки, есть тонны сетевых запросов, которые занимают много времени и не возвращают никаких новых данных.

введите описание изображения здесь

Использование записи на временной шкале, чтобы получить некоторые детали обработки на стороне клиента.

введите описание изображения здесь

введите описание изображения здесь

Клиентская сторона не сильно страдает из-за того, что я вижу, но без данных трудно реально оценить.

Вы можете увидеть, взяв временную шкалу, затем увеличивая часть записанных данных, какие реальные функции были вызваны и сколько времени они заняли. Есть также хорошие расширения для проверки $ watchers в угловых

https://chrome.google.com/webstore/detail/angular-watchers/nlmjblobloedpmkmmckeehnbfalnjnjk?hl=en

Ты можешь использовать {{::bindOnce}} синтаксис для уменьшения количества ваших наблюдателей, если привязки обновляются только один раз (полезно в ng-repeat много раз). Это помогает сократить время дайджеста, так как меньшее количество наблюдателей необходимо проверять на наличие изменений. Если у вас очень длинный список элементов (1000), то полезно использовать виртуальный скроллер или пользовательский интерфейс подкачки, чтобы избежать создания 1000 * элементов на элементы строки в DOM.

На стороне сервера вы можете использовать плагин / модуль xdebug для сбора данных профилирования со стороны сервера и использовать kcachegrind для оценки этих данных, чтобы найти, где сервер тратит больше всего времени, но также может использовать некоторый вид кэширования на стороне сервера и более разумная логика, позволяющая избежать постоянного попадания в базу данных, если ничего не изменилось (возможно, изучите использование Redis или memcached для ускорения этих действий на стороне сервера или посмотрите, не является ли это просто задержкой в ​​сети).

Изменение языков или структур без фактического профилирования для получения данных о том, что именно является медленным, не является хорошим ходом. IMO просто будет прыгать между тем, что является новой жаркостью, без понимания того, почему или если это имеет значение.

Пример ниже относительно быстрого ответа от PHP-скрипта. Он в основном ничего не делает, кроме того, что выдает жестко закодированный ответ JSON, используя Redis или memcached, не будет много лишних затрат, чтобы получить ответ, особенно пустой.

введите описание изображения здесь

0

Другие решения

$http.get уже асинхронный! Асинхронная функция — это просто любая функция, которая завершает свою работу в какое-то неизвестное время в будущем.

То, что вы действительно пытаетесь сделать, называется длительный опрос. Здесь вы периодически отправляете запрос на ваш сервер для получения последних данных, и есть несколько причин, по которым это не очень хорошая идея (в том числе мерцание и высокая загрузка ЦП, о которой вы говорили).

Я знаю, что вы сказали, что не хотите, чтобы кто-то предлагал другие платформы, но попытка написать собственную структуру, которая будет уведомлять клиента об обновлении базы данных, является монументальной задачей. Мы не можем дать вам ни одного короткого фрагмента кода, который бы предоставил вам такую ​​функциональность только из PHP и Javascript.

Тем не менее, вы можете попробовать развернуть свой собственный код с помощью WebSockets. Это самый простой и неструктурированный способ взаимодействия между сервером и клиентом так, как вы предлагаете.

1

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector