2016-07-22 36 views
0

我們有大約20個測試站點,它們有各種WordPress項目,我有一個工作腳本來拉取博客的名稱並將其添加到我們用於存儲的內部站點一堆信息。需要幫助優化PHP腳本拉取站點測試站點名稱

<?php 
libxml_use_internal_errors(true); 
$c = file_get_contents("http://test1.company.com"); 
$d = new DomDocument(); 
$d->loadHTML($c); 
$xp = new domxpath($d); 
foreach ($xp->query("//meta[@property='og:site_name']") as $el) { 
echo $el->getAttribute("content"); 
} 
?> 

它工作得很好我有它設置,這只是很慢,當我把它從所有20個站點拉動信息的方式。我想知道是否有一種方法來優化它如何拉動信息?

+0

解析HTML只是不快。我希望這個更快地獲得一個很大的馬力的服務器。 –

+0

您需要測量每行代碼需要執行多長時間,以確定哪些代碼真的需要優化。 – Jocelyn

+0

您可能會發現file_get_contents()調用是最慢的位,除非獲取的html很大。除非你升級你的互聯網管道,並且/或者讓你「接近」你正在挖掘的網站,否則你無法做任何事情來加速f_g_c。 –

回答

1

new DomDocument加載文檔將會很慢。想象一下,你告訴別人爲你記一本書,你真正關心的是書頁的標題。你讓他們經歷了大量的工作,你已經可以得到答案。

當您收到作爲原始字符串的內容時,請在其上運行preg_match以提取該值,尤其是因爲您知道它是og:site_name元標記的一部分。

我希望這有助於!

更新

我也採取這一步,只有這樣你就不會在整個文檔中拉取第一個1000個字符。由於您正在執行正則表達式搜索,因此您可以繞過所有的XML解析。

如果您需要獲取更多信息,那麼您可能會陷入拉動整個文檔。

這裏獲得第1000個字符的例子:

file_get_contents('./people.txt', NULL, NULL, 0, 1000);

最後兩個參數是offsetmax length。您想從第一個字符開始(0),並且只獲得1000字節/字符。

+0

我假設它不可能抵消非本地文件? – Enigma