有没有办法优化它以更快地运行?
该脚本根据站点代码读取多个JSON文件,然后只写入我想要的变量。
<?php
$wuStations = array(
'KORHALFW4','KORHALFW3','KORHALFW5','KOROXBOW2','KIDCOUNC2','KIDNEWME2','KIDNEWME4',
'KIDMIDVA5','KIDCAMBR6','KIDCAMBR4','KORRICHL2','KIDWEISE16','KORONTAR3','KIDWEISE5',
'KIDPAYET7','KORONTAR6','KORONTAR4','KIDSWEET2','KIDLOWMA5','KIDIDAHO11','KIDLOWMA2',
'KIDHORSE8','KIDEMMET9','KIDGARDE6','KIDBOISE233','KIDBOISE208','KIDBOISE262',
'KIDPARMA7','KIDPARMA8','KIDWILDE7','KIDHOMED2','KIDHOMED4','KIDCALDW11','KIDKUNA8',
'KIDMERID68','KIDBOISE104','KIDBOISE90','KIDBOISE270','KIDBOISE121',
'KIDBOISE138','KIDBOISE93','KIDBOISE158','KIDBOISE223','KIDBOISE207','KIDBOISE230',
'KIDBOISE231','KIDBOISE68','KIDSTAR3','KIDSTAR5','KIDEAGLE20','KIDBOISE148',
'KIDEAGLE20','KIDEAGLE28','KIDMIDDL6','KIDMOUNT9','KIDMERID54','KIDMERID35',
'KNVJARBI2','KIDOLA2','KIDOLA6','KIDBOISE226','KIDKINGH2','KIDFAIRF4','KIDFAIRF7',
'KIDWESTM2','KIDGOODI9','KIDGLENN4','KIDGLENN5','KIDBLISS3','KIDBLISS2','KIDHAGER3',
'KIDBUHL7','KIDBUHL10','KIDFILER7','KIDTWINF306','KIDTWINF293','KIDKIMBE4',
'KIDALBIO3','KIDMURTA3','KIDOAKLE5','KIDBRUNE3','KIDHAMME3','KIDHAMME2','KIDMURPH4',
'KIDMELBA2','KIDMELBA3','KOROREGO24','KORCRANE2','KORBURNS11','KORWESTF6','KORBAKER15',
'KORVALE6','KORNYSSA2','KIDPARMA7','KIDPARMA8','KIDWILDE7','KIDHOMED2','KIDHOMED4',
'KIDCALDW11','KIDKUNA6','KIDBOISE80','KIDBOISE133','KIDEAGLE20','KIDBOISE148',
'KIDEAGLE20','KIDEAGLE28','KIDMIDDL6','KIDMOUNT9','KIDMERID54','KIDMERID35',
'KNVJARBI2','KIDOLA2','KIDOLA6','KORSUMPT2','KORBAKER12','KIDINDIA3','KIDINDIA2',
'KIDDONNE6','KIDDONNE5','KIDIDAHO30',
);
$start = microtime(true);
foreach ($wuStations as $sta) {
//JSON
$wu_url = 'http://api.wunderground.com/api/606f3f6977348613/conditions/lang:EN/q/pws:'.$sta.'.json';
//READ JSON
$wu_data = file_get_contents($wu_url);
$wu = json_decode($wu_data, true);
$loc = $wu['current_observation']['display_location']['full'];
$lat = $wu['current_observation']['observation_location']['latitude'];
$lon = $wu['current_observation']['observation_location']['longitude'];
$elev = $wu['current_observation']['observation_location']['elevation'];
$id = $wu['current_observation']['station_id'];
$ob = $wu['current_observation']['observation_time_rfc822'];
$tf = $wu['current_observation']['temp_f'];
$tdf = $wu['current_observation']['dewpoint_f'];
$wdir = $wu['current_observation']['wind_degrees'];
$wspd = $wu['current_observation']['wind_mph'];
$wgst = $wu['current_observation']['wind_gust_mph'];
$pcp = $wu['current_observation']['precip_1hr_in'];
echo $id.','.$lat.','.$lon.','.$elev.','.$ob.','.$tf.','.$tdf.','.$wdir.','.$wspd.','.$wgst.','.$pcp;
echo PHP_EOL;
}
$elapsed = microtime(true) - $start;
echo "Elapsed: $elapsed seconds\r\n";
?>
答案 0 :(得分:0)
我做了一些测试。
两个最长的任务(这里没有意外)是抓取网址,解码JSON 。
为了进一步优化,您可能需要与我们分享一些使用模式。
但简单地说,URL可以同时获取,甚至可以作为其他地方的批处理作业。
对于JSON解码,嗯,这有点棘手。我注意到返回的JSON格式非常好(可视化)。也许不是解码JSON,而是可以跳转到行号并直接读取值(尚未测试时间)。
或者,再次根据使用模式,如果批处理作业可以重新格式化数据并将其存储在某处以便以后检索,则可以节省一些时间。