2016-07-25 110 views
0

我需要减少脚本的加载时间。这是卷曲和简单的解析dom。 这是我的脚本,我需要帮助:( 它持续约2分钟,我需要分析很多不同的页面!如何减少curl和解析html的加载时间

require_once ("simple_html_dom.php"); 

    function curl ($page){ 
     ob_start(); 
     $ch = curl_init(); 
     curl_setopt($ch, CURLOPT_URL, "URL"); 
     curl_setopt($ch, CURLOPT_POST, 1); 
     curl_setopt($ch, CURLOPT_POSTFIELDS, "POSTFIELDS"); 
     curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
     $result = curl_exec($ch); 
     curl_close($ch); 
     ob_end_clean(); 
     return $result; 
    } 
    $start = microtime(true); 
    set_time_limit(0); 
    $text = "here text of last page"; 

    $i = 0; 
    while(strpos(str_get_html(curl($i)), $text) == null){ 
     $html = str_get_html(curl($i)); 
     foreach($html->find('div#box-container-inner div.box') as $e){ 
PRINT etc... only for test 
     } 
     echo "parsata la pagina ".($i+1)."<br>"; 
     $i++; 
    } 
    $time_elapsed_secs = (microtime(true) - $start)/60; 
    echo $time_elapsed_secs; 
+0

所以,一些意见。您似乎在每个循环中运行两次CURL(一次评估while循环条件,一次设置“$ html”)并将结果字符串转换为每个循环的对象。你可以尝试'while(strpos(($ html = str_get_html(curl($ i))),$ text)=== null){'并移除$ html = str_get_html(curl($ i));'line 。 –

+0

脚本运行时有多少页面正在读取,出于好奇? –

+0

@ChrisForrence如果我写while(strpos(($ html = str_get_html(curl($ i))),$ text)=== null){没有第一行while,我只得到echo $ time_elapsed_secs; :( 我必须解析大约17/18页,它是一个动态内容 – Joseph

回答

0

你似乎是在每个循环两次运行卷曲(一次评估while循环状态,一旦设置$ HTML)和生成的字符串转换成对象为每个循环,这是四个潜在的密集过程每当你循环时,你可以击倒两个循环。

相反,你可以在while循环评估中的$ HTML变量分配给的str_get_html(curl($i))结果:

while(strpos(($html = str_get_html(curl($i))), $text) === false) { 
// $html = str_get_html(curl($i)); 
0

只需添加卷曲而超时参数设置为60秒或您选择。

curl_setopt($ CH,CURLOPT_TIMEOUT,60);

相关问题