Оптимизация картинок
Бирман открыл для себя программу PureJPEG, начитавшись буржуя Joel-я, который на днях про нее написал. Программа эта убирает из jpeg-ов служебный мусор, уменьшая их размер.
И ведь нет пророка в своем отечестве, ибо во-первых, Bolk давно еще писал программу photoshop crap remover, которая делает то же самое, а во-вторых, использовать фотошоп для оптимизации картинок для веба — черезвычайно глупо, так как он в jpeg-и столько говна пихает, что страшно.
Так что просто надо пользоваться нормальными графическими редакторами.
Другое дело — это pngcrush. Эта программа работает с png-файлами, но она не просто тупо убирает оттуда мусор, а пытается оптимизировать png-файл всеми возможными способами.
Очень удобно, ибо png все-таки гораздо лучше устаревшего gif-а.
PS. Кстати, Болковский crap remover написан на php, поэтому его можно прикрутить прямо к сайту.
Фетиш ЧПУ
ЧПУ — вещь, безусловно, неплохая и местами полезная. Однако, и она превратилась в фетиш.
Проблема с ЧПУ по большому счету одна: URL не может содержать русские буквы. И она никак не лечится. Есть два способа как это обойти:
1. Использовать английский язык. Способ не так уж и плох, когда используются УРЛы, типа /about. А вот как только мы хотим, например, отображать в УРЛе название статьи... Если адрес статьи day_10_presenting_your_main_content_first.html, и при этом она называется — сюрприз! – «Day 10: Presenting your main content first», и вы, разумеется, спокойно понимаете по-английски, то никаких проблем не возникает.
А если статья называется «Десять убедительных доводов, почему все дураки», то в лучшем случае у вас получится из себя выдавить в качестве УРЛа «fools» или «morons». Вы можете даже разродится чем-то типа «ten_convincing_reasons_why_everyone_is_so_god_damn_stupid.html», но это будет такой специальный ЧПУ для очень ограниченного круга Ч. Не все знают английский. Далеко не все.
2. Использовать транслитерацию. Способ тоже не идеален, потому что многие — например, я — так и не застали транслит, и просто физически его не могут читать. Реальный пример — «/02.12.2004/chitallogid/comments». Слово «chitallogid» образовано автоматически из заголовка «Читал логи… долго смеялся».
Где тут понятность?
Выводы тут просты: не делайте из еды культа, не ебите мозги читателям сверхфункциональными УРЛами, которых все равно никто, кроме вас, не понимает. УРЛы, типа entry/3098, ought to be enough for everybody.
Иначе говоря, ЧПУ — это УРЛ, в котором нет непонятных для пользователя элементов. То есть ЧПУ — это не какая-то «добавочная понятность», которую все стараются внести в УРЛ, а всего-навсего отсутствие лишнего мусора.
Skinnable-cacheable
Придумал неболшую идею. Наверняка не я первый.
Идея заключается в том, что страницы кэшируется. Но при этом хочется сделать их Skinnable. То есть чтобы можно было «шкурки» менять. Как кэшировать в таком случае — не совсем понятно.
Простой и забавный (полу)выход. Везде в документах пишем и документы, естественно, кэшируем полностью. И выдаем кэш. А вот css.php — нет, не кешируем и выдаем в нем нужную css-ку в зависимости от содержимого cookies-ов.
ЧПУ и PHP (revisited)
ЧПУ — это термин, придуманный командой НовоКиберска, обозначает он «Человекопонятный УРЛ». Термин нигде широко не употреблялся, пока я не написал 5 сентября 2000 года заметку «ЧПУ и PHP». За эти три года термин довольно неплохо раскрутился.
За эти годы очень многие ссылались на эту заметку, поэтому я взял на себя труд переписать ее, добавив еще несколько способов сделать ЧПУ и убрав всякий мусор. Итак...
В принципе, ничего нового и оригинального в идее понятного УРЛа нет. Про это писал и Лебедев, и другие товарищи. Вообще, мне всегда нравились УРЛы такого, например, вида: php.resourceindex.com/Complete_Scripts/Guestbooks/
Итак, как это сделать в домашних условиях?
Способ раз
Вообще, самая первая мысль — это создавать для каждой заметки поддиректорию с соответствующим именем и помещать в нее index.html, то есть сделать так, чтобы по адресу spectator.ru/technology/php/user_friendly_urls лежал бы реальный файл. Разумеется, так дело не пойдет.
Способ два
Думаем дальше. Раз страница не существует, то она выдает 404. Так что вторая идея — прописать в фале .htaccess страницу, которая будет выдаваться при ошибке 404, а уже эта страница будет смотреть на текущий УРЛ и выдавать нужный документ
То есть, в .htaccess пишем:
------------------------------------
ErrorDocument 404 /index.php3
ErrorDocument 401 /index.php3
------------------------------------
Пользователь набирает spectator.ru/technology/php/user_friendly_urls, такая страница не найдена, и загружается файл index.php3. Дальше — все просто. Переменная $REQUEST_URI дает нам адрес вызываемой страницы (в данном случае это будет /technology/php/user_friendly_urls), вывести на экран соответствующий документ — дело техники.
Этого мало. В некоторых браузерах и с поисковиками такой фокус не пройдет: страница 404 будет выдавать соответствующий код, и страницы индексироваться не будут. Поэтому надо, чтобы страница, которая грузится в случае ошибки 404, изменяла бы код ошибки и сигналила, мол, все ОК, есть такая страница:
Итого: прописываем в .htaccess страницу, которая, собственно, за все отвечает (у меня это index.php3). В этой странице пишем php-скрипт, который работает с $REQUEST_URI, шлет заголовок «http/1.0 200 Ok» и отображает то, что надо.
Плюсы: Очень простой способ. Работает почти везде.
Минусы: При таком способе нельзя постить содержимое формы на несуществующие псевдоурлы. И если в Апаче ведется лог 404-ых ошибок, то он будет забит.
Способ три
Для этих (и не только) целей есть специальный модуль в Апаче, который называется mod_rewrite. Он позволяет «переписывывать урлы», то есть, преобразовывать их «на лету» по правилам, которые вы ему опишите.
Это очень мощный модуль, и если вы в нем разберетесь, то сможете творить чудеса. Сам я до сих пор довольно мало с ним работал, поэтому читайте документацию, благо, что ее полно.
Module mod_rewrite URL Rewriting Engine.
A Users Guide to URL Rewriting with the Apache Webserver.
Модуль Apache mod_rewrite.
Mod_rewrite для чайников.
Плюсы: Очень мощный способ.
Минусы: Может не хватить мозгов. На хостинге может быть не установлен этот модуль.
Способ четыре
Основан на директиве FilesMatch, которая в Апаче является core feature. Все просто. Пишем опять же в .htaccess
Action throw /index.php
ForceType throw
ForceType application/x-httpd-php
После этого все УРЛы, которые подпадают под условие «^([^.]+)$», (то есть все урлы, в которых не содержится точка) будут передаваться на index.php. Вы можете написать свое условие, разумеется.
Подробности: тут, тут или тут.
Плюсы: Простой и удобный способ.
Минусы: Говорят, что для того, чтобы ForceType работал, php должен быть подключен к апачу в виде модуля. Если php вызывается, как обыкновенный CGI — ForceType работать не будет.