欢迎访问 生活随笔!

生活随笔

当前位置: 首页 > 人文社科 > 生活经验 >内容正文

生活经验

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

发布时间:2023/11/27 生活经验 44 豆豆
生活随笔 收集整理的这篇文章主要介绍了 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";

}

内存占用稳定了

来源: https://www.php1.cn/detail/php-45d0b173fb.html

总结

以上是生活随笔为你收集整理的php phpqueey内存泄露,phpQuery 占用内存过多的处理方法的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。