Практически съвети за оптимално използване на сървърните ресурси Любомир Русанов
Какво е сървърен ресурс? Изразходвана памет; Процесорно натоварване; Интернет трафик; Дискови операции; Брой файлове; База от данни; Брой връзки към уеб сървъра;
Основно правило за оптимизация Грешките на програмистите... се решават... с повече ХАРДУЕР!!!
До кога?
Основни грешки Динамично оразмеряване на картинки; Излишно голям брой елементи на страницата; Ненужни статистически модули; Неоптимални алгоритми; Проблемни бази данни и заявки; Лош разчет на посещенията; Самоопресняващи се и презареждащи се страници;
Намерете тясното място Концентрирайте се върху най-често извикваният код; Използвайте кеширане; Не извиквайте външни ресурси в реално време; Използвайте оптимални SQL заявки; Тествайте с големи обеми данни още при разработка;
Използване на XDebug XDEBUG е extension за дебъгване, трейсване, профилиране на php приложения; XDEBUG-a се поддържа от всички съвременни среди за php разработка: NetBeans, Eclipse и др.; Профайлера е подходящ за тестване на приложения, които имат проблем със скоростта, а и за откриване на тесни места (bottleneck); Информацията от профайлера може да се анализира със различни приложения;
Анализиране на profiling данните Цялата profiling информация се записва в лог файл; kCacheGrind - за Linux - winCacheGrind - Aналог за Windows И двата продукта дават информация за: Времето за изпълнение на всички извиквания към php функции (библиотечни или не) - както времето за изпълнение на самата функция (stand alone), така и общото акумулирано време, ако тази функция е викана, напр. в цикъл. Дърво на извикванията (в linux версията представена графично) Пълен списък на графовете Извикан->Извикващ. Stack-trace-ове.
Няколко полезни връзки With-xdebug xdebug with-xdebug kcachegrind eclipse-using-xdebug/
Съвети за бази от данни Използвайте правилните типове данни; Нормализирайте данните – създавайте правилни схеми; Създавайте индекси – само когато са необходими; Пишете заявките така, че да могат да използват индекси; Използвайте само тези колони, които ви трябват; Използвайте inner join винаги, когато е възможно;
Правилно! Грешно!
SELECT * FROM project_categories pc INNER JOIN projects p ON p.id = pc.project_id Използване на индекс за join! Без използване на индекс за join!
Въпроси и отговори
Благодаря Ви! Любомир Русанов