Итак, у меня есть php-приложение с большим количеством JS, делающих ajax-запросы обратно в PHP для выполнения запросов к БД.Я нахожусь в процессе добавления сервис-работника, в первую очередь для кеширования и включения push-уведомлений, однако эти ajax-запросы возвращаются до 3-4, иногда 5 секунд.
Я выполнял одни и те же запросы напрямую в mysql и phpmyadmin, и они возвращаются, например, через 0,000081 секунды.Поэтому я не уверен, что может быть причиной этой задержки ..
База данных относительно проста, 5-6 таблиц.Одна таблица имеет около 10 столбцов и 120 строк, остальные только 3-4 столбца с 50-60 строк.База данных находится на локальном хосте (определен как 127.0.0.1 в конфигурации), и я уже добавил индексы на все поля, где выполняются JOIN или WHERE.
Пример кода:
Ajax-запрос:
var dCIDQ = $("#company").val();
$.ajax({
type: 'GET',
url: 'api?aedCIDc='+dCIDQ
}).then(function (data) {
$('.dcid3').select2({
multiple: true,
placeholder: 'Select CID',
data: data,
debug: true
});
});
$('.company').select2();
});
PHP:
if (isset($_GET['aedCIDc'])) {
/*****************************************
* Add Edit - Get derenCID options
*****************************************/
$dCIDcompany = mysqli_real_escape_string($dbhandle, $_GET['aedCIDc']);
$dCIDcompanyArray = array();
$result = mysqli_query($dbhandle, "SELECT lieferantCID.id as id, \
lieferantCID.derenCID as text FROM lieferantCID LEFT JOIN companies ON \
lieferantCID.lieferant = companies.id WHERE lieferantCID.lieferant LIKE \
'$dCIDcompany'") or die(mysqli_error($dbhandle));
while($resultsrows = mysqli_fetch_assoc($result)) {
$dCIDcompanyArray[] = $resultsrows;
}
echo json_encode($dCIDcompanyArray);
}
Работа с серверами:
self.addEventListener('fetch', event => {
if ((/js$/.test(event.request.url)) || \
(/css$/.test(event.request.url)) || (/jpg$/.test(event.request.url)) || \
(/png$/.test(event.request.url)) || (/svg$/.test(event.request.url)) || \
(/svg$/.test(event.request.url)) || (/woff2$/.test(event.request.url))) {
// stale while revalidate
event.respondWith(
caches.open(RUNTIME).then(function(cache) {
return cache.match(event.request).then(function(response) {
var fetchPromise = fetch(event.request).then(function(networkResponse) {
cache.put(event.request, networkResponse.clone());
return networkResponse;
})
return response || fetchPromise;
})
})
);
}
else {
event.respondWith(fetch(event.request));
return;
}
});
(разрывы строк в коде добавлены здесь только для удобства чтения)
^^ Я просто хочу устареть, переоценивая статические ресурсы (я все еще в разработке, и они довольно часто меняются), и извлекать остальное прямо из сети..
Есть идеи, что происходит?
РЕДАКТИРОВАТЬ: Вот пример временной шкалы сети:
РЕДАКТИРОВАТЬ: Таким образом, я удалил работника службы,и скопировал ответ MySQL в PHP как жестко закодированную переменную и только что возвратил это, и время было все еще плохим ... около 2-4 секунд, чтобы вернуть этот запрос.Wtf.
РЕДАКТИРОВАТЬ: Таким образом, это становится все более странным ... Я узнал об API производительности и установил некоторые метки измерения.Я установил начало вызова ajax на beforeSend, а затем метку конца сразу после всего блока ajax, это вернулось, принимая 0,4 мс.Я также установил другой набор меток вокруг всего скрипта, где находятся два вызова ajax на моей странице индекса, который также включает некоторые математические и инициализирующие диаграммы chart.js.Весь этот скрипт занимает ~ 400 мс в среднем для запуска.
Так что теперь я еще более озадачен тем, как требуется 2-4 секунды, чтобы "завершить" вызов и отобразить графики, обозначенные таймером ожидания в инструментах Chrome Dev.