Всем добрый день! Спасибо что заглянули на мой блог. Сейчас будет поток мыслей (одним словом бред) по поводу того в чем я не очень хорошо понимаю, но тем не менее поговорить сам собой (а может и с кем то) поможет мне немного подумать "А правильно ли я реализовал php кэшированиена своем блоге?". Вообще все началось с того, что я решил посмотреть сколько запросов делает мой блог в базу данных.
На эту мысль меня с подвигли результаты мини анализа, который я провел совсем недавно. Я проверил сколько тратится sql запросов у меня на блоге, и на чистом вордпрессе, вот что получилось
При генерации главной страницы моего блога (Включены все модули что есть на блоге) скрипт делает 19 запросов. У вордпресса такие же затраты - 19 запросов в базу данных
Далее я посмотрел сколько делает запросов страница с текстом. Мой блог делает 20 запросов, вордпресс - 23
Цифры конечно могут быть не точными, но тем не менее мне не особо нравится, что мало функциональный движок (это я про свой) тяжелее, или на ровне с, много функциональным.
Но что поделать? Избавится от лишних запросов удаляя их, значит убить напрочь весь движок, разве не так?
После проведенного мной анализа, я начал искать способ решения данной проблемы. Лекарство от данного недуга есть, и называется оно кэширование.
Я не даром назвал заметку "Кэш, страшное слово, или все намного проще чем кажется?" ибо слово кэш, меня пугает своей не понятностью. Нет, я приблизительно знаю, что такое кэш, но на подсознательном уровне думаю, что не все так просто как мне кажется.
За точной информацией я естественно полез в интернет. Немного покопал, и как всегда нашел море умных и не понятных слов. Мне вот интересует вопрос, для кого пишутся эти заумные тексты? Как мне кажется для тех кто профи в программирование, а именно для тех кто не читает материал тех, кто их пишет. Хотя я скорее всего тоже такой, море умных слов и не понятно, что к чему... Тем не менее я понял одну вещь.
Кэширование - это ничто иное как сохранения результата работы скрипта в отдельный файл, который помещается на сервере. В следующий раз когда кто-нить обратится к этой же странице, скрипт выдаст сохраненную копию, а не полезет за информацией в базу данных, тем самым сокращается количество SQL запросов, а значит повышается производительность.
Как в принципе я и думал. Но мне все равно кажется, что эта информация не полная или же не верная.
Все это очень хорошо, увеличения производительности и тому подобное, но вот есть одна маленькая проблема. Как сообщить скрипту, что страница поменялась, то есть когда обновлять сохраненный файл? Все из тех же умных и не понятных слов нашел два варианта создания механизма кэширования
Первый способ вроде более менее понятен, а вот со вторым я так и не разобрался. Да и скорее всего не получилось бы прибегнуть к этому способу, ибо, я так прикинул, в случае сравнения дат в заголовках, придется писать специальный код, который будет в определенных ситуациях обновлять эти даты. А мне лень писать такой код =)
Прежде чем придумывать механизм сохранения и обновления файлов, решил подумать над тем, что необходимо кэшировать? Сохранять всю страницу целиком я сразу же отказался, может это и самый экономный способ, но в этом случае откажут совершенно все модули, которые обновляются с каждым перезапуском страницы. Подумав решил, что в кэш отправятся все, что очень жирное (слишком много запросов) и все, что обновляется раз в 100500 лет. Такая возможность имеется, так как движок состоит из отдельных функций, результат которых, в большинстве случаев, html код, который можно сохранить в файл и отправить на сервер.
Подумав я решил, что отправлю в кэш заголовки, мета теги и почти весь сайтбар (кроме модуля меню) Этого достаточно чтобы сократить запросы приблизительно вдвое
Почему криворукий? Потому что способ распознания устаревших копий слишком уж "не умный", до более умного способа я не додумался...
Мета теги, заголовки и модуль читаемых постов меняется не очень часто, поэтому их сохраненные копии обновляются раз в час. Этого не сложно добиться, примеров в интернете полно!
А вот кэш модуля последних комментариев, опроса и последних постов обновляется только тогда когда произойдет изменения в базе данных. Как я определяю изменения? Все очень даже просто и не профессионально.
В корне блога лежит текстовой файл, в котором находится строчка вот такого вида:
1|1|0|0|0|1
Мой движок превращает эту строчку в массив. Каждая цифра в массиве отвечает за определенный модуль.
Изменения этой строчки производятся во время добавления поста в базу данных, или добавления комментария, тем самым движок понимает, что кэш нужно заменить. Не правда ли "криворукий способ" а?
Тем не менее запросы на главной странице упали до 10-ти, а на страницах с заметками до 9-ти.
Добился сокращения SQL запросов в двое, есть чему радоваться, если не считая того, что используется неадекватный способ определения жизни файлов...
В общем заканчиваю монолог в надежде, что способ не такой уж и глупый....
Всем всего доброго! До встречи!