phpQuery占用内存过多的处理方法
解决phpQuery内存占用问题
phpQuery是一个强大的开源项目,它用PHP实现了类似jQuery的功能,允许开发者以jQuery的语法形式在服务器端网页元素。相较于使用正则表达式或其他匹配网页的方法,phpQuery更为便捷。
在使用phpQuery进行网页采集时,可能会遇到一个令人头疼的问题:处理大量网页后,phpQuery占用的内存量急剧增加,很快就可能超过1GB。下面这段示例代码如果不加注意,可能会迅速耗尽你的内存资源。
代码示例:
```php
while (true) {
phpQuery::newDocumentFile($htmlFile);
// 处理网页元素...
echo memory_get_usage() . "";
}
```
谨慎运行上述代码,因为它可能会让你的服务器内存迅速耗尽。通过深入研究phpQuery的源代码,我们终于找到了问题的根源。
问题关键在于,phpQuery在处理每个网页时都会创建一个DOMDocumentWrapper对象,并将这些对象保存在静态成员变量$documents数组中(位于phpQuery::createDocumentWrapper方法中)。每当一个网页,数组元素就会增加。
代码片段:`phpQuery::$documents[$wrapper->id] = $wrapper;` 清楚地展示了这一问题。
解决问题的方式其实相当简单,那就是在每次完一个网页后,清空phpQuery::$documents数组。修改后的代码如下:
```php
while (true) {
phpQuery::newDocumentFile($htmlFile);
// 处理网页元素...
phpQuery::$documents = array();
echo memory_get_usage() . "";
}
```
通过这段代码,内存占用将得到稳定控制。现在你可以安心地使用phpQuery进行网页采集,而不用担心内存占用问题。如果你使用的是Cambrian框架的某个版本,记得调用 `cambrian.render('body')` 以确保页面渲染正常进行。
编程语言
- phpQuery占用内存过多的处理方法
- Ionic默认的Tabs模板使用实例
- ADO.Net对oracle数据库操作的实例代码
- JS数组返回去重后数据的方法解析
- jQuery+easyui中的combobox实现下拉框特效
- 如何把图片也存到数据库中去?
- JavaScript引用类型Object常见用法实例分析
- JScript 8.0 正则表达式语法
- flash 挡住层的解决方法
- ie7下利用ajax跨域盗取cookie的解决办法
- php中使用addslashes函数报错问题的解决方法
- JavaScript正则获取地址栏中参数的方法
- js统计网页在线时间的脚本
- 利用PHP扩展vld查看PHP opcode操作步骤
- 国外开发者谈为何放弃PHP而改用Python
- 详解http请求中的Content-Type