Всегда было желание написать какую-нибудь интересную статью о программировании на php, основанную на собственном практическом опыте, но мне всегда казалось, что мой опыт никому не пригодится. В общем — да, наверно так и есть, но всегда есть люди, которые только начинают программировать и простейший для меня вещи другим кажутся очень сложными.
Толчком к написанию текста для меня стало наблюдение в эти выходные. Мой, еще совсем молодой коллега по цеху показал мне свое творение — блог для его портала. В общем, как первый опыт написания подобного — очень даже неплохо. Но при ближайшем рассмотрении я понял, что получился очередной велосипед, при том не самый хороший. Ну ничего, на ошибках учатся : )
Итак, в этой статье я попробую дать общие советы начинающим веб-программистам, которые хотят написать свой первый большой и серьезный проект.
Совет #1. О велосипедах.
Не изобретайте велосипедов. Каждый уважающий себя программист должен хоть раз в жизни написать собственный фреймворк/cms/etc. В качестве опыта написания сложных вещей — да. Но вы должны понимать, что делаете это для себя и в коммерческое использование это вряд ли пойдёт по ряду причин (надо объяснять почему?). Если вам нужен готовый блог — скачайте готовый опенсорс блог. Нужен форум — купите за 1000 рублей лицензию на IPB. Нужна система управления сайтом с новостями — DLE вам в помощь.
Совет #2. Об оформлении кода.
Любой код нужно писать так, чтобы его можно было удобно читать вам самим в будущем. Переменные называйте так, чтобы было понятно зачем они нужны и что они делают. Старайтесь пользоваться одними и теми же именами переменных на всех страницах сайта, чтобы не вносить лишнюю путаницу. Оформляйте код отступами, не скупитесь на пробелы и табуляции, не забывайте выполнять все те правила, что пишут в начале каждого самоучителя по программированию. Такие книги составляют не дураки, серьезно :)
Совет #3. О базах данных.
Чаще всего современные сайты являются красивой прослойкой для работы с базой данных. Сайты записывают информацию в базу, затем ее структурированно и красиво выдают. Основная идея при работе с базой — не делайте никаких операций вычисления/преобразования на лету, если этого можно избежать. Обрезание тегов, правильная расстановка тире в номере телефона, формат дат и прочее — это всё нужно делать до сохранения в базу данных. В базе всё должно храниться уже отформатированным. Просто подумайте какую тонну одинаковых и бесполезных операций будет совершать код, делая выборку на тысячу записей? А если записей не тысяча, а посетителей не 10 в сутки?
Ну и об оптимизации баз данных. Есть несколько распространённых ошибок у новичков:
— Пренебрежение индексами
— Создание чрезмерно простых (и как следствие — запросы в цикле) или слишком сложных запросов с множеством объединений, группировок, сортировок и пр.
— Выбор неправильных типов полей для своих данных
О пренебрежении индексами. Ну что тут говорить. Вешать индексы на всё подряд тоже плохо. Но основная суть развешивания индексов проста. Нужно провести аудит своих запросов, посмотреть на условия WHERE, ORDER и GROUP и на нужные комбинации этих условий вешать на нужные поля нужные индексы : )
С самими запросами сложнее. Понимание как лучше приходит с опытом, но в целом — лучше 2 простых запроса, чем один, но большой. Запрос внутри цикла, как я уже сказал — плохо. лишних джойнов нужно стараться избегать. Ну и стараться кешировать информацию (для начала — прямо внутри базы). К примеру, если вы в запросе выбираете комментарии к статье и объединяете с таблицей пользователей (SELECT c.id, u.login FROM comments as c INNER JOIN users as u ON (u.id = c.uid) WHERE c.item = ‘1’), то информацию о пользователе можно хранить (дублировать) прямо в таблице с комментариями. Логин пользователя же не каждый день меняется, правда? При больших объёмах БД и нагрузках на сайт такой подход вполне оправдывает себя.
Пожалуй, на этом всё. В будущем постараюсь писать более конкретизированные материалы с примерами.