Как заставить php-скрипт использовать кэшированную версию страницы? - PullRequest
0 голосов
/ 04 апреля 2019

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

Поэтому я бы хотел сделать простую проверку примерно так:

$load_on_server = sys_getloadavg()[0];
If(load_on_server > $load_limit) {
  display_cached_version();
} else {
  display_regular_version();
}

Но я не уверен, как бы я показывал кэшированную версию. Есть идеи?

Ответы [ 2 ]

1 голос
/ 04 апреля 2019

Сохраните страницу в другом файле и обновляйте ее при каждом запросе.В PHP-коде проверьте загрузку и, если она больше, чем количество ядер вашего процессора, file_get_contents сохраненной страницы, если это не так, выполните вашу программу нормально.

use file_put_contents ("cache.html") накаждая успешная выборка из БД и file_get_contents ("cache.html") для каждого запроса, когда нагрузка слишком высока.

0 голосов
/ 04 апреля 2019

Вот собственное PHP-решение для кеширования результатов вашего запроса.

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

<?php

if (filemtime('myCacheFile.txt') < time()-1*3600) {
    // declare database connection details  ==> code

    // create connection to database ==> code

    // error handling if connection to database failed ==> code

    // make the SQL call
    if ($result = $db->query("SELECT * FROM myTable")) {
        $rows = array();

        while($row = $result->fetch_array(MYSQL_ASSOC)) {
            $rows[] = $row;
        }

        // store query result in myCacheFile.txt
        file_put_contents('myCacheFile.txt', serialize(json_encode($rows)));


        echo json_encode($rows);
    }

    else {
        echo 'data could not be extracted from the db.';
    }
}
else {
    $data = unserialize(file_get_contents('myCacheFile.txt'));
    return $data;
}

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

Надеюсь, это поможет вам.

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