- Get Started
- 基础
- 进阶
- 技巧
- 插件推荐
- API
- Get Started
- 基础 API
- QueryList html($html)
- string getHtml($rel = true)
- QueryList rules(array $rules)
- QueryList range($selector)
- QueryList removeHead()
- QueryList query(Closure $callback = null)
- Collection getData(Closure $callback = null)
- Array queryData(Closure $callback = null)
- QueryList static getInstance()
- void destruct()
- void destructDocuments() 静态方法
- QueryList pipe(Closure $callback)
- 特殊 API
- 高级 API
- 默认插件
文章来源于网络收集而来,版权归原创者所有,如有侵权请及时联系!
void destructDocuments() 静态方法
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 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论