Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

PHP для начинающих Нагрузки.


Компания ИнфоСтарз

Наш каталог:
Игры

     Для мобильных

     Флэш-игры

Онлайн игры (NEW)

     Wizards World

     Wizards World II

     Острова

     Астроникс

     Война онлайн

Музыка

     Мелодии для мобильных

Изображения

     Красивое фото

     Веселые картинки

     "Домашнее" фото

Видео

     Забавные ролики

     Видео для мобильных

Программы

Поздравления:
Меньше с каждым годом Вась
Стало вдруг в России.
Стены именем не крась,
Так гордись, Василий, -
Царствуй в собственной душе
И крепи делами,
Будь доволен им вполне,
Как цари веками.
Поздравления прими
В день свой именинный
И святого помяни,
В торжестве повинном!
Далее...
Подписаться на поздравления в стихах
Изучающим английский:

Улучшаем свой английский. Избавляемся от "Russian English" (архив материалов)
Английские стихотворения с переводом (архив материалов)

На заметку :
Фильмы этой недели на ТВ
Говорят известные люди...
Готовим вкусно и быстро!

Анекдот недели:
Заявление
“Прошу разрешить мне приступить к выполнению работы, опоздание на которую произошло по причине наличия неисправности в системе, обеспечивающей функциональный вывод организма из состояния сна”
Читать еще...
Холдинг Internet-проектов
Вакансии - Москва - полный рабочий день

- разработчик Perl, з/п от 2000$
- разработчик PHP, з/п от 1600$
- специалист в области PR, з/п от 1500$
- менеджер интернет проекта, з/п от 1300$

Полная информация о вакансиях


Нагрузки

Доброго времени суток, коллеги-программисты. Много времени прошло со времени выхода последнего выпуска, но мы живы и мы продолжаем. Для начала вспомним, на чем мы остановились в тот раз…

Если помните, мы открывали файл, читали их него числа и ссылки, потом прибавляли к счетчику той ссылки, которая для нас в этот момент является текущей и сохраняли весь массив обратно. Так вот, написанная таким образом программа, имеет в своей реализации одну проблему, о которой я предложил поразмыслить читателям рассылки.

 Проблема эта неощутима на тестовой системе, но мгновенно становится актуальной в реальных системах. Если этот скрипт будет запущен одновременно – то возможна ситуация, когда общий файл будет открыт дважды, а записи будут теряться из-за перезаписывания. Можно решить это блокировкой, но на самом деле ни одна из серьезных систем статистики не используем файлы для хранения счетчиков напрямую. Используются базы данных или собственные решения, специально решающие вопросы большой нагрузки. Вот поэтому скрипт и был «учебным» - то есть он работает и не работает одновременно. Работает в лабораторных условиях и не выдерживает полевые испытания.

Такая же проблема возникает во многих других ситуациях, когда страница генерируется долго и с большими затратами ресурсов (времени, памяти и других) и поэтому непригодна для использования в нагруженных системах как есть. Загруженность web-сайта ни в коем случае нам не враг, потому что популярность ресурса это то, ради чего они создаются, но надо что-то делать, чтобы «скрипт» не умирал, если страницу просматривают более 2 человек. Об этом и поговорим…

Википедия говорит, что «Кеш или кэш (англ. cache) — это промежуточный буфер с быстрым доступом, который хранит в себе ту информацию, которая с наибольшей вероятностью может быть запрошена». В применении к нашему случаю это означает, что надо создавать страницу и где-то ее хранить, а пользователю показывать не динамическую страницу, а созданную и сохраненную версию, обновляемую по мере того, как информация устаревает.

Любая динамическая страница в первом приближении представляет собой программу, которая выводит HTML-код, например, так… (подразумевается, что все это мы пишем в файл “test.php”).

echo “Количество записей в базе равно $counter”;

echo “Размер базы: $size”;

А можно так…

$out = “Количество записей в базе $counter”;

$out .= “Размер базы: $size”;

echo $out;

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

file_put_contents (“test.htm”, $out);

echo $out;

Внешних перемен в поведении скрипта не произойдет. Зато появится файл test.htm в котором будут сохраняться результаты его работы в готовом для клиента виде. Запуская www.mysite.ru/test.php мы получим динамическую страницу, а www.mysite.ru/test.htm -- статическую по состоянию на последний запуск test.php.

Половина дела сделана – промежуточный буфер создан. Двигаемся дальше.

Серверу Apache можно продиктовать правила распознавания ссылок. Создайте файл .htaccess (именно так – начиная с точки) и запишите в нем вот это:

<IfModule mod_rewrite.c>

 RewriteEngine On

 RewriteBase /

 RewriteRule ^test$ /test.htm

</IfModule>

Теперь при переходе на ссылку www.mysite.ru/test/  будет выполнятся test.htm. Но его надо создавать, то есть запускать время от времени напрямую или извне. А еще его нужно будет запускать, если htm файла нет (просто еще не создан).

Модифицируем запись:

<IfModule mod_rewrite.c>

 RewriteEngine On

 RewriteBase /

 RewriteRule ^test$ /test.htm [N]

 RewriteCond %{REQUEST_FILENAME} !-f

 RewriteRule ^test.htm$ /test.php [L]

</IfModule>

Это «заклинание древних шаманов» на самом деле переводится очень просто.

  1. Если попадается строка /test то заменить ее на test.htm и повторить анализ строки заново ([N] - next)
  2. Если не существует файл htm – то заменить его на test.php

Осталось только добавить, что для обновления КЭШа файл htm можно просто удалять время от времени. А в качестве упражнения на этот раз предлагается подумать, каким должна быть структура htaccess-файла, чтобы кэшировать любые php-скрипты, а также над механизмом обновления. Обсудим это в следующий раз.

До встречи!


В избранное