Итак, у меня есть объект JSON, который возвращает от 2500 до 5000 объектов, я могу фильтровать объект JSON, но это занимает от 5 до 10 секунд в зависимости от ключевого слова, которое я ищу.
Ниже приведен фрагмент кода
$jsonurl = "http://something.com/getitems.php";
$json = file_get_contents($jsonurl);
$json_output = json_decode($json);
$filteredArray = array_filter($json_output, function($obj) use ($keyword)
{
return strpos(strtolower($obj->title), strtolower($keyword));
});
foreach($filteredArray as $obj){
$date = "{$obj->pubDate}";
$date = str_replace("GMT"," GMT" ,$date);
$pBB[] = array(
'source' => "{$obj->source}",
'title' => "{$obj->title}",
'link' => "{$obj->link}",
'imgLink' => "{$obj->imgLink}",
'pubDate' => $date,
);
}
echo json_encode($pBB);
Помимо кэширования результатов есть ли другой способ повысить производительность и быстрее вернуть результаты?
заранее спасибо
Одна простая оптимизация: учитывая $keyword
не меняется, вам не нужно звонить strtolower()
каждый раз. Просто делать:
$keyword = strtolower($keyword)
$filteredArray = array_filter($json_output, function($obj) use ($keyword)
{
return strpos(strtolower($obj->title), $keyword);
});
Еще лучше, если бы вы использовали встроенную функцию для поиска без учета регистра вместо применения strtolower
на обеих струнах
int stripos ( string $haystack , string $needle [, int $offset = 0 ] )
Других решений пока нет …