Автор Тема: Производительность и еще раз производительность  (Прочитано 9669 раз)

0 Пользователей и 1 Гость смотрят эту тему.

Оффлайн IgorN

  • Team
  • Герой
  • ***
  • Сообщений: 2908
  • Карма: 90
    • Мой сайт
Довольно много тем было по поводу производительности. Предлагали разные варианты решения типа кэширования, оптимизации запросов и т.д.
Но... сегодня тестил проект с помощью xdebug и выяснились такие интересные подробности...

Оказывается:
более 70% времени идет сюда Zend_Controller_Front::getInstance()->dispatch();
и более 20% времени идет сюда Zend_Layout::startMvc(...);

Первое,что меня удевило так это слои, вот какого хрена они стока жрут...
Пока не выяснял где узкое место в слоях (времени не было), а вот где узкое место в dispatch() выяснить удалось...
Оказывается примерно 70% времени в dispatch() идет на функции load_class and autoload.

В итоге при решении проблемы с load_class and autoload  мы получим прирост а 50% на обычных страницах без супер-пупер запросов и огромных форм.

А вот как решить проблемку, это уже другой вопрос...
В статьях обычно все классы подключают при помощи Zend_Loader::load_class (вроде так называется) в index.php, но в крупном проекте используются довольно много классов как их все подключить...
Вообще можно как то избавится от автолода и лоадкласса с наименьшими проблемами? Может кэшировать как то?

Может кто решал уже подобные проблемки или что то посоветует.
Жду любых комментариев.
Мой сайт: http://igor-negrutsa.info/
Я знаю только то,что ничего не знаю, а многие не знают даже этого.

Оффлайн Zh0rzh

  • Team
  • Герой
  • ***
  • Сообщений: 1312
  • Карма: 80
loadClass - это подключение файлов с классами.

Частично эту проблему решают оптимизаторы типа eAccelerator, APC и тд

Еще одно решение - это заранее создать один файл, который будет состоять из всех подключаемых классов.
Дмитрий Котеров добился таким образом увеличения производительности в 22 раза
http://dklab.ru/chicken/nablas/49.html , но там скрипт состоял только из подключения классов.

Я пробовал на живом проекте такой подход - экономия на копейках (10-20%), ради которой не стоит использовать такой костыль.


Оффлайн Keel

  • Опытный
  • ***
  • Сообщений: 212
  • Карма: 45
Подходы для ускорения, которые я пробовал:
1. Делать "сборки классов ZF" в одном файле. Не обязательно собирать классы всего фреймворка, можно только часто-используемые, а остальные подключать автолоадом. Работает быстро, однако здесь есть ряд технических проблем, обход которых отбивает всякое желание с ними возиться.
2. Использовать акселератор - тут все ясно
3. Не использовать autoload от Zend_Loader'а (из-за сумасшедшего количества проверок), а использовать свой простой класс (функцию) для автозагрузки. Как можно меньше проверок и подгрузка классов по require вместо require_once (c зендовской концепцией один класс - один файл, нам незачем использовать require_once при автолоаде. Вызов функции автолоада уже означает, что заданный класс еще не был определен и значит его файл не был загружен). Пример самой простой и быстрой функции автолоада:

function autoload($class) {
        require 
str_replace('_'DIRECTORY_SEPARATOR$class) . '.php';
}

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

Я сейчас использую сочетание 2-3-4, т.к. это довольно просто реализуется и не требует особой поддержки (require_once из ZF вырезаются тулзой один раз). Хотя когда-нибудь, возможно, вернусь к пункту 1.
« Последнее редактирование: Август 09, 2008, 01:26:10 от Keel »

Оффлайн IgorN

  • Team
  • Герой
  • ***
  • Сообщений: 2908
  • Карма: 90
    • Мой сайт
