你们真棒。
我的脚本从MYSQL中选择所有8500个客户,这在MySQL工作台中大约需要 0.16秒,这很好,但它需要浏览器 10秒才能从结果中渲染框。
是否有更快的方法来创建这个巨大的选择框?
我很难过,因为我认为所有的PHP都是在服务器端制作的,无法加速。
<body>
<select name="customer" id="customer" onChange="getcustinfo();" data-placeholder="Choose a Customer" class="chosen-select" style="width:500px;" tabindex="1">
<option value=""></option>
<?php // get the products
$sql = "
SELECT *
FROM `cust`
LEFT Join `address`
ON `cust`.`custid` = `address`.`addcustid`
and `address`.`addtype` = 'b'
WHERE `cust`.`custactive` = 'y'"
;
$result = mysqli_query($con,$sql) or die('Query failed: Could not get list of CLIENTS: ' . mysqli_error($con)); // query
while ($row = mysqli_fetch_array($result)) {
foreach ($row as $key => $value){ ${$key} = $value; }
$space="";
$endingspaces = 4-(2*strlen($prodid));
$custname = substr($row['custname'],0,15);
$address1 = substr($row['address1'],0,15);
$addcity = substr($row['addcity'],0,15);
print "<option value=\"$custid\">$custid: $space$custname, $address1, $addcity, $addstate</option>";
}
?>
</select>
</body>
答案 0 :(得分:3)
缓存。生成HTML 一次,然后将其保存在内存中(如果可以)(APC,内存缓存)或平面文件。然后在后续页面加载时,只需从缓存中读取它并将其回显。 很多更快。
答案 1 :(得分:1)
发现问题。哇。强>
问题是&#34;打印每个选项行&#34;功能。我在迭代MySQL列表的同时打印了8500个选项中的每一个。每行都是&#34;印刷&#34;并保存在内存中,然后显示在最后。
打印选项功能显然实际上是在每次迭代时将该行发送到浏览器,因此服务器不会编译选择框,而是将其逐段发送到浏览器,花费大量时间。
我修复了,让php在服务器上创建整个选择框(包括在加载项中打开和关闭SELECT标签&#34; select_box&#34;变量),然后发送当它完全完成时,它作为一个回显到浏览器。现在只用了1.2秒。
我可以忍受。
<?php // get the products
$select_box = "<select name=\"customer\" id=\"customer\" onChange=\"getcustinfo();\" data-placeholder=\"Choose a Customer\" class=\"chosen-select\" style=\"width:227px;\" tabindex=\"1\">
<option value=\"\"></option>";
$sql = "
SELECT *
FROM `cust`
LEFT Join `address`
ON `cust`.`custid` = `address`.`addcustid`
and `address`.`addtype` = 'b'
WHERE `cust`.`custactive` = 'y'"
;
$result = mysqli_query($con,$sql) or die('Query failed: Could not get list of CLIENTS: ' . mysqli_error($con)); // query
while ($row = mysqli_fetch_array($result)) {
foreach ($row as $key => $value){ ${$key} = $value; }
$space="";
$custname = substr($row['custname'],0,15);
$address1 = substr($row['address1'],0,15);
$addcity = substr($row['addcity'],0,15);
$select_box .= "<option value=\"$custid\">$custid: $space$custname, $address1, $addcity, $addstate</option>";
}
$select_box .="</select>";
echo $select_box;
?>