苏南大叔继续和大家聊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的更多经验文字,谢谢。

如果本文对您有帮助,或者节约了您的时间,欢迎打赏瓶饮料,建立下友谊关系。
本博客不欢迎:各种镜像采集行为。请尊重原创文章内容,转载请保留链接作者。
本站采用创作共用版权协议, 要求署名、非商业用途和相同方式共享。
转载本站内容必须也遵循“署名-非商业用途-相同方式共享”的创作共用协议。
未经许可,规模化镜像抄袭本站内容的行为,将会根据有关法律法规进行维权。
程序如此灵动~》下所有原创文章,如被用于商业用途,请您按规定支付稿费。

 【源码】本文代码片段及相关软件,请点此获取

 【绝密】秘籍文章入口,仅传授于有缘之人   querylist

本站的忠实读者小伙伴,正在阅读下面这些文章: