void destructDocuments() 静态方法
优质
小牛编辑
138浏览
2023-12-01
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();
// ...
}