Сравнение скорости - Процедурное по сравнению сOO в интерпретируемых языках

StackOverflow https://stackoverflow.com/questions/3057

Вопрос

Каковы последствия перехода от объектно-ориентированного подхода к процедурному для интерпретируемых языков программирования, таких как PHP и JavaScript?

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

Итог:насколько велико (если таковое имеется) снижение производительности на самом деле, при использовании OO противПроцедурный на интерпретируемом языке?

Это было полезно?

Решение

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

Вы попали в самую точку, когда сказали "ремонтопригодность".Я бы выбрал тот подход, который является наиболее продуктивным и ремонтопригодным.Если вам понадобится скорость позже, она не придет от переключения между парадигмами процедурного и объектно-ориентированного кодирования внутри интерпретируемого языка.

Другие советы

К сожалению, я тоже провел свои тесты.Я протестировал скорость, и она примерно такая же, но при тестировании использования памяти, получая memory_get_usage() в PHP, я увидел значительно большее число на стороне ООП.

116 576 байт для ООП и 18 856 байт для процедурных.Я знаю, что "Оборудование дешевое", но давай же!увеличение использования на 1000%?Извините, это не оптимально.А когда на ваш сайт заходит так много пользователей одновременно, я уверен, что ваша оперативная память просто сгорит или иссякнет.Я ошибаюсь?

Итог:нет, потому что накладные расходы на интерпретацию превышают накладные расходы на диспетчеризацию методов.

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

ООП требует гораздо большего выделения памяти (MALLOC) и гораздо большего количества операций для выполнения в памяти, чем процедурный код.Для выполнения своих задач ему требуется намного больше процессорного времени.По сути, это "накладные расходы", связанные с процедурным кодом, увеличивающие нагрузку на процессор для его выполнения, особенно при выполнении операций с базой данных.

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

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

Если вы используете интерпретируемый язык, разница не имеет значения.Вы не должны использовать интерпретируемый язык, если производительность является проблемой.Оба будут работать примерно одинаково.

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

Просто запомните первое правило оптимизации.

Не надо.

:)

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

Так что на самом деле это не имеет значения (по крайней мере, по моему опыту).

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top