Как оптимизировать полученную информацию в кеш и потом её использовать?
Я использую проверку по geo для вывода цены в зависимости от страны пользователя. Код:
<?php
$ip = $_SERVER['REMOTE_ADDR'];
$details = json_decode(file_get_contents("http://ipinfo.io/{$ip}/json"));
if($details->country == 'BY') {
print("<span class='price'>".$price_html."</span>");
}
?>
Когда это делается на странице категории товаров, при выводе 30 и более товаров, очень долго грузиться страница. Без данной проверки страница загружается быстро. Я так понимаю, что проверка идет отдельно для каждого товара, от того и низкая скорость загрузки. Есть ли способы оптимизировать это дело?
полый код из файла:
<?php
if ( ! defined( 'ABSPATH' ) ) {
exit; // Exit if accessed directly
}
global $product;
?>
<?php if ( $price_html = $product->get_price_html() ) : ?>
<?php
$ip = $_SERVER['REMOTE_ADDR'];
$details = json_decode(file_get_contents("http://ipinfo.io/{$ip}/json"));
if($details->country == 'BY') {
print("
<span class='price'>".$price_html."</span>
");
}
?>
<?php endif; ?>
Ответы (1 шт):
Ну в общем когда переменную надо повтороно использовать в рамках тодного и того же куска кода, это не называется кэшированием. Это скорее здравый смысл.
По идее надо просто вынести получение информации по IP до начала цикла. И это будет самым правильным вариантом.
Но если все прямо совсем сложно, и непонятно, где тут цикл, где функция, и вообще как это всё работает, то можно конечно запомнить информацию на месте.
Но на всякий случай переменовать переменную, потому что details слишком общее имя, и так можно перезаписать другую переменную.
global $ip_details_tpl;
if(empty($ip_details_tpl)) {
$ip_details_tpl = json_decode(file_get_contents("ipinfo.io{$ip}/json"));
}
if( $ip_details_tpl->country == 'BY') {
...
Оно будет запрашивать информацию только один раз. Это конечно ужасный вариант, но работать будет