Загружайте большие данные быстрее, используя CURL API - сделайте сайт быстрее - PullRequest
0 голосов
/ 20 января 2020

Я ищу предложение о том, как улучшить мой код, чтобы быстрее загружать сайт. У меня нет прямого доступа к базе данных, выставлены только API. Существует большой набор данных, поступающих от API, и на домашней странице веб-сайта есть 5 каруселей для разных городов.

В основном на моей домашней странице я использую вызов curl для чтения данных из API, а затем отображение на домашней странице. Мой код как показано ниже

$citiesArr = array(1 => 'Tokyo', 2 => 'Los Angeles', 3 => 'London'); // cities array with their primary key

$foreach ($citiesArr as $city) {
    // City Title Goes here
    // Using curl here by passing city id to API which return large amount of json data.
    handle = curl_init();
    $baseUrl = "API_BASE_PATH/data?city_id=" . $cityId;
    curl_setopt($handle, CURLOPT_URL, $baseUrl . $path);
    curl_setopt($handle, CURLOPT_RETURNTRANSFER, true);
    $response = curl_exec($handle);
    curl_close($handle);
    $response = json_decode($response, TRUE);
    $results = array_slice($response , 0, 10, true); // There is large data so slicing to get only first 10 posts

    // Displaying the data 
    $foreach ($results as $result) {
       // Displaying data here, There is own carousal on homepage, you just swipe to see all posts
    }

}

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

Проблема: когда вы нажимаете URL в браузере, он требуется не менее 7 секунд, чтобы попасть на сайт, а затем загружает сайт еще через 15-20 секунд, что означает, что это более 25 секунд. если я удаляю свой код, веб-сайт работает быстрее, я думал, что проблема с DNS, доменом и т. д. c, но это не проблема, проблема с моим кодом.

Можно ли загрузить html сначала, а затем нажмите на кнопку, чтобы загрузить веб-сайт, но веб-сайт не выглядит плохо или любым другим способом.

Обратите внимание: я не могу использовать ajax, потому что API не предоставляет ограниченную публикацию , он просто предоставляет большие данные, но я только хочу отображать несколько, если не использовать слайс для массива, это займет вечность, чтобы загрузить сайт, поэтому я пытаюсь загрузить свой сайт быстрее.

Примерный вид выглядит следующим образом

enter image description here

1 Ответ

0 голосов
/ 20 января 2020

То, что у вас здесь есть, является основным узким местом c. Ваше узкое место заключается в том, что каждый запрос скручивания должен сначала дождаться завершения, прежде чем следующий запрос скручивания может даже начаться.

Представьте, что у вас есть 10 кроликов. Каждый кролик должен спуститься по лабиринту, схватить морковку и вернуться в исходное положение. В среднем каждому кролику требуется не менее 10 секунд для выполнения задачи. Если вы отправляете только одного зайчика за раз, каждый зайчик должен подождать, пока следующий зайчик не вернется, прежде чем они смогут спуститься в лабиринт, эта задача займет у нас не менее 100 секунд. Но если мы разрешим всем 10 кроликам go сразу, задача займет всего 10 секунд.

Так что вместо foreach($reqs as $req) curl_exec(...) рассмотрите возможность использования чего-то вроде curl_multi_exec, что позволяет вам запускать все ваши запросы одновременно ( одновременно ).

Это означает, что T = max(t) во всех случаях. Где T - общее время, необходимое для выполнения всех задач, а t - массив времени, необходимого для выполнения отдельных задач. Таким образом, все необходимое время всегда равно максимальному количеству времени, затрачиваемому на выполнение любой отдельной задачи ( во всех случаях ).

Это противоположно вашему текущему подходу, где T = sum(t) такой что общее время, необходимое для выполнения всех задач, равно сумме отдельного времени, затраченного на каждое задание ( во всех случаях ).

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