[英]Is it possible to speed up phpQuery?
我正在嘗試讀取一個12MB +文件,其中包含一個大型HTML表格,如下所示:
<table>
<tr>
<td>a</td>
<td>b</td>
<td>c</td>
<td>d</td>
<td>e</td>
</tr>
<tr>
<td>a</td>
<td>b</td>
<td>c</td>
<td>d</td>
<td>e</td>
</tr>
<tr>..... up to 20,000+ rows....</tr>
</table>
現在我正在抓它:
<?
require_once 'phpQuery-onefile.php';
$d = phpQuery::newDocumentFile('http://localhost/test.html');
$last_index = 20000;
for ($i = 1; $i <= $last_index; $i++)
{
$set['c1'] = $d['tr:eq('.$i.') td:eq(0)']->text();
$set['c2'] = $d['tr:eq('.$i.') td:eq(1)']->text();
$set['c3'] = $d['tr:eq('.$i.') td:eq(2)']->text();
$set['c4'] = $d['tr:eq('.$i.') td:eq(3)']->text();
$set['c5'] = $d['tr:eq('.$i.') td:eq(4)']->text();
}
// code to insert to db here...
?>
我的基准測試表明,需要大約5.25小時來刮取並向數據庫插入1,000行。 鑒於這些數據,只需要5天就能完成整個20,000多行。
我的本地計算機正在運行:
有什么方法可以加快這個過程嗎? 也許我正在以錯誤的方式刮它? 請注意,該文件可在本地訪問,因此我使用了http://localhost/test.html
更快的解決方案:
for ($i = 1; $i <= $last_index; $i++)
{
$r = $d['tr:eq('.$i.')'];
$set['c1'] = $r['td:eq(0)']->text();
$set['c2'] = $r['td:eq(1)']->text();
$set['c3'] = $r['td:eq(2)']->text();
$set['c4'] = $r['td:eq(3)']->text();
$set['c5'] = $r['td:eq(4)']->text();
}
// code to insert to db here...
?>
我從來沒有使用過phpQuery,但這看起來像是解析一個巨大文檔的一種非常優化的方式:每當你使用tr:eq('.$i.')
加載一行時,phpQuery可能需要遍歷整個事情tr:eq('.$i.')
。
更簡單(也可能更快)的方法是簡單地遍歷文檔的每個tr
元素,並在foreach
循環中處理每個元素的子元素。 你甚至不需要phpQuery。
有關各種解決方案,請參見如何在PHP中解析XML文件 。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.