На данній момент склоняюсь к варианту использования одного файла. У меня вібор не велик. Счас страница сайта локально грузится за 0.5 сек мне надо довести до 0.1-0.2 если доведу будем писать крупный проект (1-2 года) с использованием зф, если не доведу то будем все делать и писать руками. Я нехочу превращать следующие 2 года в кошмар, поэтому возьмусь за любой вариант.
Выше писали, что многие пробовали сливать всё в один класс, хотелось бы увидеть реализации.
Заранее благодарен.
Мой сайт: http://igor-negrutsa.info/
Я знаю только то,что ничего не знаю, а многие не знают даже этого.

Оффлайн IgorN

  • Team
  • Герой
  • ***
  • Сообщений: 2908
  • Карма: 90
    • Мой сайт
Раз форум заработал, надеюсь теперь мне помогут :-)
Попытался прикрутить скрипт который нашел на форуме dklab но он слишком сырой. Нашел еще один скрипт на хабре написанный под зенд. Но он тоже нормально не заработал ( в нем есть баги ). Помучавшись написал свой скрипт, но он тоже корявенький и приходится потом еще ручками править.
Хотелось бы увидить реализацию Zh0rzh.
Мой сайт: http://igor-negrutsa.info/
Я знаю только то,что ничего не знаю, а многие не знают даже этого.

Оффлайн lcf

  • Модератор
  • Герой
  • *****
  • Сообщений: 2468
  • Карма: 152
    • Homepage
На данній момент склоняюсь к варианту использования одного файла. У меня вібор не велик. Счас страница сайта локально грузится за 0.5 сек мне надо довести до 0.1-0.2 если доведу будем писать крупный проект (1-2 года) с использованием зф, если не доведу то будем все делать и писать руками. Я нехочу превращать следующие 2 года в кошмар, поэтому возьмусь за любой вариант.
Выше писали, что многие пробовали сливать всё в один класс, хотелось бы увидеть реализации.
Заранее благодарен.
А где и кому ты все это показываешь? На каком железе?

UPD: а, вижу, локально. Ну, может быть это и не самая удачная идея демонстрировать такие вещи на обычной тачке. Почему спрашиваю - вот у меня например (щас замерил) главная страничка (как ты и сказал - без особо сложных форм и запросов, достаточно простая, но при этом использующая все основные компоненты ЗФ) с homepage (http://lcf.name) грузится от 0.103... до 0.109... секунд. И это оч дешевый обычнейший хостинг.
« Последнее редактирование: Август 12, 2008, 17:49:17 от lcf »

Оффлайн IgorN

  • Team
  • Герой
  • ***
  • Сообщений: 2908
  • Карма: 90
    • Мой сайт
Показываю техническому директору. Железо: винда, двухядерный проц, 2 Гб оперативы
Мой сайт: http://igor-negrutsa.info/
Я знаю только то,что ничего не знаю, а многие не знают даже этого.

Оффлайн lcf

  • Модератор
  • Герой
  • *****
  • Сообщений: 2468
  • Карма: 152
    • Homepage
Показываю техническому директору. Железо: винда, двухядерный проц, 2 Гб оперативы
Я обновил пост сверху, прочитай UPD. Дома приду померяю этот же сайт локально сколько жрет времени, хотя и так помню что дольше гораздо чем на хостинге.
Может закинешь куда нибудь где помощнее тачка и покажешь своему директору от туда?

Оффлайн lcf

  • Модератор
  • Герой
  • *****
  • Сообщений: 2468
  • Карма: 152
    • Homepage
"Железное" решение проблем с производительностью - совершенно нормальный вариант в нашем случае.

Оффлайн san

  • Администратор
  • Герой
  • *****
  • Сообщений: 2156
  • Карма: 95
  • zf infected
    • Развитие личности от Александра Махомета
"Железное" решение проблем с производительностью - совершенно нормальный вариант в нашем случае.

Запускать вообще лучше не на винде а на никсах, там все работает значительно быстрее.
я вообще отметил что довольно ограниченные ресурсы хостеров в сочитании с их настроенным апачем на никсах и акселераторами дают значительно большую скорость чем мой довольно мощный хоум пк.

Оффлайн lcf

  • Модератор
  • Герой
  • *****
  • Сообщений: 2468
  • Карма: 152
    • Homepage
Re: Производительность и еще раз производит&#
« Ответ #10 : Август 12, 2008, 18:43:08 »
"Железное" решение проблем с производительностью - совершенно нормальный вариант в нашем случае.

Запускать вообще лучше не на винде а на никсах, там все работает значительно быстрее.
я вообще отметил что довольно ограниченные ресурсы хостеров в сочитании с их настроенным апачем на никсах и акселераторами дают значительно большую скорость чем мой довольно мощный хоум пк.
Хоум ПК - это совсем другая вещь. Практически любой "сервер", пусть он даже будет подешевле чем твой хоум пк, будет быстрее работать, потому что у него в идеале специфическое железо, специфическая файловая система, специфическое ПО. Можно конечно попробовать дома реализовать последние два пункта, но все равно многое упирается в железо. У меня дома никсы, около года работал в них, пока не понял что это такое же дерьмо как и винда, только эм... пахнет по другому)) (в смысле дело то я имею с линукс уже очень давно, просто в качестве домашнего инструмента работы, без винды использовал где-то год). Я бы не сказал что там все прямо летает) Если в винде не ставить "денвер", а самому все поставить, настроить окружение - будет тоже нормально работать (учитывая лимит железа)
Хотя вариант поставить какую нибудь сетевую ОС и показать на ней работу сайта, чисто для технического директора - может и сгодится, если нет возможности демонстрации по сети на нормальном сервере.

