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 相关文章推荐
投票管理程序
Oct 09 PHP
用PHP和ACCESS写聊天室(五)
Oct 09 PHP
php header()函数使用说明
Jul 10 PHP
php递归实现无限分类生成下拉列表的函数
Aug 08 PHP
使用php+Ajax实现唯一校验实现代码[简单应用]
Nov 29 PHP
解析php时间戳与日期的转换
Jun 06 PHP
改写函数实现PHP二维/三维数组转字符串
Sep 13 PHP
php表单请求获得数据求和示例
May 15 PHP
一个经典的PHP验证码类分享
Nov 18 PHP
使用PHP生成二维码的方法汇总
Jul 22 PHP
PHP中配置IIS7实现基本身份验证的方法
Sep 24 PHP
PHP中list方法用法示例
Dec 01 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中$美元符号与Zen Coding冲突问题解决方法分享
2014/05/28 PHP
escape、encodeURI、encodeURIComponent等方法的区别比较
2006/12/27 Javascript
javascript TextArea动态显示剩余字符
2008/10/22 Javascript
Javascript 判断Flash是否加载完成的代码
2010/04/12 Javascript
网页图片延时加载的js代码
2010/04/22 Javascript
nodejs中实现sleep功能实例
2015/03/24 NodeJs
JavaScript知识点总结(六)之JavaScript判断变量数据类型
2016/05/31 Javascript
VC调用javascript的几种方法(推荐)
2016/08/09 Javascript
JS获取html元素的标记名实现方法
2016/10/08 Javascript
JS简单获得节点元素的方法示例
2018/02/10 Javascript
JS抛物线动画实例制作
2018/02/24 Javascript
使用layui前端框架弹出form表单以及提交的示例
2019/10/25 Javascript
vue 返回上一页,页面样式错乱的解决
2019/11/14 Javascript
JavaScript实现随机点名程序
2020/03/25 Javascript
详解React 条件渲染
2020/07/08 Javascript
python中getattr函数使用方法 getattr实现工厂模式
2014/01/20 Python
详解Python编程中time模块的使用
2015/11/20 Python
Python使用爬虫抓取美女图片并保存到本地的方法【测试可用】
2018/08/30 Python
python针对不定分隔符切割提取字符串的方法
2018/10/26 Python
解决Python下json.loads()中文字符出错的问题
2018/12/19 Python
python爬虫获取小区经纬度以及结构化地址
2018/12/30 Python
pandas修改DataFrame列名的实现方法
2019/02/22 Python
在PyCharm中控制台输出日志分层级分颜色显示的方法
2019/07/11 Python
python3 使用Opencv打开USB摄像头,配置1080P分辨率的操作
2019/12/11 Python
Pycharm+Python工程,引用子模块的实现
2020/03/09 Python
python如何提升爬虫效率
2020/09/27 Python
利用CSS3实现开门效果实例源码
2016/08/22 HTML / CSS
美国最大的网上冲印店:Shutterfly
2017/01/01 全球购物
美国眼镜网:GlassesUSA
2017/09/07 全球购物
简述索引存取方法的作用和建立索引的原则
2013/03/26 面试题
消防安全管理制度
2014/02/01 职场文书
母亲节感恩寄语
2014/02/21 职场文书
导师评语大全
2014/04/26 职场文书
药剂专业自荐书
2014/06/20 职场文书
html输入两个数实现加减乘除功能
2021/07/01 HTML / CSS
剑指Offer之Java算法习题精讲二叉树专项训练
2022/03/21 Java/Android