我正在尝试下载多个文件,这些文件位于具有连续名称的文件夹中,即 1.html,2.html,3.html,9999.html
[该文件也将由DOMXPath使用!]
下面是用户界面的代码
<?php
error_reporting(0);
$id = 0;
$id = intval($_POST['id'])+1;
$url = 'https://remote.server/'.$id.'.html';
//$html = curl_get_contents($url);
if (!$html = @file_get_contents($url)) { echo 0; }
//some processing of the data
$data = (new DOMXPath ( (@DOMDocument::loadHTML ( $html )) ))->query ( '//span[@class="data"]' )->item ( 1 )->textContent;
$data2 = (new DOMXPath ( (@DOMDocument::loadHTML ( $html )) ))->query ( '//span[@class="data2"]' )->item ( 0 )->textContent;
/*insertion of data
$dba_host='p:localhost'; $dba_name='root'; $dba_pass=''; $dba_db='db'; $con=mysqli_connect($dba_host,$dba_name,$dba_pass,$dba_db) or die('Connection Refused !');
$stmt = mysqli_prepare($con,"INSERT INTO `tbl` *,*) VALUES (?,?)");
mysqli_stmt_bind_param($stmt,"ss", *, *); mysqli_stmt_execute($stmt);
mysqli_stmt_close($stmt); mysqli_close($con);
*/
function curl_get_contents ($url) {
$curl = curl_init();
curl_setopt($curl, CURLOPT_RETURNTRANSFER, True);
curl_setopt($curl, CURLOPT_URL, $url);
curl_setopt($curl,CURLOPT_USERAGENT,'Mozilla/5.0 (Windows NT 6.1; W…) Gecko/20100101 Firefox/61.0');
$return = curl_exec($curl);
curl_close($curl);
return $return;
}
echo 1;
?>
后台搜寻器
upload_symbols_to_crashlytics(gsp_path: "./App/GoogleService-Info.plist")
到目前为止,性能看起来确实很慢。如何改进/优化代码?
答案 0 :(得分:1)
使用curl_multi api并行下载页面,这将极大地提高下载速度,您可以找到使用curl_multi here的示例。
使用压缩进行传输,因为.html文件压缩得很好,这也将带来显着的性能改进。要使用压缩传输,只需将CURLOPT_ENCODING设置为emptystring,例如curl_setopt($ch,CURLOPT_ENCODING,"");
,然后curl将使用压缩进行传输。
您可以通过仅创建以下内容来微优化CPU使用率: 一次使用DOMDocument和DOMXPath元素,然后重新使用这些元素, 因为从大型html源代码创建它们需要占用CPU时间,并且 您的代码无缘无故地两次创建了它们。具体来说,这会更快并且使用更少的CPU:
$domd=@DOMDocument::loadHTML($html);
$xp=new DOMXPath($domd);
$data = $xp->query ( '//span[@class="data"]' )->item ( 1 )->textContent;
$data2 = $xp->query ( '//span[@class="data2"]' )->item ( 0 )->textContent;
at
命令或Task Scheduler
)