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 相关文章推荐
Oracle Faq(Oracle的版本)
Oct 09 PHP
PHP警告Cannot use a scalar value as an array的解决方法
Jan 11 PHP
基于php冒泡排序算法的深入理解
Jun 09 PHP
PHP字符串长度计算 - strlen()函数使用介绍
Oct 15 PHP
简单的php新闻发布系统教程
May 09 PHP
Linux下PHP安装mcrypt扩展模块笔记
Sep 10 PHP
php调用KyotoTycoon简单实例
Apr 02 PHP
PHP模板引擎Smarty内建函数详解
Apr 11 PHP
通过php动态传数据到highcharts
Apr 05 PHP
PHP接口继承及接口多继承原理与实现方法详解
Oct 18 PHP
PHP一个简单的无需刷新爬虫
Jan 05 PHP
PHP explode()函数用法讲解
Feb 15 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缓冲 output_buffering的使用详解
2013/06/13 PHP
PHP中捕获超时事件的方法实例
2015/02/12 PHP
推荐十款免费 WordPress 插件
2015/03/24 PHP
PHP加密解密类实例分析
2015/04/20 PHP
全面解读PHP的人气开发框架Laravel
2015/10/15 PHP
php处理单文件、多文件上传代码分享
2016/08/24 PHP
实例讲解PHP表单
2020/06/10 PHP
JS动画效果代码3
2008/04/03 Javascript
Javascript 生成指定范围数值随机数
2009/01/09 Javascript
dtree 网页树状菜单及传递对象集合到js内,动态生成节点
2012/04/14 Javascript
JQuery验证工具类搜集整理
2013/01/16 Javascript
JavaScript 实现类的多种方法实例
2013/05/01 Javascript
javascript禁用Tab键脚本实例
2013/11/22 Javascript
浅谈nodeName,nodeValue,nodeType,typeof 的区别
2015/01/13 Javascript
实例代码详解jquery.slides.js
2015/11/16 Javascript
BootStrap CSS全局样式和表格样式源码解析
2017/01/20 Javascript
Bootstrap进度条学习使用
2017/02/09 Javascript
Vue+SpringBoot开发V部落博客管理平台
2017/12/27 Javascript
vue使用showdown并实现代码区域高亮的示例代码
2019/10/17 Javascript
js中addEventListener()与removeEventListener()用法案例分析
2020/03/02 Javascript
es6函数name属性功能与用法实例分析
2020/04/18 Javascript
vue+vant 上传图片需要注意的地方
2021/01/03 Vue.js
Python中的is和id用法分析
2015/01/26 Python
python中实现延时回调普通函数示例代码
2017/09/08 Python
详解基于django实现的webssh简单例子
2018/07/17 Python
python中多个装饰器的执行顺序详解
2018/10/08 Python
Django csrf 两种方法设置form的实例
2019/02/03 Python
python 实现音频叠加的示例
2020/10/29 Python
Python 数据分析之逐块读取文本的实现
2020/12/14 Python
全球虚拟主机商:HostGator
2017/02/06 全球购物
LTD Commodities:礼品,独特发现,家居装饰,家用器皿
2017/08/11 全球购物
JPA的特点
2014/10/25 面试题
市场营销方案范文
2014/03/11 职场文书
追悼词范文大全
2015/06/23 职场文书
结婚幸福感言
2015/08/01 职场文书
幼儿园托班开学寄语(2016秋季)
2015/12/03 职场文书