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开发不能违背的安全规则 过滤用户输入
May 01 PHP
PHP 利用AJAX获取网页并输出的实现代码(Zjmainstay)
Aug 31 PHP
PHP函数strip_tags的一个bug浅析
May 22 PHP
PHP读取RSS(Feed)简单实例
Jun 12 PHP
Thinkphp将二维数组变为标签适用的一维数组方法总结
Oct 30 PHP
ThinkPHP连接数据库的方式汇总
Dec 05 PHP
PHP之图片上传类实例代码(加了缩略图)
Jun 30 PHP
浅谈PHP中关于foreach使用引用变量的坑
Nov 14 PHP
php 数组处理函数extract详解及实例代码
Nov 23 PHP
PHP更安全的密码加密机制Bcrypt详解
Jun 18 PHP
php把文件设置为插件的技巧方法
Feb 03 PHP
PHP连接MSSQL数据库案例,PHPWAMP多个PHP版本连接SQL Server数据库
Apr 16 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调用Java对象的方法
2006/10/09 PHP
php环境无法上传文件的解决方法
2014/04/30 PHP
php中spl_autoload详解
2014/10/17 PHP
深入讲解PHP Session及如何保持其不过期的方法
2015/08/18 PHP
CI框架常用函数封装实例
2016/11/21 PHP
php 生成加密公钥加密私钥实例详解
2017/06/16 PHP
php通过header发送自定义数据方法
2018/01/18 PHP
laravel实现图片上传预览,及编辑时可更换图片,并实时变化的例子
2019/11/14 PHP
js汉字转拼音实现代码
2013/02/06 Javascript
JS辨别访问浏览器判断是android还是ios系统
2014/08/19 Javascript
js实现左侧网页tab滑动门效果代码
2015/09/06 Javascript
基于JavaScript的操作系统你听说过吗?
2016/01/28 Javascript
jQuery遍历json的方法(推荐)
2016/06/12 Javascript
基于js实现checkbox批量选中操作
2016/11/22 Javascript
js微信扫描二维码登录网站技术原理
2016/12/01 Javascript
深入koa-bodyparser原理解析
2019/01/16 Javascript
python django 访问静态文件出现404或500错误
2017/01/20 Python
Python生成密码库功能示例
2017/05/23 Python
Pytorch入门之mnist分类实例
2018/04/14 Python
Python实现网站表单提交和模板
2019/01/15 Python
pycharm new project变成灰色的解决方法
2019/06/27 Python
python实现图片压缩代码实例
2019/08/12 Python
5款实用的python 工具推荐
2020/10/13 Python
Python+OpenCV图像处理—— 色彩空间转换
2020/10/22 Python
结合CSS3的新特性来总结垂直居中的实现方法
2016/05/30 HTML / CSS
详解Html5中video标签那些属性和方法
2019/07/01 HTML / CSS
美国畅销的跑步机品牌:ProForm
2017/02/06 全球购物
自我鉴定写作要点
2014/01/17 职场文书
大学生军训自我鉴定范文
2014/09/18 职场文书
小学重阳节活动总结
2015/03/24 职场文书
自主招生推荐信怎么写
2015/03/26 职场文书
2015年党建工作总结
2015/03/30 职场文书
外贸采购员岗位职责
2015/04/03 职场文书
老舍《猫》教学反思
2016/02/17 职场文书
【超详细】八大排序算法的各项比较以及各自特点
2021/03/31 Python
Python matplotlib可视化之绘制韦恩图
2022/02/24 Python