phpQuery 占用内存过多的处理方法

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";

}

内存占用稳定了

来源: https://www.php1.cn/detail/php-45d0b173fb.html

php phpqueey内存泄露,phpQuery 占用内存过多的处理方法相关推荐

  1. PHP占用内存越来越多,解决phpQuery占用内存过多的问题

    本节内容: phpQuery占用内存过多的问题 phpQuery是一个用php实现的类似jquery的开源项目,可以在服务器端以jQuery的语法形式解析网页元素. 相对于正则或其它方式匹配网页方式, ...

  2. JavaScript内存泄露,闭包内存泄露如何解决

    转载于:JavaScript内存泄露,闭包内存泄露如何解决 - 一粒一世界 - 博客园 JavaScript 内存泄露的4种方式及如何避免 简介 什么是内存泄露? JavaScript 内存管理 Ja ...

  3. android native堆内存泄露,Android Native内存泄露检测

    Android Studio没有提供直接的Native层的内存泄露检测工具,但我们仍可以通过开源工具进行动态检测和静态检测 动态检测 在APP运行时进行检测,就像LeakCanary Update: ...

  4. drools规则引擎因为内存泄露导致的内存溢出

    进入这个问题之前,先了解一下drools: 在很多行业应用中比如银行.保险领域,业务规则往往非常复杂,并且规则处于不断更新变化中,而现有很多系统做法基本上都是将业务规则绑定在程序代码中. 主要存在的问 ...

  5. 转载浅谈MFC内存泄露检测及内存越界访问保护机制

    2019独角兽企业重金招聘Python工程师标准>>> 本文所有代码均在VC2008下编译.调试.如果您使用的编译器不同,结果可能会有差别,但本文讲述的原理对于大部分编译器应该是相似 ...

  6. java 多线程 内存泄露_关于内存泄露的总结

    大致先分为五个小模块: 1.什么是内存泄漏 2.有哪些情况会导致内存泄漏切如何解决 3.如何检测内存泄漏 4.Java得基本数据类型和占用字节 5.什么是内存溢出和解决办法 一.什么是内存泄漏(Mem ...

  7. java thread 内存泄露_Java ThreadLocal 内存泄露问题分析及解决方法。

    前言 在分析ThreadLocal导致的内存泄露前,需要普及了解一下内存泄露.强引用与弱引用以及GC回收机制,这样才能更好的分析为什么ThreadLocal会导致内存泄露呢?更重要的是知道该如何避免这 ...

  8. win11内存泄露怎么办 Windows11内存泄露的解决方法

    最近很多使用Win11系统的小伙伴在打开系统进程的时候发现桌面窗口管理器占用了大量的内存,严重造成了内存泄露,那么遇到这种情况要怎么办呢?下面就就和小编一起来看看有什么解决方法吧.更多windows1 ...

  9. java程序会发生内存泄露吗及内存泄漏场景

    java程序会发生内存泄露的问题吗?请简单说说你的观点 答案:会.Java内存管理是通过垃圾收集器(Garbage Collection,GC)自动管理内存的回收的,java程序员不需要通过调用函数来 ...

最新文章

  1. 用简单术语让你看到贝叶斯优化之美
  2. laravel实现数据分页
  3. mysql workbench ssh_通过MySQL Workbench进行SSH隧道
  4. python 程序流程控制结构-python之流程控制语句
  5. opengl 相关资料
  6. Grid布局和Flex布局
  7. QT的QRenderPass类的使用
  8. web动画_Web动画简介
  9. springboot全局常量_Spring-Boot配置属性和环境变量的加载顺序
  10. cli vue 卸载_记录使用@vue/cli搭建Vue3项目完整流程
  11. 和思科Boss四年后重逢
  12. windows无法格式化u盘_windows无法完成格式化怎么办
  13. SimpleDateFormat 类的总结
  14. PoEdu - C++阶段班【Po学校】- 第1课
  15. hadoop2.8配置_hadoop2.8安装教程
  16. hp linux还原系统还原,酷越一键备份还原 惠普电脑系统还原
  17. JavaScript格式化时间与日期
  18. 守望先锋世界观架构 ——(一款好的游戏是怎么来的)
  19. 福州华侨中学计算机老师,三尺讲台著妙笔 谱写侨习好韶光——记2015级福州华侨中学实习队工作检查...
  20. 拜师————python基础入门——守破离学习法,海龟绘图,画出奥运五环图,day3

热门文章

  1. 微信小程序模板template
  2. [转]几种最短路径算法的比较
  3. 使用nexus来搭建Nuget私服
  4. PE文件结构详解(三)
  5. MySQL Antelope和Barracuda的区别分析
  6. mysql在linux下的安装
  7. SharePoint使用BCS开发你第一个应用程序(三)
  8. ActiveRecordBase借助NHibernate的条件获取实体类对象
  9. 3种方式理解旋转变换
  10. java basicstroke_使用java.awt.BasicStroke动画化虚线