簡體   English   中英

如何加快這個PHP腳本的執行速度

[英]How to speed up the execution of this PHP script

我已經編寫了一個用於webscraping的腳本,我從頁面獲取每個鏈接並在代碼中加載該URL,這工作速度非常慢,這對於第一次輸出大約需要50秒,並且需要一個年齡來完成大約100個鏈接,我是不知道為什么這個工作如此緩慢,我正在考慮緩存,但不知道這對我們有什么幫助。

1)頁面緩存或操作碼緩存。

代碼是:

public function searchForum(){
        global $wpdb;
        $sUrl = $this->getSearchUrl();
        $this->logToCrawler();
        $cid = $this->getCrawlId();
        $html = file_get_dom($sUrl);

        $c=1;
        foreach($html('div.gridBlobTitle a:first-child') as $element){
            $post_page = file_get_dom($element->href);
            $post_meta = array();
            foreach($post_page('table#mytable img:first-child') as $img){
                if(isset($img->src)){
                    $post_meta['image_main'] =  self::$forumurl.$img->src;          
                }
                else{
                    $post_meta['image_main']=NULL;
                }
            }

            foreach($post_page('table.preferences td:odd') as $elm){
                $post_meta[] = strip_tags($elm->getInnerText());
                unset($elm);
            }

            /*Check if can call getPlainText for description fetch*/

            $object = $post_page('td.collection',2);
            $methodVariable = array($object, 'getPlainText');

            if(is_callable($methodVariable, true, $callable_name)){
                $post_meta['description'] = utf8_encode($object->getPlainText());               
            }
            else{
                $post_meta['description'] = NULL;
            }

            $methodVariable = array($object, 'getInnerText');
            if(is_callable($methodVariable, true, $callable_name)){
                /*Get all the images we found*/
                $rough_html = $object->getInnerText();

                preg_match_all("/<img .*?(?=src)src=\"([^\"]+)\"/si", $rough_html, $matches); 
                $images = array_map('self::addUrlToItems',$matches[1]);
                $images = json_encode($images);
            }

            if($post_meta[8]=='WTB: Want To Buy'){
                $status='buy';
            }
            else{
                $status='sell';             
            }
            $lastdate = strtotime(date('Y-m-d',strtotime("-1 month")));
            $listdate = strtotime(date('Y-m-d',strtotime($post_meta[9])));

            /*Check for date*/
            if($listdate>=$lastdate){

                $wpdb->query("INSERT 
                                    INTO tbl_scrubed_data SET 
                                    keywords='".esc_sql($this->getForumSettings()->search_meta)."',
                                    url_to_post='".esc_sql($element->href)."',
                                    description='".esc_sql($post_meta['description'])."',
                                    date_captured=now(),crawl_id='".$cid."',
                                    image_main='".esc_sql($post_meta['image_main'])."',
                                    images='".esc_sql($images)."',brand='".esc_sql($post_meta[0])."',
                                    series='".esc_sql($post_meta[1])."',model='".esc_sql($post_meta[2])."',
                                    watch_condition='".esc_sql($post_meta[3])."',box='".esc_sql($post_meta[4])."',
                                    papers='".esc_sql($post_meta[5])."',year='".esc_sql($post_meta[6])."',case_size='".esc_sql($post_meta[7])."',status='".esc_sql($post_meta[8])."',listed='".esc_sql($post_meta[9])."',
                                    asking_price='".esc_sql($post_meta[10])."',retail_price='".esc_sql($post_meta[11])."',payment_info='".esc_sql($post_meta[12])."',forum_id='".$this->getForumSettings()->ID."'");    

                unset($element,$post_page,$images);
            } /*END: Check for date*/

        }
        $c++;
    }

注意 :
1)我使用[Ganon DOM Parser] [1]來解析HTML。 [1]: https//code.google.com/p/ganon/wiki/AccesElements
2)在Windows XP上使用WAMP,Mysql 5.5 PHP 5.3,1 GB的RAM。
如果您需要更多信息,請評論他們。

謝謝

你需要弄清楚程序的哪些部分很慢。 有兩種方法可以做到這一點。

1)放入一些打印聲明,打印出各個地方的時間,所以你可以說“嘿,看,這需要5秒鍾從這里到這里。”

2)使用像xdebug這樣的分析器,它將運行你的程序並在它運行時對其進行分析,然后你就可以知道代碼的哪些部分很慢。

只是看一個程序,你不能說“哦,這是加速的緩慢部分。” 不知道什么是慢的,你可能會浪費時間來加速不是慢速部件的部件。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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