/ / php धीमी प्रतिक्रिया समय गूगल मैप्स एपीआई - php का उपयोग कर

गूगल मैप्स एपीआई - php का उपयोग कर php धीमी प्रतिक्रिया समय

मेरे पास निम्न प्रारूप में लगभग 500 पंक्तियों के साथ एक MySQL तालिका है

ID¦name¦stuff¦location

मेरी php स्क्रिप्ट को एक उपयोगकर्ता स्थान मिलता है, सभी का चयन करता हैडेटाबेस से पंक्तियों की संख्या और फिर गूगल मैप्स एपीआई का उपयोग करके प्रत्येक स्थान से उपयोगकर्ता स्थान के लिए दूरी प्राप्त करता है और यह सब एक json सरणी में डालता है

समस्या यह है कि 500 ​​पंक्तियों को संसाधित करने में 300 का समय लगता हैऔसतन सेकंड, मैं इसे लगभग 3-4 सेकंड किसी भी तरह से प्राप्त करना चाहता था, यह गूगल मैप्स एपीआई प्रतीत होता है जो पूरी स्क्रिप्ट को टोंटी मार रहा है।

क्या मैं पूछ रहा हूँ अगर वहाँ है एक बेहतर तरीका है पूरी बात को संभालने के लिए ताकि मैं 10 सेकंड के भीतर सब कुछ संसाधित करने के लिए स्क्रिप्ट प्राप्त कर सकूं।

php स्क्रिप्ट -

<?php
//used for benchmarking
$time_start = microtime(true);
require_once "db.php";

//get the users location
$location = $_GET["location"];

//check the users location is valid
if (checkLocation($location) == "found") {

echo "null";

} else {
//select all of the rows
$SQLSelect = $odb -> query("SELECT * FROM `something`");
$array = array();
$count = 0;
while ($show = $SQLSelect -> fetch(PDO::FETCH_ASSOC)) {
$distance = getDistance($location, $show["location"]);
$distance = $distance * 0.000621371192;

//narrow down the distance
if ($distance < 100) {

$array[$count] = array();
$array[$count]["name"] = $show["locationName"];
$array[$count]["spec"] = $show["spec"];
$array[$count]["distance"] = round($distance);
$count = $count + 1;
}
}
//sort the array based on distance
usort($array,function($a,$b) {return strnatcasecmp($a["distance"],$b["distance"]);});
echo json_encode($array);
}


function getDistance($start, $end) {
$from = $start;
$to = $end;
$from = urlencode($from);
$to = urlencode($to);

$data = file_get_contents("http://maps.googleapis.com/maps/api/distancematrix/json?origins=$from&destinations=$to&language=en-EN&sensor=false");

$data = json_decode($data);
$time = 0;
$distance = 0;
foreach($data->rows[0]->elements as $road) {
$time += $road->duration->value;
$distance += $road->distance->value;
}

return $distance;
}



function checkLocation($start) {
$from = $start;
$to = "location1";
$from = urlencode($from);
$to = urlencode($to);

$data = file_get_contents("http://maps.googleapis.com/maps/api/distancematrix/json?origins=$from&destinations=$to&language=en-EN&sensor=false");
if (strpos($data, ""status" : "NOT_FOUND"") !== false) {
return "found";
} else {
return "null";
}
}

echo "</br>Total execution time in seconds: " . (microtime(true) - $time_start);
?>

उत्तर:

जवाब के लिए 0 № 1

चीजों को गति देने का आपका एकमात्र विकल्प दूर करना हैउन सभी Google मानचित्र API अनुरोधों के साथ। मैं आपके डेटाबेस में उपयोगकर्ता के स्थान और आइटम के अक्षांश और देशांतर बिंदुओं का उपयोग करने के लिए आपकी स्क्रिप्ट और डेटाबेस तालिका को बदल दूंगा।

MySQL का उपयोग करके दो लाट और लैंग पॉइंट के बीच की दूरी (एक कौवा मक्खियों के रूप में) की गणना करना संभव है, जैसा कि यहां देखा गया है: Mysql में अक्षांश और देशांतर का उपयोग करते हुए दो बिंदुओं के बीच की दूरी का पता लगाएं

यदि आप इस विधि पर स्विच करते हैं, तो आप निश्चित रूप से <4 सेकंड में चलने के लिए अपनी स्क्रिप्ट प्राप्त कर पाएंगे।