Writing /home/user/smartcj.com/wiki/data/cache/c/cb4f68b7c5486fae5ce81c790071ac88.i failed
Unable to save cache file. Hint: disk full; file permissions; safe_mode setting.
Writing /home/user/smartcj.com/wiki/data/cache/c/cb4f68b7c5486fae5ce81c790071ac88.metadata failed
ru:faq
Differences
This shows you the differences between two versions of the page.
| Both sides previous revisionPrevious revisionNext revision | Previous revision | ||
| ru:faq [2025/10/02 04:09] – [Приоритет скиминга] admin | ru:faq [2026/06/22 17:23] (current) – [How to test script] admin | ||
|---|---|---|---|
| Line 283: | Line 283: | ||
| * rewrites - если у вас Apache то htaccess, если nginx то в его конфиге | * rewrites - если у вас Apache то htaccess, если nginx то в его конфиге | ||
| - | |||
| - | ===== " | ||
| - | |||
| - | Иногда возникает необходимость в реализации или тестировании какой-то функциональности, | ||
| - | |||
| - | * out.php переименовываем в out_scj.php | ||
| - | * out.php делаем такой | ||
| - | < | ||
| - | <?php | ||
| - | |||
| - | if ($_GET[' | ||
| - | $tmp = parse_url($_GET[' | ||
| - | if ($tmp[' | ||
| - | } | ||
| - | |||
| - | include(' | ||
| - | </ | ||
| Line 726: | Line 709: | ||
| + | ====== How to count with JS ====== | ||
| + | Для обратной совместимости, | ||
| + | |||
| + | Если вы хотите считать только ины то можно поставить JS счетчик следующим кодом: | ||
| + | |||
| + | < | ||
| + | <script | ||
| + | src=" | ||
| + | data-endpoint=" | ||
| + | ></ | ||
| + | </ | ||
| ====== Server Load ====== | ====== Server Load ====== | ||
| Line 806: | Line 800: | ||
| - | Из всего этого следует | + | Из всего этого следует вопрос: |
| + | |||
| + | |||
| + | ====== How cache works ====== | ||
| + | |||
| + | Как работает кеширование в интернет | ||
| + | |||
| + | < | ||
| + | |||
| + | +------------------+ | ||
| + | | Пользователь | ||
| + | +------------------+ | ||
| + | | | ||
| + | v | ||
| + | +------------------+ | ||
| + | | | ||
| + | +------------------+ | ||
| + | | | ||
| + | | ||
| + | v | ||
| + | +----------------------------------+ | ||
| + | | Кэш браузера | ||
| + | +----------------------------------+ ни скрипт никогда не узнают что | ||
| + | | ||
| + | v | ||
| + | +----------------------------------+ | ||
| + | | CDN | Аналогично и тут, запрос еще не дошел до сервера | ||
| + | +----------------------------------+ | ||
| + | | | ||
| + | | ||
| + | v | ||
| + | +----------------------------------+ | ||
| + | | | ||
| + | | | ||
| + | +----------------------------------+ | ||
| + | | ||
| + | | ||
| + | | ||
| + | | ||
| + | | ||
| + | | ||
| + | | ||
| + | | | ||
| + | | ||
| + | v | ||
| + | +----------------------------------+ | ||
| + | | | ||
| + | +----------------------------------+ | ||
| + | | ||
| + | | ||
| + | | ||
| + | | ||
| + | | ||
| + | | ||
| + | | ||
| + | | | ||
| + | v | ||
| + | +------------------+ | ||
| + | | | ||
| + | +------------------+ | ||
| + | |||
| + | |||
| + | </ | ||
| + | |||
| + | |||
| + | **Как браузер получает страницу и где в интернете появляется кэш** | ||
| + | |||
| + | Когда пользователь вводит адрес сайта в браузере, | ||
| + | На самом деле браузер старается не ходить на сервер, | ||
| + | |||
| + | Вся система интернета устроена так, чтобы: | ||
| + | |||
| + | * получить ответ как можно быстрее | ||
| + | * пройти как можно меньшее расстояние | ||
| + | * задействовать как можно меньше серверов | ||
| + | |||
| + | Для этого используются кэши. | ||
| + | |||
| + | |||
| + | **Шаг 1. Браузер и кэш браузера** | ||
| + | |||
| + | После ввода адреса браузер сначала проверяет: | ||
| + | |||
| + | Браузер может хранить: | ||
| + | |||
| + | * готовую HTML-страницу | ||
| + | * стили | ||
| + | * JS скрипты | ||
| + | * изображения | ||
| + | |||
| + | Если нужные данные уже есть в кэше браузера: | ||
| + | |||
| + | * никакого запроса в интернет не происходит | ||
| + | * сервер вообще ничего не узнаёт о пользователе | ||
| + | * страница открывается мгновенно | ||
| + | |||
| + | Это самый быстрый вариант. | ||
| + | |||
| + | **Шаг 2. DNS — поиск адреса сервера** | ||
| + | |||
| + | Если браузеру всё-таки нужно идти в интернет, | ||
| + | |||
| + | «Куда идти? | ||
| + | |||
| + | Для этого используется DNS. DNS переводит имя сайта в IP-адрес | ||
| + | |||
| + | **Шаг 3. CDN — сервер ближе к пользователю** | ||
| + | |||
| + | После DNS запрос идёт не обязательно сразу на основной сервер сайта. | ||
| + | |||
| + | Между браузером и сервером может находиться CDN — сеть серверов в разных странах. | ||
| + | |||
| + | Пример: | ||
| + | |||
| + | Если всегда обращаться в Европу: | ||
| + | |||
| + | * сигналу нужно пройти большое расстояние | ||
| + | * страница будет загружаться медленно | ||
| + | |||
| + | CDN работает так: | ||
| + | |||
| + | * первый запрос идёт на основной сервер | ||
| + | * ответ сохраняется на сервере CDN ближе к пользователю | ||
| + | * следующие пользователи получают страницу быстрее | ||
| + | |||
| + | CDN удобно использовать для контента, | ||
| + | |||
| + | * если CDN отдаёт ответ из кэша, запрос не доходит до основного сервера | ||
| + | * скрипт ничего не узнаёт о пользователе | ||
| + | |||
| + | **Шаг 4. Веб-сервер (Apache / Nginx)** | ||
| + | |||
| + | Если CDN не смог отдать страницу, | ||
| + | |||
| + | У веб-сервера есть выбор: | ||
| + | |||
| + | * отдать готовую страницу (если он откуда то знает что надо отдать) | ||
| + | * передать запрос дальше в скрипт | ||
| + | |||
| + | Если у веб-сервера есть готовый ответ: | ||
| + | |||
| + | * он сразу возвращает страницу | ||
| + | * скрипт не запускается | ||
| + | * скрипт не знает, что был запрос | ||
| + | * Apache может передать запрос скрипту 1 раз и закешировать ответ | ||
| + | |||
| + | Важный момент: | ||
| + | |||
| + | Это: | ||
| + | |||
| + | * отдельное хранилище | ||
| + | * файлы, память или Redis | ||
| + | * грубо это как отдельная коробка в которую могут складывать данные кто угодно кто работает на сервере | ||
| + | |||
| + | |||
| + | Еще раз для понимания. В серверный кеш могут писать: | ||
| + | |||
| + | * веб-сервер | ||
| + | * скрипт | ||
| + | * оба одновременно | ||
| + | |||
| + | |||
| + | Шаг 5. Скрипт (приложение) | ||
| + | |||
| + | Если запрос дошёл до скрипта: | ||
| + | |||
| + | * скрипт точно знает, что был пользователь | ||
| + | * может записать статистику | ||
| + | * может принять решения сформировать страницу снова или отдать из кеша | ||
| + | |||
| + | |||
| + | **Скрипт формирует страницу из данных.** | ||
| + | |||
| + | Важно: кэшироваться может не только вся страница, | ||
| + | |||
| + | **Пример: | ||
| + | |||
| + | * название сайта хранится в базе и почти не меняется | ||
| + | * текущая дата должна быть новой каждый раз | ||
| + | |||
| + | |||
| + | Тогда: название сайта можно взять из базы 1 раз и сохранить в кеше, а дата формируется заново каждый раз | ||
| + | |||
| + | Те закеширована не вся страница, | ||
| + | |||
| + | **Шаг 6. База данных** | ||
| + | |||
| + | Если данных нет ни в каком кэше: | ||
| + | |||
| + | * скрипт обращается к базе | ||
| + | * база читает данные (тут варианты - если хватает памяти Mysql держит данные в памяти, | ||
| + | * страница полностью формируется заново | ||
| + | |||
| + | |||
| + | |||
| + | **Что из этого всего надо понять** | ||
| + | |||
| + | * если запрос не дошел до скрипта - скрипт про него просто не узнает | ||
| + | * page cache, Redis, memcache, серверный кеш и еще куча слов - это не важно, это просто название " | ||
| + | **Как используется память под кеш** | ||
| + | * базово данные хранятся в файлах | ||
| + | * база данных (mysql) может данные держать в памяти если хватает памяти и достаточно выделено в конфиге mysql | ||
| + | * redis (и любой другой кеш) так же как и база стараются хранить данные в памяти но если не хватает - скидывает в файл | ||
ru/faq.1759378160.txt.gz · Last modified: by admin