Оффлайн san

  • Администратор
  • Герой
  • *****
  • Сообщений: 2156
  • Карма: 95
  • zf infected
    • Развитие личности от Александра Махомета
Re: Производительность и еще раз производит&#
« Ответ #11 : Август 12, 2008, 19:10:46 »
...в идеале...

отож :)

короче говооря igorN, попробуй запустить на всех вариантах что сможешь, а потом показывай на том какой самый быстрый :)

Оффлайн IgorN

  • Team
  • Герой
  • ***
  • Сообщений: 2908
  • Карма: 90
    • Мой сайт
Показываю техническому директору. Железо: винда, двухядерный проц, 2 Гб оперативы
Я обновил пост сверху, прочитай UPD. Дома приду померяю этот же сайт локально сколько жрет времени, хотя и так помню что дольше гораздо чем на хостинге.
Может закинешь куда нибудь где помощнее тачка и покажешь своему директору от туда?

На серваке довольно медлено, до установки акселератора в среднем 2 сек, с акселератором 1.7 сек, когда склеил зенд в один файл то 1 сек. Это при том, что доп еще всеравно инклудится 20-30 файлов (а так для главной шел инклуд в 130 файлов когда небыло склеивания). Тестил потом локально xdebug выдает загрузку в 0.120 мил/сек, впринципе нормально. Но костыль конкретный.
Мой сайт: http://igor-negrutsa.info/
Я знаю только то,что ничего не знаю, а многие не знают даже этого.

Оффлайн lcf

  • Модератор
  • Герой
  • *****
  • Сообщений: 2468
  • Карма: 152
    • Homepage
Показываю техническому директору. Железо: винда, двухядерный проц, 2 Гб оперативы
Я обновил пост сверху, прочитай UPD. Дома приду померяю этот же сайт локально сколько жрет времени, хотя и так помню что дольше гораздо чем на хостинге.
Может закинешь куда нибудь где помощнее тачка и покажешь своему директору от туда?

На серваке довольно медлено, до установки акселератора в среднем 2 сек, с акселератором 1.7 сек, когда склеил зенд в один файл то 1 сек. Это при том, что доп еще всеравно инклудится 20-30 файлов (а так для главной шел инклуд в 130 файлов когда небыло склеивания). Тестил потом локально xdebug выдает загрузку в 0.120 мил/сек, впринципе нормально. Но костыль конкретный.
Ну чё-то это как-то странно. Либо в коде что-то, либо всё же попробуй где-нибудь ещё в другом месте погонять.

Оффлайн san

  • Администратор
  • Герой
  • *****
  • Сообщений: 2156
  • Карма: 95
  • zf infected
    • Развитие личности от Александра Махомета