簡體   English   中英

有可能加快phpQuery的速度嗎?

[英]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多行。

我的本地計算機正在運行:

  • XAMPP
  • 贏7
  • proc,i3 2100 3.1GHz
  • ram,G.Skill RipJaws X 4GB雙
  • 硬盤,舊SATA

有什么方法可以加快這個過程嗎? 也許我正在以錯誤的方式刮它? 請注意,該文件可在本地訪問,因此我使用了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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM