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 pack与unpack 摸板字符字符含义
Oct 29 PHP
PHP+MySQL 手工注入语句大全 推荐
Oct 30 PHP
php 注释规范
Mar 29 PHP
通过PHP的内置函数,通过DES算法对数据加密和解密
Jun 21 PHP
php读取二进制流(C语言结构体struct数据文件)的深入解析
Jun 13 PHP
PHP操作MongoDB GridFS 存储文件的详解
Jun 20 PHP
PHP使用strtotime计算两个给定日期之间天数的方法
Mar 18 PHP
浅谈PHP中Stream(流)
Jun 08 PHP
在Windows系统下使用PHP生成Word文档的教程
Jul 03 PHP
php 基础函数
Feb 10 PHP
ThinkPHP实现简单登陆功能
Apr 28 PHP
Laravel 数据库加密及数据库表前缀配置方法
Oct 10 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数学运算函数大汇总(经典值得收藏)
2016/04/01 PHP
php7性能提升的原因详解
2019/10/13 PHP
Laravel jwt 多表(多用户端)验证隔离的实现
2019/12/18 PHP
tp5.1框架数据库子查询操作实例分析
2020/05/26 PHP
获取页面高度,窗口高度,滚动条高度等参数值getPageSize,getPageScroll
2006/09/22 Javascript
一些常用的Javascript函数
2006/12/22 Javascript
JS 参数传递的实际应用代码分析
2009/09/13 Javascript
使用JS实现jQuery的addClass, removeClass, hasClass函数功能
2014/10/31 Javascript
javascript实现将文件保存到本地方法汇总
2015/07/26 Javascript
购物车前端开发(jQuery和bootstrap3)
2016/08/27 Javascript
简单实现AngularJS轮播图效果
2020/04/10 Javascript
vue中动态添加class类名的方法
2018/09/05 Javascript
JS获取动态添加元素的方法详解
2019/07/31 Javascript
深入理解redux之compose的具体应用
2020/01/12 Javascript
vue在响应头response中获取自定义headers操作
2020/07/24 Javascript
python实现调用其他python脚本的方法
2014/10/05 Python
利用Python和OpenCV库将URL转换为OpenCV格式的方法
2015/03/27 Python
wxPython使用系统剪切板的方法
2015/06/16 Python
Python下载网络文本数据到本地内存的四种实现方法示例
2018/02/05 Python
python2.7 json 转换日期的处理的示例
2018/03/07 Python
Python 删除整个文本中的空格,并实现按行显示
2018/07/24 Python
Python进阶之@property动态属性的实现
2019/04/01 Python
Django如何防止定时任务并发浅析
2019/05/14 Python
python递归法实现简易连连看小游戏
2020/03/25 Python
详解PyTorch中Tensor的高阶操作
2019/08/18 Python
Pytorch 实现sobel算子的卷积操作详解
2020/01/10 Python
Python学习之路之pycharm的第一个项目搭建过程
2020/06/18 Python
html5小技巧之通过document.head获取head元素
2014/06/04 HTML / CSS
亚瑟士美国官网:ASICS美国
2017/02/01 全球购物
客服部工作职责范本
2014/02/14 职场文书
双语教学实施方案
2014/03/23 职场文书
省级优秀班集体申报材料
2014/05/25 职场文书
小学向国旗敬礼活动方案
2014/09/27 职场文书
政风行风整改报告
2014/11/06 职场文书
农村老人去世追悼词
2015/06/23 职场文书
Win11 KB5015814遇安装失败 影响开始菜单性能解决方法
2022/07/15 数码科技