Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Форумы портала PHP.SU :: Версия для печати :: Быстродействие класса.
Форумы портала PHP.SU » PHP » Программирование на PHP » Быстродействие класса.

Страниц (2): [1] 2 »
 

1. Invert - 24 Ноября, 2010 - 13:18:12 - перейти к сообщению
Добрый день ув. пользователи.
Нужна ваша помощь в решении вопроса быстродействия класса.

Допустим есть объект:
PHP:
скопировать код в буфер обмена
  1.  
  2. class Object {
  3.  
  4.    public function SetA ( $prmA ) {
  5.       ... проверка и установка настроек объекта ...
  6.  
  7. }
  8.    public function SetB ( $prmB ) {
  9.       ... проверка и установка настроек объекта ...
  10.  
  11. }
  12.    public function SetC ( $prmC ) {
  13.       ... проверка и установка настроек объекта ...
  14. }
  15.  
  16. ...
  17.  
  18. }

PHP:
скопировать код в буфер обмена
  1.  
  2. $obj = new Object;
  3. // Установка параметров объекта
  4. // Классически задаются через отдельные методы, каждый параметр проверяется на правильность, параметры сохраняются во внутренних переменных объекта.
  5. $obj->SetA ( $prm_a );
  6. $obj->SetB ( $prm_b );
  7. $obj->SetC ( $prm_c );
  8. // Потом обрабатываем данные на основе заданных параметров
  9. $obj->SomeFunc ( $x );
  10. // Удаляем объект
  11. $obj->Free ();
  12.  


Сам скрипт обрабатывает некоторые файлы с винта, некоторые сжимает и кэширует в отдельную директорию. Сайт посещаемый, ожидаемое кол-во запросов к скрипту от 10 до 50 в секунду. Вопрос стоит в быстродействии скрипта.

Была мысль задавать все параметры внутри объекта константами, максимально уменьшив кол-во всяких проверок и методов. Пример ниже:
PHP:
скопировать код в буфер обмена
  1. class Object {
  2.    // Вместо методов установки и проверки парамеров задаем константы
  3.    const PRM_A = 'prm_a';
  4.    const PRM_A = 'prm_a';
  5.    const PRM_A = 'prm_a';
  6.  
  7. ...
  8.  
  9. }

PHP:
скопировать код в буфер обмена
  1.  
  2. $obj = new Object;
  3. // Установка параметров не требуется, все параметры жестко установлены внутри объекта
  4. $obj->SomeFunc ( $x );
  5. // Удаляем объект
  6. $obj->Free ();
  7.  

Как вы думаете, какова разница в скорости обработки этих вариантов? Стоит ли ухудшать качество класса ради увеличения скорости?
2. JustUserR - 24 Ноября, 2010 - 17:58:07 - перейти к сообщению
Invert Рассмотрение предполагаемых вами вариантов осуществления инициализации экземпляра класса с функциональной точки зрения - приводит к оценке большей эффективности метода с использованием констант поскольку он не включает в себя расчет идентификатора и значения переменных - однако использование констант в рамках языка PHP не является простой заменой целевых вхождений символов и требует некоторых вычислительных операци для осуществления подстановки значения
3. Invert - 24 Ноября, 2010 - 19:18:27 - перейти к сообщению
Спасибо, но хотелось бы больше конкретики. Думаю провести небольшое тестирование и показать сюда результат, если кому-то интересно.
4. JustUserR - 25 Ноября, 2010 - 21:54:32 - перейти к сообщению
Invert пишет:
Спасибо, но хотелось бы больше конкретики
Пожалуйста! Осуществление рассмотрения вопроса быстродействия в предоставленном вами примере PHP-приложения включающегшо в себя элемнты класса с инициализирующими констукрторами и константыми значениями - может не предоставлять требуемых результатов при причине использования вычсилительных ресурсов в многопоточной системе при оказания влияния множества сторонних факторов Кроме того реализация ООП-технологии в языке PHP осуществлена посредством использования механизмов пространтсв имен и ссылочных объектов - что означает обращение к парамтерам целевого объекта как неявному вызову функций контроля соответствующий информационных полей
5. OrmaJever - 25 Ноября, 2010 - 22:49:35 - перейти к сообщению
Invert пишет:
Думаю провести небольшое тестирование

это будет сложно зделать. Потому что скрипт не может всё время выполнятся одинаковое время. А даже в очень большом класе разница вовремени будет не значительная.
6. vasa_c - 26 Ноября, 2010 - 10:20:36 - перейти к сообщению
Как бывает в абсолютном большинстве подобных тем, вы мерите совсем не то, что нужно мерить.

