本博客不欢迎:各种镜像采集行为,请尊重知识产权法律法规。大家都是程序员,不要闹得不开心。

苏南大叔继续和大家聊QueryList的相关话题,本文说的是内存销毁的问题。其实说起来,很多语言对内存销毁的都没有强制的要求了,所以,大多数时候,在代码中,就很难看到destruct()的相关字样了。但是,QueryList由于其应用场景的问题,也许真的需要主动释放资源,销毁内存占用。

苏南大叔:QueryList 如何释放资源内存占用 - 释放内存2
QueryList 如何释放资源内存占用(图1-1)

QueryList destruct()释放内存占用

释放资源,销毁内存占用。在涉及到循环采集大量网页的场景下,这个方法是很有用的。

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

$ql->destruct();

QueryList destruct()用法

  • 基础用法
$html = file_get_contents('https://querylist.cc/');
$ql = QueryList::html($html);
$ql->destruct();
// 报错
$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::rule([
    'title' => ['h1','text'],
    'link' => ['a','href']
]);
foreach($urls as $url){
    // 每条链接都会应用上面设置好的采集规则
    $data = $ql->get($url)->query()->getData();
    // 释放Document内存占用
    $ql->destruct();
    // ...
}

如果大量查询抓取的时候,就需要使用这个destruct()方法,来释放内存了。

总结

总结一下来说,这个destruct()代码也不是必须用的,使用的时候,都是由特殊上下文的。不用的话,一般来说,问题也不会太大。不过,对程序严加要求的话,就应该注意这个问题。

好,请大家继续关注苏南大叔带来的 querylist的更多经验文字,谢谢。

如果本文对您有帮助,或者节约了您的时间,欢迎打赏瓶饮料,建立下友谊关系。
本博客不欢迎:各种镜像采集行为。请尊重原创文章内容,转载请保留作者链接。