Оптимизация кода и структуры

Оптимизация - головная боль многих программистов. Обычно страх перед ней ставит разработку проекта на второй план, а это как известно, ошибка многих. Поэтому в этой статье я расскажу как лучше всего оптимизировать свой скрипт на максимум!

Вначале разберём элементарные операторы

echo - всегда используем его вместо print, это доказано уже давно, и главное, не делайте текст который заключен в один оператор слишком массивным, лучше разбейте его на два, три, а то и четыре echo''; , например для читабельности html кода по строкам, это поможет использовать меньше оперативной памяти при выводе, но нагрузит больше процессор, но это не так существенно, так как при маленькой оперативе могут возникнуть непредвиденные ошибки, а при перегрузке проца, тот просто дождётся своей очереди, а при возможности лучше выводить код за теги , но это может вывести ошибку в плане вывода всего текста который был введён вне операторов, проигнорировав сам замысел программы, для этого просто используйте include для подключения большого куска кода в котором лучше не использовать php вообще и лучше указать что файл именно html что поможет серверу использовать меньший приоритет по поиску php функций.

while - намного проще использовать по сравнению с for и как известно более быстрее, например:

$wh = 0; 
while( $wh < 3 ) { 
    echo $wh++; 
}
for ( $wh = 0; $wh < 3; $wh++) { 
    echo $wh; 
}

Второй пример будет работать намного медленнее, и требовать больше системных ресурсов! И дело не в том что первый цикл одновременно делает две команды (вывод + постфиксный инкремент: echo $wh++;) а дело именно в самом цикле!

if-else - в этой связке есть много интересного, чего не видит начинающий программист, например что эта инструкция может ВЕЗДЕ заменить switch, так как многие кто только начинают писать на php используют примитивную конструкцию:

if($_GET['do'] == 'mail') {
    ...
}
if($_GET['do'] == 'support') {
    ...
}
if(!$_GET['do']) {
    ...
}

вот тут и возникает вопрос у многих, как сделать так, чтоб если пользователь ввёл $_GET['do'] значение которого нет в этих макаронах, выводить не пустую страницу или низы со ссылками, а именно конкретную по умолчанию, потом программист узнаёт что существует конструкция switch которая помогает думать за программиста и выводит значение по умолчанию, НО в тот момент он даже не задумывается о системных нагрузках и с радостью новой идеи в голове бежит писать код по новой иерархии switch... Но не тут то было мой дорогой друг, самый оптимальный способ и самый быстродействующий так называемая макаронина:

if($_GET['do'] == 'mail') {
     ...
} 
elseif($_GET['do'] == 'support') {
     ...
} 
else {
     // а вот тут у нас долгожданное значение по умолчанию
} 

Почему именно так? А потому что это грохает меньше системных ресурсов(кстати очень существенно) и ничего более, но и конечно старый способ более привычен, если вы не так долго использовали switch.

Структуризация файлов

Всегда трудно придумать структуризацию файлов и как они зависят друг от друга, например многие используют .htaccess для закрытия доступа к файлам но по моему проще создать константу доступа, например файлы для которых браузеру разрешен доступ создаём константу, а в файлах которые мы подключаем через require_once проверяем доступность этой константы, это позволит выводить ссылки для перехода на нужную страницу по оформлению сайта, а не просто то что доступ закрыт и неизвестно что в виде ошибки доступа. Эта конструкция может использоваться и в доступе по статусу пользователей, но это уже как вам угодно.

Главным вопросом оптимизации разберём eAccelerator и как лучше оптимизировать скрипты для работы с ним:

Первое правило, это не использовать множество инклудов и вставки файлов, так как оптимизатор не любит, что иногда доступ к таким инклудам закрыт, поэтому старайтесь использовать require_once который подгружает файл перед исполнением скрипта, чтоб тот попал в кэш оптимизатора как цельный код, но и старайтесь не подключать файлы которые не используются вообще или редко, поэтому советую использовать один файл на одно явное действие, например ввод текста или запись с проверкой текста, это должны быть разные файлы, так как если это будет один файл, то одно другому будет мешать, а вот если вы поставите конструкцию проверки и записи текста на инклуд, который будет активироваться при обнаружении переменной текста, то она не всегда попадёт в глаза оптимизатора, вот вам и тормоз, от которого лучше избавляться!

Поэтому лучше использовать сущий минимум, который необходим для работы файла так, как вы хотите, а не много функций, в одном файле которые будут его тормозом, делайте сами файлы ветками дерева а не инклуды которые расположены в файлах!

Записи