我有一個需要2.8秒渲染的php頁面。該頁面包含一個腳本,該腳本通過file()
通過foreach
循環逐行(~5000行)讀取txt文件。這工作完美,並允許我包裝每一行<div>
。這一切看起來像這樣。有效查詢批量數據庫
$text_file = 'path/to/my/text/file.txt';
$lines = file($text_file);
$output = '';
foreach($lines as $line_num => $line){
$output .= '<div id="'.$line_num.'" class="line">'.htmlspecialchars($line).'</div>'."\n";
}
echo $output;
的問題是我需要查詢如果行號在數據庫中,如果是給它一個額外的類highlight
。這就是讓頁面渲染得如此之慢的原因。每行(〜5000)都在循環中查詢數據庫。這看起來像這樣。
foreach($lines as $line_num => $line){
// codeigniter is being used here
$line_exists = $this->line_model->lookup_line($line_num);
// $line_exists checks the database if the $line_num exists it will return true/false
if($line_exists){
$lines_output .= '<div id="'.$line_num.'" class="line highlight">'.htmlspecialchars($line).'</div>'."\n";
}else{
$lines_output .= '<div id="'.$line_num.'" class="line">'.htmlspecialchars($line).'</div>'."\n";
}
}
我的問題是:有沒有更有效的/更快的方式做到這一點?
這是有道理的,我只是臉上掌舵。謝謝'lookup_line檢查數據庫,如果$ line_num存在它將返回true/false' – ThomasReggi
@ThomasReggi如果檢查是如此簡單,那麼你可以根據文件中的行數簡單地在查詢中有一個範圍。 '「.. WHERE line_nunber> = 0 AND line_number <」.count($ lines)' –