Получение данных с другого веб-сайта приводит к медленному веб-сайту?

Я извлекаю данные с другого веб-сайта со следующим кодом:

<?php // IOCS logos $logos_url = 'https://www.someurl'; $logos_request = wp_remote_get( $logos_url ); if(is_wp_error($logos_request)) { return false; } $logos_body = wp_remote_retrieve_body( $logos_request ); $logos_data = json_decode( $logos_body ); // OSCS logos $oscs_logos_url = 'https://www.someurl'; $oscs_logos_request = wp_remote_get( $oscs_logos_url ); if(is_wp_error($oscs_logos_request)) { return false; } $oscs_logos_body = wp_remote_retrieve_body( $oscs_logos_request ); $oscs_logos_data = json_decode( $oscs_logos_body ); ?> <?php if(!empty($logos_data)) : ?> <div class="tab-content"> <div id="iocs-tab" class="tab-pane fade in active"> <div class="home-carousel"> <div class="container-fluid"> <div class="col-sm-12 ioscs-slider"> <div class="iocs"> <?php foreach ($logos_data as $value) : ?> <div class="slide"> <img src="<?php echo esc_url( $value->Url ); ?>" alt="exxonMobil" class="img-responsive"> </div> <?php endforeach; ?> </div> </div> </div> </div> </div> <?php endif; ?> <?php if(!empty($oscs_logos_data)) : ?> <div id="oscs-tab" class="home-carousel tab-pane fade"> <div class="home-carousel"> <div class="container-fluid"> <div class="col-sm-12 oscs-slider"> <div class="iocs"> <?php foreach ($oscs_logos_data as $oscs_value) : ?> <div class="slide"> <img src="<?php echo esc_url( $oscs_value->Url ); ?>" alt="exxonMobil" class="img-responsive"> </div> <?php endforeach; ?> </div> </div> </div> </div> </div> </div> <?php endif; ?> 

Однако, поскольку я реализовал это, сайт загружается очень медленно. Каким будет лучший способ повысить производительность?

РЕДАКТИРОВАТЬ

 <?php $trans_id = 'portal_logos'; $external_logos = get_transient( $trans_id ); if ( false === $external_logos ) { ob_start(); // IOCS logos $logos_url = 'my_url'; //Returns array with logos $logos_request = wp_remote_get( $logos_url ); if(is_wp_error($logos_request)) { return false; } $logos_body = wp_remote_retrieve_body( $logos_request ); $logos_data = json_decode( $logos_body); // OSCS logos $oscs_logos_url = 'my_url'; //Returns array with logos $oscs_logos_request = wp_remote_get( $oscs_logos_url ); if(is_wp_error($oscs_logos_request)) { return false; } $oscs_logos_body = wp_remote_retrieve_body( $oscs_logos_request ); $oscs_logos_data = json_decode( $oscs_logos_body); ?> <div class="logo-scroller"> <div class="container"> <ul class="nav nav-tabs"> <li class="active"><a data-toggle="tab" href="#iocs-tab"><?php esc_html_e( 'IOCs operating in the Kurdistan Region', 'mnr' ); ?></a></li> <li><a data-toggle="tab" href="#oscs-tab"><?php esc_html_e( 'OSCs operating in the Kurdistan Region', 'mnr' ); ?></a></li> </ul> </div> <?php if(!empty($logos_data)) : ?> <div class="tab-content"> <div id="iocs-tab" class="tab-pane fade in active"> <div class="home-carousel"> <div class="container-fluid"> <div class="col-sm-12 ioscs-slider"> <div class="iocs"> <?php foreach ($logos_data as $value) : ?> <div class="slide"> <img src="<?php echo esc_url( $value->Url ); ?>" alt="exxonMobil" class="img-responsive"> </div> <?php endforeach; ?> </div> </div> </div> </div> </div> <?php endif; ?> <?php if(!empty($oscs_logos_data)) : ?> <div id="oscs-tab" class="home-carousel tab-pane fade"> <div class="home-carousel"> <div class="container-fluid"> <div class="col-sm-12 oscs-slider"> <div class="iocs"> <?php foreach ($oscs_logos_data as $oscs_value) : ?> <div class="slide"> <img src="<?php echo esc_url( $oscs_value->Url ); ?>" alt="exxonMobil" class="img-responsive"> </div> <?php endforeach; ?> </div> </div> </div> </div> </div> </div> <?php endif; ?> </div> <?php $external_logos = ob_get_clean(); set_transient( $trans_id, $external_logos, DAY_IN_SECONDS ); } echo $external_logos; ?> 

Solutions Collecting From Web of "Получение данных с другого веб-сайта приводит к медленному веб-сайту?"

В основном вы получили кусок кода, который блокирует выполнение PHP, потому что он использует внешний запрос wp_remote_get() для завершения, чтобы продолжить. И хуже всего то, что вы делаете это по каждому запросу, безоговорочно 🙂 Самое простое решение для вас прямо сейчас – это хранить весь HTML, который сгенерирован на основе этого запроса в переходный период . Проверь это:

 <?php $trans_id = 'my_external_logos__name_me_good'; $external_logos = get_transient( $trans_id ); if ( false === $external_logos ) { ob_start(); ... what you did before ... $external_logos = ob_get_clean(); set_transient( $trans_id, $external_logos, WEEK_IN_SECONDS ); } echo $external_logos; 

Вы можете настроить WEEK_IN_SECONDS на любой период в секундах (например, DAY_IN_SECONDS постоянный). Теперь ваш код будет выполняться только один раз в неделю, и WP будет обслуживать сгенерированный HTML из своей базы данных.