Mar 21 2009

Оптимизация программного кода

Category: блогMikola @ 10:36 pm

Вы наерное не раз сталкивались с медленными страницами на просторах веба. Тормозить они могут по двум причинам. Первая — медленная машина и плохо настроеный сервер. Вторая — криво написанный PHP-скрипт.

Так как первое от разработчика не зависит, то исправлять будем второе.

Я вообще поклонник идеального написания. Т. е. упростить все, что можно упростить.

Первое, что мы сделаем, это займёмся поиском причины тормозов.

Самая медленная часть компьютера — жесткий диск. И пусть даже они объединены в RAID-массив, это устройство остаётся главным тормозом. Чего стоят задержки в 3 милисекунды (в лучшем случае) для начала доступа к данным.

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

При чтении-записи в файлы самой распространённой ошибкой является чтение при помощи file(). Эта команда загоняет в оперативную память весь файл, независимо от того, что вам из файла нужно. Оптимально пользоваться для открытия командой вроде fopen(). Также используется технология блочного расположения информации. Т. е. информации располагается через строго определенные промежутки. Сначала идет информационая часть блока, а потом незанятая информация. Такая фича даёт возможность перейти к определённой строке не проходясь по всему файлу в поисках символов перехода на новую строку. Хотя для таких целей уже используют БД, которые обладают подобными возможностями.

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

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

По возможности заменять рекурсию на чтто-то другое. При использовании рекурсии в памяти хрянятся указатели на точку выхода.

И напоследок: отдавать приоритеты расходу ресурсов следует в таком порядке (чем дальше, тем больше стоит экономить):

  1. Жесткий диск
  2. БД (по сути жесткий диск вкупе с процессорным временем)
  3. Процессорное время
  4. Оперативная память

Отписывайтесь, где наврал, что упустил.

Tags: ,

24 Responses to “Оптимизация программного кода”

  1. dofollow says:

    Отличная статья, большое спасибо!

    P.s. Сам пишу на php и Вы Я вижу тоже, раз пишите о функциях fopen() и file()

  2. Maks says:

    Слушай, можешь конечно удалить мои сообщения как спамерские, я уже третье здесь оставляю. Но я думаю, что я не зря сюда зашёл. Я могу почоть тебе с сео, и спросить у тебя пару советов о пшп, сам я не оче6ь силён. Стукнись в аську, обязательно.

  3. Ангелина says:

    Спасибо почерпнула много полезной инфы, т.к. новичок в этом деле. а у вас всё подробно и понятно

  4. Sunny says:

    Новички таланливые пошли..)) Лично меня твой сайт, Ангелина удивил, т.к собран на профессиональном уровне. Молодец

  5. melksoft says:

    Sunny, я конечно жутко злой, но этот сайт не надо собирать)
    это говнохостинг с говоноцмс юкоз, а приставка говно - потому что нельзя нечего сделать самому и 70% сайтов на юкозе - говносайты

  6. Kirill says:

    Спасиб :) Много полезных веще нашел для себя))

  7. Îòåëè Ìåêñèêè says:

    Ìåêñèêà – âîïëîùåíèå èäåàëüíîãî òóðèñòè÷åñêîãî íàïðàâëåíèÿ…

    Ìåêñèêà ðàñïîëàãàåò ïî-íàñòîÿùåìó óíèêàëüíûìè âîçìîæíîñòÿìè äëÿ âñåõ âèäîâ òóðèçìà…

  8. Ìåäèöèíñêîå îáîðóäîâàíèå says:

    Ìåäèöèíñêèå èçäåëèÿ…

    Ìåäèöèíñêàÿ òåõíèêà…

  9. Îòäûõ â Èñïàíèè says:

    ×åì òóðèñòîâ ïðèâëåêàåò Èñïàíèÿ…

    5 äîâîäîâ çà îòäûõ â Èñïàíèè…

  10. Îòäûõ â Òóíèñå says:

    Îáùàÿ èíôîðìàöèÿ î Òóíèñå…

    Äîñòîïðèìå÷àòåëüíîñòè Òóíèñà…

  11. Îòäûõ â ×åðíîãîðèè says:

    Îáùàÿ èíôîðìàöèÿ î ×åðíîãîðèè…

    Äîñòîïðèìå÷àòåëüíîñòè ×åðíîãîðèè…

  12. Ìåòàëëîîáðàáàòûâàþùèå ñòàíêè says:

    Êëàññèôèêàöèÿ ñòàíêîâ è îáîðóäîâàíèÿ ïî ìåòàëëó…

    Ìåòàëëîðåæóùèé ñòàíîê…

  13. Îòåëè Òàéëàíäà says:

    Ïóòåøåñòâèå â Òàéëàíä…

    Âåëèêîëåïíûé îòäûõ â Òàéëàíäå…

  14. Îòåëè Êèòàÿ è ßïîíèè says:

    Èíôîðìàöèÿ î Êèòàå…

    Èíôîðìàöèÿ î ßïîíèè…

  15. Îòåëè Ãðåöèè. Êðèò says:

    Êðèò - ñàìûé áîëüøîé îñòðîâ Ãðåöèè…

    Îñòðîâ Êðèò - ýòî äðàãîöåííàÿ ÷àñòü èñòèííî ãðå÷åñêîé çåìëè…

  16. Ýëåêòðîííûå âåñû è êîìïîíåíòû âåñîâûõ ñèñòåì says:

    Âåñû ïðîñòîãî âçâåøèâàíèÿ…

    Òîðãîâûå âåñû…

  17. Ñòàíî÷íîå îáîðóäîâàíèå says:

    Òîêàðíûå, ñâåðëèëüíûå, øëèôîâàëüíûå è çàòî÷íûå ñòàíêèü…

    Îñîáåííîñòè òîêàðíûõ ñòàíêîâ ñ ×ÏÓ…

  18. Pavel says:

    Хотелось бы увидеть хотя бы несколько наглядных примеров, т. к. я пока в этом НУБ.

  19. Îòåëè Àâñòðèè says:

    Îòåëè Àâñòðèè: Âåíà, Çààëüáàõ, Çàëüöáóðã, Çîëüäåí, Èøãëü…

    Âåíà - ãîðîä ðîñêîøíûõ äâîðöîâ, âåëè÷åñòâåííûõ ïëîùàäåé, æèâîïèñíûõ óëî÷åê…

  20. Îáîðóäîâàíèå äëÿ ìîíòàæà ìåäíûõ òðóá says:

    Îáîðóäîâàíèå äëÿ ìîíòàæà ñòàëüíûõ òðóá…

    Èíñòðóìåíò äëÿ ïðåññ-ôèòèíãà…

  21. Òåñòîâîå è èçìåðèòåëüíîå îáîðóäîâàíèå Yokogawa says:

    Êîíòðîëüíî-èçìåðèòåëüíûå ïðèáîðû Yokogawa…

    Àíàëèçàòîðû Yokogawa…

  22. Эпиктет says:

    Зависть — враг счастливых.

  23. casino en ligne says:

    casino en ligne…

    [...] Leurs piles sont en hausse? Sont la diminution? Je devrai normalement suivre ou de relancer un joueur qui est arrivé à la table avec un gros stack et copeaux a désormais très peu nombreux. [...]…

  24. БУК says:

    СУК…

    флэш ……

Leave a Reply

*
To prove that you're not a bot, enter this code
Anti-Spam Image