Какой тип кэширования я должен использовать? - PullRequest
1 голос
/ 27 ноября 2009

У меня есть сайт объявлений, который использует PHP и MYSQL.

У меня есть несколько страниц, на которых также используется javascript.

Мне нужно знать, какой тип кэширования использовать для повышения производительности моего сайта ... Существует множество «постоянных» изображений, таких как меню, боковые панели, фоновые изображения, которые, вероятно, можно кэшировать определенным образом.

Знаете ли вы, автоматически ли веб-браузеры кэшируют эти изображения, или я должен написать фрагмент кода для этого?

Мне нужно руководство в правильном направлении ...

Кроме того, есть ли способ как-то кэшировать большие php-функции? (например, когда вы открываете приложение в Windows, приложение каким-то образом кэшируется, и в следующий раз, когда вы откроете его, оно откроется намного быстрее, если вы не запустили свой компьютер.)

Спасибо

Ответы [ 3 ]

3 голосов
/ 27 ноября 2009

Вы можете использовать mod_expire (если вы используете apache в качестве веб-сервера), чтобы установить HTTP-заголовок expire для вашего статического содержимого (js, images, favicon, plain HTML), поэтому браузер не будет запрашивать этот объект до истечения срока его действия. В зависимости от вашего хостинга и вашей аудитории было бы неплохо использовать сервис в качестве akamai для размещения вашего статического контента (images, css, javascript).

Чтобы начать повышать производительность серверной части (PHP), вам необходимо выявить узкие места. Хорошим подходом для этого было бы использование некоторой регистрации на вашем веб-сайте (запросы SQL и сколько секунд для получения результатов, какая страница просматривается чаще всего, какая функция занимает больше всего времени). Вы позволите этому бежать несколько недель / дней. Проанализируйте это, и вы узнаете, какие SQL-запросы кешировать, какую функцию проводить рефакторинг.

Если вы спешите, быстрый и грязный подход состоит в том, чтобы получить топ-10 самых просматриваемых страниц и кэшировать их на диске. Это бы сработало, но если ваш сайт действительно динамичный и нуждается в информации почти в реальном времени, вы часто будете аннулировать этот кеш. Также это может создать проблему, если на вашем сайте есть какой-либо процесс входа / выхода. Другой подход состоит в том, чтобы кэшировать некоторую часть этой страницы, обычно более дорогую для производства (БД / доступ, сложная обработка).

В терминах инструментов, которые вы можете использовать на PHP для такой обработки кеша:

  • APC : этот инструмент имеет некоторые функции кэширования, а также прекомпиляцию PHP
  • memcached : распределенная система кэширования
  • eAccelator : предварительная компиляция
  • xcache : предварительная компиляция
1 голос
/ 27 ноября 2009

Для сайта, который я недавно запустил, я написал некоторый код, используя ob_start () для кэширования моих файлов PHP в плоский HTML. Вот пример:

$cacheFile = 'cache/home.html';
$cacheTime = 600;

if (file_exists($cacheFile) && time() - $cacheTime < filemtime($cacheFile)) {
    require $cacheFile;
} else {
    ob_start();

    // Your dynamic code

    $fp = fopen($indexCacheFile, 'w');
    fwrite($fp, ob_get_contents());
    fclose($fp);
    ob_end_flush();
}

Сайт работает около месяца и имеет много трафика. Приведенный выше код несколько раз сохранял мой сервер.

0 голосов
/ 27 ноября 2009

Вы можете использовать кеширующий прокси, такой как Squid или какой-то PHP ускоритель . Кроме того, кэширование результатов запросов MySQL может быть хорошей идеей, если запрашиваемые данные не сильно меняются.

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

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