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


Posted in PHP onNovember 13, 2013

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";
}

内存占用稳定了。
PHP 相关文章推荐
PHP入门
Oct 09 PHP
phpmyadmin中配置文件现在需要绝密的短语密码的解决方法
Feb 11 PHP
PHP批量生成缩略图的代码
Jul 19 PHP
php二分法在IP地址查询中的应用
Aug 12 PHP
解析php中static,const与define的使用区别
Jun 18 PHP
php函数指定默认值方法的小例子
Dec 04 PHP
PHP IE中下载附件问题解决方法
Jan 07 PHP
phpmailer在服务器上不能正常发送邮件的解决办法
Jul 08 PHP
php采集内容中带有图片地址的远程图片并保存的方法
Jan 03 PHP
php查询mysql大量数据造成内存不足的解决方法
Mar 04 PHP
PHP查询附近的人及其距离的实现方法
May 11 PHP
php使用crypt()函数进行加密
Jun 08 PHP
PHP反射类ReflectionClass和ReflectionObject的使用方法
Nov 13 #PHP
php堆排序(heapsort)练习
Nov 13 #PHP
php生成EAN_13标准条形码实例
Nov 13 #PHP
使用php计算排列组合的方法
Nov 13 #PHP
测试php函数的方法
Nov 13 #PHP
PHP中判断变量为空的几种方法小结
Nov 12 #PHP
php不允许用户提交空表单(php空值判断)
Nov 12 #PHP
You might like
PHP自定义多进制的方法
2016/11/03 PHP
php 字符串中是否包含指定字符串的多种方法
2018/04/12 PHP
Javascript 对象的解释
2008/11/24 Javascript
jQuery 瀑布流 浮动布局(一)(延迟AJAX加载图片)
2012/05/23 Javascript
使用jQuery实现的网页版的个人简历(可换肤)
2013/04/19 Javascript
jquery ajax,ashx,json的用法总结
2014/02/12 Javascript
javasctipt如何显示几分钟前、几天前等
2014/04/30 Javascript
jquery图片滚动放大代码分享(2)
2015/08/28 Javascript
JS使用eval解析JSON的注意事项分析
2015/11/14 Javascript
js获取Html元素的实际宽度高度的方法
2016/05/19 Javascript
微信小程序 图片宽高自适应详解
2017/05/11 Javascript
layui点击按钮添加可编辑的一行方法
2018/08/15 Javascript
webpack之引入图片的实现及问题
2018/10/08 Javascript
angular 表单验证器验证的同时限制输入的实现
2019/04/11 Javascript
Vue.js中的组件系统
2019/05/30 Javascript
vue-cli配置flexible过程详解
2019/07/04 Javascript
详解使用JWT实现单点登录(完全跨域方案)
2019/08/02 Javascript
uni-app实现点赞评论功能
2019/11/25 Javascript
vue不操作dom实现图片轮播的示例代码
2019/12/18 Javascript
Python的一些用法分享
2012/10/07 Python
python连接sql server乱码的解决方法
2013/01/28 Python
Python导出DBF文件到Excel的方法
2015/07/25 Python
利用python程序生成word和PDF文档的方法
2017/02/14 Python
使用Python向DataFrame中指定位置添加一列或多列的方法
2019/01/29 Python
基于python操作ES实例详解
2019/11/16 Python
django项目中新增app的2种实现方法
2020/04/01 Python
Django form表单与请求的生命周期步骤详解
2020/06/07 Python
python实现批量命名照片
2020/06/18 Python
唤醒头发毛囊的秘密武器:Grow Gorgeous
2016/08/28 全球购物
路德维希•贝克(LUDWIG BECK)中文官网:德国大型美妆百货
2020/09/19 全球购物
经济信息系毕业生自荐信范文
2014/03/15 职场文书
操行评语大全
2014/04/30 职场文书
2015年行政人事工作总结
2015/05/21 职场文书
公司客户答谢酒会祝酒词
2015/08/11 职场文书
导游词之京东大峡谷旅游区
2019/10/29 职场文书
golang正则之命名分组方式
2021/04/25 Golang