300字范文,内容丰富有趣,生活中的好帮手!
300字范文 > php phpqueey内存泄露 phpQuery 占用内存过多的处理方法

php phpqueey内存泄露 phpQuery 占用内存过多的处理方法

时间:2024-04-29 17:23:58

相关推荐

php phpqueey内存泄露 phpQuery 占用内存过多的处理方法

phpQuery 占用内存过多的处理方法

phpQuery 是一个用 php 实现的类似 jQuery 的开源项目, 可以在服务器端以 jQuery 的语法形式解析网页元素 相对于正则或其它方式匹配网页方式, phpQuery 使用起来要方便的多

在使用 phpQuery 采集网页时, 遇到一个问题: 在处理大量网页之后, phpQuery 占用的内存数量非常惊人 (很快就超过了 1G),

比如这段代码:

代码如下:while(true){

phpQuery::newDocumentFile($htmlFile);

// 处理网页元素...

echo memory_get_usage()."\n";

}

谨慎运行上面这段代码, 它会很快用光你的内存

经过查看 phpQuery 的源代码终于发现了问题所在, phpQuery 在每处理一个网页就会产生一个 DOMDocumentWrapper 对象, 而每个 DOMDocumentWrapper 对象会被保存在静态成员 $documents 中 (phpQuery::createDocumentWrapper 中), 这个变量是一个数组, 每解析一个网页数组元素就增加一个

phpQuery::$documents[$wrapper->id] = $wrapper;

找到问题后, 解决就很容易了, 每次解析完一个网页, 把 phpQuery::$documents 置空即可

代码如下:while(true){

phpQuery::newDocumentFile($htmlFile);

// 处理网页元素...

phpQuery::$documents=array();

echo memory_get_usage()."\n";

}

内存占用稳定了

来源: /detail/php-45d0b173fb.html

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。