2009-11-27 3 views
1

У меня есть сайт для объявлений, в котором используются PHP и MYSQL.Какой тип кеширования я должен использовать?

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

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

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

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

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

Благодарности

ответ

2

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

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

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

В перспективе инструментов вы можете иметь на PHP, чтобы сделать такую ​​обработку кэша:

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

-1 для клиентского кэширования и рекомендации по эффективности. Правила кэширования клиентов должны быть явно заданы для файлов, и есть связанные с ними компромиссы (для дальнейшего кэширования требуется изменение URL-адреса ресурса для обновления). Используйте CDN (например, CloudFront) и хранилище, например S3. Чтобы действительно ускорить работу, прочитайте http://developer.yahoo.com/performance/rules.html – orip

+0

@Orip: спасибо за ваши советы, я отредактировал свой ответ, чтобы отразить эти – RageZ

0

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

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

1

Для сайта, который я недавно запустил, я написал некоторый код, используя 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(); 
} 

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

Смежные вопросы