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的FTP学习(一)
Oct 09 PHP
模拟flock实现文件锁定
Feb 14 PHP
php面向对象全攻略 (八)重载新的方法
Sep 30 PHP
使用PHP实现密保卡功能实现代码<打包下载直接运行>
Oct 09 PHP
Fine Uploader文件上传组件应用介绍
Jan 06 PHP
PHP中创建图像并绘制文字的例子
Nov 19 PHP
迪菲-赫尔曼密钥交换(Diffie?Hellman)算法原理和PHP实现版
May 12 PHP
使用php+swoole对client数据实时更新(一)
Jan 07 PHP
PHP Filter过滤器全面解析
Aug 09 PHP
php使用ftp远程上传文件类(完美解决主从文件同步问题的方法)
Sep 23 PHP
php版微信返回用户text输入的方法
Nov 14 PHP
php登录超时检测功能实例详解
Mar 21 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
六酷社区论坛HOME页清新格调免费版 下载
2007/03/07 PHP
ASP和PHP都是可以删除自身的
2007/04/09 PHP
浅析php学习的路线图
2013/07/10 PHP
PHP实现多维数组转字符串和多维数组转一维数组的方法
2015/08/08 PHP
jquery中通过过滤器获取表单元素的实现代码
2011/07/05 Javascript
jQuery中读取json文件示例代码
2013/05/10 Javascript
js换图片效果可进行定时操作
2014/06/09 Javascript
Dojo Javascript 编程规范 规范自己的JavaScript书写
2014/10/26 Javascript
Javascript学习笔记之函数篇(五) : 构造函数
2014/11/23 Javascript
使用jQuery获得内容以及内容的属性
2015/02/26 Javascript
javascript实现密码验证
2015/11/10 Javascript
js获取当前时间(昨天、今天、明天)
2016/11/23 Javascript
JS+DIV实现的卷帘效果示例
2017/03/22 Javascript
JS实现自动轮播图效果(自适应屏幕宽度+手机触屏滑动)
2017/06/19 Javascript
Node.js 的模块知识汇总
2017/08/16 Javascript
解决微信二次分享不显示摘要和图片的问题
2017/08/18 Javascript
vue项目实战总结篇
2018/02/11 Javascript
Cookbook组件形式:优化 Vue 组件的运行时性能
2018/11/25 Javascript
Node.js 进程平滑离场剖析小结
2019/01/24 Javascript
从理论角度讨论JavaScript闭包
2019/04/03 Javascript
Vue的路由及路由钩子函数的实现
2019/07/02 Javascript
Python使用win32com实现的模拟浏览器功能示例
2017/07/13 Python
使用K.function()调试keras操作
2020/06/17 Python
HTML5等待加载动画效果
2017/07/27 HTML / CSS
英国婚礼商城:Wedding Mall
2019/11/02 全球购物
商务专员岗位职责
2013/11/23 职场文书
中英文自我评价语句
2013/12/20 职场文书
童装店创业计划书
2014/01/09 职场文书
老师给学生的表扬信
2014/01/17 职场文书
战友聚会邀请函
2014/01/18 职场文书
生物科学专业职业规划书范文
2014/02/11 职场文书
请假条格式范文
2014/04/10 职场文书
党委书记个人对照检查材料
2014/09/15 职场文书
工程部文员岗位职责
2015/02/04 职场文书
浪漫的婚礼主持词
2015/06/30 职场文书
新娘婚礼答谢词
2015/09/29 职场文书