<div class="clock">
<div class="clock-face">
<div class="hand hour-hand"><span id="hourspan">Stunde</span></div>
<div class="hand min-hand"><span id="minspan">Minute</span></div>
<div class="hand second-hand"><span id="secondspan">Sekunde</span></div>
</div>
</div>
这是jQuery AJAX函数,运行良好,但耗时约2700毫秒,任何客户都不接受。
$(function () {
$('#barcode-form').on('submit', function (e) {
$.ajax({
type: 'post',
url: '<?= Url::to(['/sales/cart-barcode']) ?>',
data: $('#barcode-form').serialize(),
success: function () {
$( '#barcode-form' ).each(function(){this.reset();});
document.getElementById("pcode").focus();
}
});
});
});
在后端,我将获取AJAX请求的数据并编辑我的表,如以下操作所示:
<form id="barcode-form">
<?php
$a=array();
foreach ($productsAvailable as $product){
array_push($a,$product->product_code);
}
echo TypeaheadBasic::widget([
'name' => 'pcode',
'id' => 'pcode',
'data' => $a,
'options' => ['placeholder' => 'Filter as you type ...'],
'pluginOptions' => ['highlight'=>true],
]);
?>
<input type="submit" hidden/>
</form>
有人有主意吗?
答案 0 :(得分:1)
您需要执行一些profiling才能找到部分缓慢的代码。此时,您唯一能得到的就是盲目猜测。
但这是我的镜头:
$invoice = Invoice::find()->where(['status' => 1])->one();
您应该对此非常小心。 one()
没有在查询中隐式设置任何限制。这意味着如果您有100万张发票,其中status
等于1
,这会将它们全部加载到PHP并仅选择第一个,而忽略其他所有内容。这会产生明显但不明显的开销,因为所有这些额外的999999记录必须由DBMS找到并发送到PHP进程。当您将one()
用于其中的非唯一字段时,应明确设置限制:
$invoice = Invoice::find()->where(['status' => 1])->limit(1)->one();