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文件向另一个地址post数据,不用表单和隐藏的变量的
Mar 06 PHP
理解PHP5中static和const关键字的区别
Mar 19 PHP
PHP 上传文件大小限制
Jul 05 PHP
解决PHP在DOS命令行下却无法链接MySQL的技术笔记
Dec 29 PHP
smarty中post用法实例
Nov 28 PHP
PHP与Ajax相结合实现登录验证小Demo
Mar 16 PHP
Laravel5中防止XSS跨站攻击的方法
Oct 10 PHP
Yii2框架制作RESTful风格的API快速入门教程
Nov 08 PHP
PHP 500报错的快速解决方法
Dec 14 PHP
php连接MSsql server的五种方法总结
Mar 04 PHP
php7 参数、整形及字符串处理机制修改实例分析
May 25 PHP
PHP获取学生成绩的方法
Nov 17 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原生模板引擎 最简单的模板引擎
2012/04/25 PHP
PHP中多维数组的foreach遍历示例
2014/06/13 PHP
在 Laravel 中动态隐藏 API 字段的方法
2019/10/25 PHP
JQuery对class属性的操作实现按钮开关效果
2013/10/11 Javascript
非jQuery实现照片散落桌子上,单击放大的LightBox效果
2014/11/28 Javascript
jQuery操作表单常用控件方法小结
2015/03/23 Javascript
使用JQuery实现的分页插件分享
2015/11/05 Javascript
JavaScript实现数组降维详解
2017/01/05 Javascript
vue.js指令v-model使用方法
2017/03/20 Javascript
微信小程序 开发之全局配置
2017/05/05 Javascript
vue router demo详解
2017/10/13 Javascript
Koa 使用小技巧(小结)
2018/10/22 Javascript
Fundebug支持监控微信小程序HTTP请求错误的方法
2019/02/21 Javascript
Vue的编码技巧与规范使用详解
2019/08/28 Javascript
swiper实现异形轮播效果
2019/11/28 Javascript
Vue中watch、computed、updated三者的区别及用法
2020/07/27 Javascript
Vue与React的区别和优势对比
2020/12/18 Vue.js
Python工程师面试必备25条知识点
2018/01/17 Python
用python实现百度翻译的示例代码
2018/03/09 Python
python docx 中文字体设置的操作方法
2018/05/08 Python
tensorflow实现简单的卷积网络
2018/05/24 Python
flask框架实现连接sqlite3数据库的方法分析
2018/07/16 Python
浅述python2与python3的简单区别
2018/09/19 Python
python函数中将变量名转换成字符串实例
2020/05/11 Python
Tensorflow tensor 数学运算和逻辑运算方式
2020/06/30 Python
Python通过zookeeper实现分布式服务代码解析
2020/07/22 Python
使用SVG实现提示框功能的示例代码
2020/06/05 HTML / CSS
ghd澳大利亚官方网站:英国最受欢迎的美发工具品牌
2018/05/21 全球购物
读书活动总结
2014/04/28 职场文书
教育基金募捐倡议书
2014/05/14 职场文书
技术岗位竞聘演讲稿
2014/05/16 职场文书
身份证丢失证明
2015/06/19 职场文书
羊脂球读书笔记
2015/06/30 职场文书
2016年世界人口日宣传活动总结
2016/04/05 职场文书
读《庄子》有感:美而不自知
2019/11/06 职场文书
mysql 联合索引生效的条件及索引失效的条件
2021/11/20 MySQL