Разница в выполнении конструкций языка будет совершенно ничтожна по сравнении с тем же "обрабатывает некоторые файлы с винта, некоторые сжимает и кэширует в отдельную директорию". Именно оптимизацией работы с файлами и стоит заниматься, если вообще оптимизация требуется.

Вы же пишете на PHP, а не на C, наверное выбрали его потому что он проще и удобней? Вот и в этом вопросе решайте, что удобнее, понятнее и более расширяемое.
7. JustUserR - 26 Ноября, 2010 - 14:34:16 - перейти к сообщению
vasa_c пишет:
Как бывает в абсолютном большинстве подобных тем, вы мерите совсем не то, что нужно мерить
Значение вопроса о быстродействии рассматриваемого PHP-приложения в общем случае может является достаточно существенным - в частности в случае осуществления обработки значительно числа пользовательских запросов с ресурсоемкими операциями С теоретической точки зрения в рассматриваемом PHP-приложении в качестве более эффективного варианта целесообразно рассматривать набор вложенный в класс константных полей - особенности в случае если их внутреннее представление в контексте является статическим
8. vasa_c - 26 Ноября, 2010 - 14:46:12 - перейти к сообщению
JustUserR, вопрос быстродействия рассматриваемого PHP-приложения, несомненно, очень существенен. Вот только это быстродействие (вернее абстрактное время выполнения конкретного сценария) складывается из множества составляющих. Но время выполнения базовых конструкций языка вносит в это совершенно ничтожный вклад, по сравнению с другими компонентами системы.

Цитата:
особенности в случае если их внутреннее представление в контексте является статическим

вот если константы лучше подходят под нужное представление и лучше соответствуют задаче, то вот поэтому их и следует использовать, а не потому что они "быстрее".
9. JustUserR - 26 Ноября, 2010 - 14:58:25 - перейти к сообщению
vasa_c пишет:
Вот если константы лучше подходят под нужное представление и лучше соответствуют задаче, то вот поэтому их и следует использовать, а не потому что они "быстрее
В общем случае реализация выбора требуемых информационных полей для хранения заданный записей в действительности обеспечивается удобством структуры для реализации текущей задачи - однако в рассматриваемом случае в силу внутренних особенностей реализации ООП-механизмов в PHP обеспечение функционирования статических констант являтеся в значительной мере более эффективным
10. vasa_c - 26 Ноября, 2010 - 15:02:36 - перейти к сообщению
Более эффективной по каким параметрам?
11. JustUserR - 26 Ноября, 2010 - 15:32:00 - перейти к сообщению
vasa_c пишет:
Более эффективной по каким параметрам?
В действительности реализации ООП-принципов в языке PHP осуществлена на основе использования именованных пространств имен с определение текущей таблицы объектов в операторе расширения области видимости и механизма ссылочных объектов - таким образом осуществление обращения к параметрам и методам экземпляров класса в действительности обеспечивает включение неявного вызова функции обработки которая может быть переопределена в форме __get/__set - в то время как реализация обращения к статическим полям является оригинальной операцией
12. vasa_c - 26 Ноября, 2010 - 15:44:16 - перейти к сообщению
Хорошо, так более эффективной по каким параметрам? По скорости?
13. JustUserR - 27 Ноября, 2010 - 12:38:08 - перейти к сообщению
vasa_c пишет:
Хорошо, так более эффективной по каким параметрам? По скорости?
Рассматриваемый вариант осуществления установки значений требуемых параметров в качесвте статических константных объектов в пространстве имен целевого класса - является более эффективным по критериям быстродействия и сложности структуры внутреннего представления PHP-приложения после осуществления выполнения фазы трансляции - поскольку обеспечению включения требуемые значений в виде статических констант не требует создание дополнительных неявных функций обработки
14. vasa_c - 27 Ноября, 2010 - 16:04:16 - перейти к сообщению
Лично по моему ИМХу эффективным является следующее - сервер перестал справляться с нагрузкой, мы заменили методы на константы и проблема устранилась.

Если же что-то потребляет 0,05% от общих ресурсов и мы меняем его на то, что потребляет 0,04%, это не эффективность и не оптимизация.
15. JustUserR - 27 Ноября, 2010 - 20:23:30 - перейти к сообщению
vasa_c пишет:
Если же что-то потребляет 0,05% от общих ресурсов и мы меняем его на то, что потребляет 0,04%, это не эффективность и не оптимизация
Обеспечение оптимизации и уменьшение количества потребляемых вычислительных ресурсов целевого приложения является важным критерием - дело в том что если фактическая замена предполагаемой операции предоставляет некоторый незначительный прирост - то осуществление множественного вызова функционального компонента позволяет достичь лучше эффекта - практическое рассмотрение указанного аспекта может быть осуществено при программировании NP-задач

 

Powered by ExBB FM 1.0 RC1