返回介绍

void destructDocuments() 静态方法

发布于 2021-04-06 13:23:43 字数 1379 浏览 971 评论 0 收藏 0

V4.2.0 新增


释放所有文档资源,销毁内存占用,一般是在使用单列模式时,你需要调用此方法来手动释放资源占用。在非单列模式下,在使用完当前QueryList对象后,你应该调用destruct()方法来销毁当前QueryList对象。

背景:phpQuery 会将所有采集过的网页文档存到内存当中,不会主动释放文档,当涉及到大量的网页采集时,内存占用就会持续增加,最终导致内存溢出。手动调用此方法可以将内存中文档全部释放。

注意:此方法并不是销毁QueryList对象,只是销毁phpQuery Document占用的内存,所以调用此方法后,原先设置过HTML的QueryList对象都会丢失设置的HTML,需要重新调用html或者get方法设置HTML.

用法


  • 基础用法
$html = file_get_contents('https://querylist.cc/');
$ql = QueryList::html($html);

// 销毁所有文档
QueryList::destructDocuments();
// 报错
$ql->find('a');

// 需要重新设置html
$ql->html($html);
// 成功
$ql->find('a');
  • 实际使用场景
// 待采集的链接集合
$urls = [
    'https://querylist.cc/1.html',
    'https://querylist.cc/2.html',
    'https://querylist.cc/3.html',
    //...
];

// 设置采集规则
$ql = QueryList::getInstance()->rule([
    'title' => ['h1','text'],
    'link' => ['a','href']
]);

foreach($urls as $url){
    // 每条链接都会应用上面设置好的采集规则
    $data = $ql->get($url)->query()->getData();
    // 释放Document内存占用
    //因为这里的 ql 使用的是单列模式,所以不用使用 $ql->destruct() 来销毁当前QueryList对象并释放资源占用
    QueryList::destructDocuments();
    // ...
}

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文