Mar 21 2009
Оптимизация программного кода
Вы наерное не раз сталкивались с медленными страницами на просторах веба. Тормозить они могут по двум причинам. Первая — медленная машина и плохо настроеный сервер. Вторая — криво написанный PHP-скрипт.
Так как первое от разработчика не зависит, то исправлять будем второе.
Я вообще поклонник идеального написания. Т. е. упростить все, что можно упростить.
Первое, что мы сделаем, это займёмся поиском причины тормозов.
Самая медленная часть компьютера — жесткий диск. И пусть даже они объединены в RAID-массив, это устройство остаётся главным тормозом. Чего стоят задержки в 3 милисекунды (в лучшем случае) для начала доступа к данным.
Значит во-первых оптимизировать нужно операции чтения-записи на диск. Это некоторые операции с БД, чтение и запись обычных файлов, подключение дополнительных модулей к вашей программе. При подключении дополнительных модулей к программе в виде отдельных файлов, идет обращение к разным частям харда, поэтому лучше будет, если вы соберете всю программу в как можно меньшее количество файлов.
При чтении-записи в файлы самой распространённой ошибкой является чтение при помощи file(). Эта команда загоняет в оперативную память весь файл, независимо от того, что вам из файла нужно. Оптимально пользоваться для открытия командой вроде fopen(). Также используется технология блочного расположения информации. Т. е. информации располагается через строго определенные промежутки. Сначала идет информационая часть блока, а потом незанятая информация. Такая фича даёт возможность перейти к определённой строке не проходясь по всему файлу в поисках символов перехода на новую строку. Хотя для таких целей уже используют БД, которые обладают подобными возможностями.
Второй важный фактор быстрродействия это использования быстрых алгоритмов поиска, сортировки. Как человеку, занимающемуся олимпиадным программированием, мне очень хорошо видны последствия нерациональных операций. Стоит помнить, что самого быстрого способа поиска информации, её сортировки и т. д. Сортировку большого количества маленьких объёмов информации лучше осуществлять одним алгоритмом, сортировку нескольких блоков большего объема нужно сортить по-другому.
Упрощению операций, выполяющихся в циклах (тем более в рекурсивных функциях) также стоит придать большое значение. Ведь сократив цикл из миллиарда итераций на одну функцию, вы фактически сокращаете программу на миллиард строчек кода.
По возможности заменять рекурсию на чтто-то другое. При использовании рекурсии в памяти хрянятся указатели на точку выхода.
И напоследок: отдавать приоритеты расходу ресурсов следует в таком порядке (чем дальше, тем больше стоит экономить):
- Жесткий диск
- БД (по сути жесткий диск вкупе с процессорным временем)
- Процессорное время
- Оперативная память
Отписывайтесь, где наврал, что упустил.

April 9th, 2009 at 9:08 pm
Отличная статья, большое спасибо!
P.s. Сам пишу на php и Вы Я вижу тоже, раз пишите о функциях fopen() и file()
April 10th, 2009 at 3:03 pm
Слушай, можешь конечно удалить мои сообщения как спамерские, я уже третье здесь оставляю. Но я думаю, что я не зря сюда зашёл. Я могу почоть тебе с сео, и спросить у тебя пару советов о пшп, сам я не оче6ь силён. Стукнись в аську, обязательно.
April 22nd, 2009 at 11:54 am
Спасибо почерпнула много полезной инфы, т.к. новичок в этом деле. а у вас всё подробно и понятно
May 7th, 2009 at 4:08 pm
Новички таланливые пошли..)) Лично меня твой сайт, Ангелина удивил, т.к собран на профессиональном уровне. Молодец
June 5th, 2009 at 11:18 pm
Sunny, я конечно жутко злой, но этот сайт не надо собирать)
это говнохостинг с говоноцмс юкоз, а приставка говно - потому что нельзя нечего сделать самому и 70% сайтов на юкозе - говносайты
June 11th, 2009 at 10:56 pm
Спасиб
Много полезных веще нашел для себя))
February 26th, 2010 at 9:08 am
Ìåêñèêà âîïëîùåíèå èäåàëüíîãî òóðèñòè÷åñêîãî íàïðàâëåíèÿ…
Ìåêñèêà ðàñïîëàãàåò ïî-íàñòîÿùåìó óíèêàëüíûìè âîçìîæíîñòÿìè äëÿ âñåõ âèäîâ òóðèçìà…
February 27th, 2010 at 4:11 pm
Ìåäèöèíñêèå èçäåëèÿ…
Ìåäèöèíñêàÿ òåõíèêà…
February 28th, 2010 at 8:36 am
×åì òóðèñòîâ ïðèâëåêàåò Èñïàíèÿ…
5 äîâîäîâ çà îòäûõ â Èñïàíèè…
March 2nd, 2010 at 4:11 pm
Îáùàÿ èíôîðìàöèÿ î Òóíèñå…
Äîñòîïðèìå÷àòåëüíîñòè Òóíèñà…
March 4th, 2010 at 7:36 am
Îáùàÿ èíôîðìàöèÿ î ×åðíîãîðèè…
Äîñòîïðèìå÷àòåëüíîñòè ×åðíîãîðèè…
March 4th, 2010 at 11:26 am
Êëàññèôèêàöèÿ ñòàíêîâ è îáîðóäîâàíèÿ ïî ìåòàëëó…
Ìåòàëëîðåæóùèé ñòàíîê…
March 5th, 2010 at 4:19 pm
Ïóòåøåñòâèå â Òàéëàíä…
Âåëèêîëåïíûé îòäûõ â Òàéëàíäå…
March 6th, 2010 at 4:31 pm
Óëüòðàçâóêîâîé íåðàçðóøàþùèé êîíòðîëü…
Óëüòðàçâóêîâûå ïðèáîðû…
March 10th, 2010 at 12:56 am
Ñòàáèëèçèðîâàííûå èñòî÷íèêè ïèòàíèÿ…
Èñòî÷íèêè ïîñòîÿííîãî òîêà GW Instek/Motech…