Как бы я мог уменьшить нагрузку на процессор PHP-скрипта? - PullRequest
1 голос
/ 01 октября 2009

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

В настоящее время для выполнения всегда требуется весь процесс, который составляет около 3 секунд на выполнение. Я ограничен 12, но я получаю довольно много пингов.

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

Я тоже довольно хорошо знаком с php, так что не волнуйтесь, xD.

~ Большое спасибо, Джонни: D

Ответы [ 4 ]

2 голосов
/ 01 октября 2009

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

1 голос
/ 01 октября 2009

Zend Framework предоставляет объект Zend_Cache с несколькими бэкэндами (File, memcached, APD). Или вы можете свернуть свое собственное что-то вроде:

$cachFile = "/path/to/cache/file";
$ttl = 60; // 60 second time to live
if (!file_exists($cacheFile) || time()-filemtime($cacheFile) > $ttl) {
    $data = getWeatherData(); // Go off and get the data
    file_put_contents(serialize($cacheFile), $data);
} else {
    $data = unserialize(file_get_contents($cacheFile));
}
0 голосов
/ 01 октября 2009

3 секунды - это чрезвычайно длительное время выполнения, как уже было сказано, было бы неплохо немного посмотреть, как вы обрабатываете «ввод» и в каком формате указан ввод.

Быстрая и грязная статья о кэшировании из сценария в файл находится здесь:

http://codestips.com/?p=153

0 голосов
/ 01 октября 2009

нужен фрагмент кода, чтобы увидеть, какую обработку вы делаете. рассмотрите возможность использования xdebug для лучшей оптимизации вашего кода. Также вы можете использовать инструмент сравнения, такой как AB, чтобы увидеть, сколько процессов может обработать ваш сервер.

Есть несколько различных механизмов кэширования, но, не видя, какой процесс вы делаете, трудно сказать ...

...