/ / php повільний час відгуку за допомогою API google maps - php

php повільний час відгуку за допомогою google maps API - php

У мене є таблиця MySQL у такому форматі приблизно з 500 рядків

ID¦name¦stuff¦location

Мій скрипт php отримує місцезнаходження користувачів, вибирає всіхрядків із бази даних, а потім отримує відстань від кожного розташування рядків до місця розташування користувачів за допомогою API google maps і ставить усе це у масив json

Проблема навіть в тому, що обробка 500 рядків займає 300в середньому, я хотів якось знизити його приблизно до 3-4 секунд. Схоже, API google maps, який "обмежує весь сценарій".

Я запитую, чи є кращий спосіб впоратися з усією справою, щоб я міг отримати сценарій для обробки всього за 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

Єдиний варіант, щоб пришвидшити справи, - це покінчитиз усіма тими запитами API Google Maps. Я б змінив ваш скрипт і таблицю баз даних, щоб використовувати точки широти та довготи для місцезнаходження користувача та елементів у вашій базі даних.

Розрахувати відстань (як ворона пролітає) між двома точками lat та lng можна за допомогою MySQL, як показано тут: Знайдіть відстань між двома точками, використовуючи широту та довготу в mysql

Якщо ви перейдете на цей метод, ви, безумовно, зможете запустити сценарій за <4 секунди.