Мой цикл занимает слишком много времени - PullRequest
0 голосов
/ 23 июня 2018

В эти дни в Турции проходят выборы, и я пишу скрипт php, чтобы следить за выборами с помощью API, и у меня есть цикл for в моем проекте, чтобы показать общие результаты всей Турции. Этот цикл суммирует результаты 81 различных провинций, но он занимает слишком много времени, а иногда он не работает, потому что он занимает более 30 секунд, а моя страница не загружается. Что я могу сделать, чтобы сократить это время?

$mi_total_vote = 0;

for ($id=1; $id < 82; $id++) {
  $turkey_data = file_get_contents('http://secim-api.adilsecim.net/2/city/'.$id.'.json');
  $turkey_json = json_decode($turkey_data);
  $mi = $turkey_json->results->mi;
  $mi_total_vote = $mi_total_vote + $mi;
}

Файлы JSON - это мои данные API. Я должен суммировать их, чтобы получить результаты для всей Турции.

Ответы [ 2 ]

0 голосов
/ 24 июня 2018

Сделайте из этого особенность: D - Загрузите ее асинхронно через ajax

(здесь работать не будет, потому что SOP - но вы понимаете концепцию;))

Если вы смелы, вы можете выполнить цикл из всех 84 и загрузить их одновременно - но это привлечет к вам нежелательное внимание довольно быстро: P

var i = 1;
var max = 82;
var sum = 0;

function load( i ) {
  $('#status').text( "Loading " + i + " of " + max );
  $.ajax({
    url: 'http://secim-api.adilsecim.net/2/city/' + i + '.json',
    type: 'JSON',
    success: function(msg) {
      sum += msg.results.mi;
      
      if( i < 82 ) {
        load(i++);
      } else {
        $('#status').text( "Loading " + i + " of " + max + " DONE" );
      }
    }
  });
}

load(i);
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<small><span id="status"></span><br/></small>
<br/>
Result: <span id="result">0</span>
0 голосов
/ 23 июня 2018

Используйте cURL, это быстрее:

<?php
    $mi_total_vote = 0;

    for ($id=1; $id < 82; $id++) {

       $ch =  curl_init('http://secim-api.adilsecim.net/2/city/1.json');
       curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);  
       $turkey_data = curl_exec($ch);  

       $turkey_json = json_decode($turkey_data);
       $mi = $turkey_json->results->mi;
       $mi_total_vote = $mi_total_vote + $mi;
    }


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