Могу ли я запросить часть строки JSON?Или декодировать только определенные части, чтобы ускорить процесс? - PullRequest
2 голосов
/ 13 мая 2011

У меня очень медленно работающая страница, потому что она загружается запросами JSON.

Так что мне было интересно, как я могу ускорить все это.Могу ли я запросить только часть строки?Учитывая, что все, что я использую из следующего, это массив «cast», тратить на него все ненужно.

Следующий код должен запускаться для каждого фильма, указанного на моей странице, который намомент - 20. Но прежде чем просто сократить количество фильмов, мне было интересно, как я могу ускорить эту часть, что является правильной проблемой.

Вот код, который я получил, который замедляет страницу, поскольку он должен запускаться 20 раз.

$films_result = $tmdb->getMovie($film->id);
$films = json_decode($films_result);
foreach ($films as $film) {
 foreach ($film->cast as $cast) {
  if ($cast->job == 'Actor') {
   echo '<a href="person.php?id=' . $cast->id . '">' . $cast->name . '</a> ';
   $num_actors++;
   if ($num_actors == 5)
   break;
  }
 }
}

Я осмотрелся вокруг, но я не знаю, что я ищу.Я очень, очень начинающий в этом.Поэтому, пожалуйста, любые решения, не связанные с другими технологиями, просто PHP, пожалуйста.

Ответы [ 4 ]

0 голосов
/ 13 мая 2011

Вы предполагаете, что причиной медлительности является декодирование JSON: я бы поставил (небольшую сумму) деньги на время отклика API, которое является приемником, а не анализом.

Предполагается, что это такЕсли вам нужен синтаксический анализ, вы действительно надеетесь на потоковый парсер какого-то вида: в Java Land есть json-simple (см. http://code.google.com/p/json-simple/wiki/DecodingExamples#Example_5_-_Stoppable_SAX-like_content_handler), который позволяет вам использовать обработчик и отслеживать состояние самостоятельно, так что вы можете только сохранятьбиты, которые вас волнуют. К сожалению, PHP на самом деле не отображает обратные вызовы синтаксического анализатора, которые использует json_decode, и ни один из более старых JSON-кодировщиков / декодеров действительно больше не поддерживается (ни один из них в любом случае не подвергает обратные вызовы пользовательскому коду).

Возможно, вы захотите выгрузить JSON на клиент и проанализировать его там, если это действительно ограничение.

0 голосов
/ 13 мая 2011

Вы должны быть в состоянии проанализировать много JSON x 20 менее чем за секунду.Откуда ты знаешь, что JSON - это горлышко бутылки?Там, вероятно, какая-то другая проблема.Как быстро данные извлекаются из базы данных?

0 голосов
/ 13 мая 2011

Ваш API получает 0 из 100 баллов по скорости страницы Google, потому что сжатие отключено.Вывод JSON будет загружен на 95% быстрее при включенном сжатии.

Исправить может быть сложно, если вы не контролируете сервер, но вот ссылка, как это исправить в любом случае.

Свернуть полезную нагрузку

0 голосов
/ 13 мая 2011

Вы можете настроить задание cron, которое будет захватывать весь JSON каждые X минут за кулисами (таким образом, не имеет значения, насколько это медленно), затем анализировать его и сохранять в базе данных. Затем при каждой загрузке страницы PHP, показанной выше, просто извлекайте кэшированные данные из базы данных и выводите их.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...