因此,我这里有一个PHP应用程序,其中包含许多JS,它们将ajax请求返回给PHP,以进行数据库请求。我正在添加一个服务工作人员,主要是为了缓存事物并启用推送通知,但是这些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);
}
Serviceworker Fetch:
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;
}
});
(在此处添加换行符只是为了提高可读性)
^^我只想在重新验证静态资产(仍处于开发阶段,并且这些atm经常更改时)过时,然后直接从网络中获取其余信息。
有什么想法吗?
编辑:以下是示例网络时间轴:
编辑:因此,我删除了serviceworker,并将MySQL响应作为硬编码变量复制到了PHP中,只是返回了该响应,而计时仍然很糟糕。返回该请求的时间约为2-4秒。 WTF。
编辑:所以这变得越来越陌生了。我已经了解了性能api并设置了一些测量标记。我在ajax调用中将beforeSend设置为开始,然后在整个ajax块之后立即将结束标记设置为0.4ms。我还在整个脚本周围设置了另一组标记,这是索引页面上两个ajax调用所在的位置,其中还包括一些数学运算和初始化chart.js图表。整个脚本平均大约需要400毫秒才能运行。
因此,对于chrome开发工具中的“等待”计时器所显示的“完成”呼叫并显示图表需要2-4秒的时间,我现在更加困惑。
答案 0 :(得分:0)
好的,通常我会删除它-但我认为我会将解决方案发布在这里,供其他可能遇到类似问题的人使用。
因此,当然这实际上不是ajax或mysql出现问题。.这只是我在发出这些请求之前加载的另一部分代码。我通过启用php-fpm慢日志并观看它来找到它。可以在/etc/php/[version number]/fpm/pool.d/www.conf
下启用(在基于Ubuntu / Debian的发行版中)。