ホームページ  >  記事  >  バックエンド開発  >  phpQueryがメモリを大量に消費する場合の対処方法

phpQueryがメモリを大量に消費する場合の対処方法

WBOY
WBOYオリジナル
2016-06-20 13:03:01823ブラウズ

phpQuery による過剰なメモリ使用量に対処する方法

phpQuery がメモリを大量に消費する問題を解決する

phpQuery は、php で実装された jQuery に似たオープン ソース プロジェクトで、サーバー側で jQuery 構文の Web ページ要素を解析できます。 Web ページを照合する通常の方法や他の方法と比較して、phpQuery は非常に使いやすいです。

phpQuery を使用して Web ページを収集しているときに、問題が発生しました。大量の Web ページを処理した後、phpQuery が驚くべき量のメモリ (すぐに 1G を超えます) を占有しました。
たとえば、次のコード:

while (true) {
    phpQuery::newDocumentFile($htmlFile);
    // 处理网页元素...
    echo memory_get_usage() . "\n";
}


上記のコードを実行するとメモリがすぐに消費されてしまうので注意してください。
phpQuery のソース コードを確認したところ、phpQuery は Web ページを処理するたびに DOMDocumentWrapper オブジェクトを生成し、各 DOMDocumentWrapper オブジェクトは静的メンバーである $documents (phpQuery::createDocumentWrapper) 変数に保存されることがわかりました。 Web ページの配列要素が解析されるたびに増加する配列です。
phpQuery::$documents[$wrapper->id] = $wrapper;
問題が見つかったら、Web ページを解析するたびに phpQuery::$documents を空白のままにするだけで、簡単に解決できます。


while (true) {
    phpQuery::newDocumentFile($htmlFile);
    // 处理网页元素...
    phpQuery::$documents = array();
    echo memory_get_usage() . "\n";
}

メモリ使用量が安定しました。


声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。