Скорость компиляции Perl + OOP (Несколько методов). Тупые тесты
Никто не делал, наверное, полноценное тестирование производительности всех или почти всех методов и подходов, реализующих объекты в перле. Никто не делал, и я не буду.
Вместо этого я понаделал тупые тесты при помощи команды time perl myscript.pl. Просто для того, чтобы кое-что прояснить для себя.
1. Чистый перл, атрибуты в массиве
Массивы в перле быстрые. Пробуем такой код:
Для проверки код почти всегда один и тот же:
Что показывает time:
real 0m0.029s
user 0m0.024s
sys 0m0.000s
2. Чистый перл, атрибуты в хеше
Хеши в перле медленные, медленнее, чем массивы, поэтому, возможно, если делать акцессоры на хеше, то будет медленнее. Пробуем:
Время выполнения:
real 0m0.033s
user 0m0.020s
sys 0m0.008s
В общем, по ощущениям, разницы нет, хотя, судя по замерам, таки массивы быстрее. Вероятнее всего, разница может существенно проявиться при более сложной архитектуре классов, но это еще предстоит протестировать.
3. Используем Mojo::Base
Mojo::Base — удивительно легковесная штука с очень простым, незамутненным синтаксисом, реализующая базовые возможности объектов. Давно хотел протестить, насколько велика цена синтаксического сахара Mojo::Base:
Код сократился, а время выполнения? Смотрим:
real 0m0.032s
user 0m0.024s
sys 0m0.000s
Вообще, в среднем, такой код получается сравним по скорости с предыдущим, или, если все же придираться, то чууууть-чуть медленнее. Но есть Mojo::Base::XS, который, возможно, решит такую проблему. Неожиданно приятно.
4. Используем Class::Struct
Class::Struct очень старый, но, тем не менее, очень известный модуль, к которому приложились довольно известные, именитые перл-программисты. Поэтому его было тоже интересно.
В итоге:
real 0m0.050s
user 0m0.012s
sys 0m0.016s
В целом медленнее, причем заметно.
5. Используем Moose
Moose в моем списке играет роль пугала, не более того. Всерьез я его рассматривать бы не стал: ни по синтаксису, ни по производительности он мне лично не подходит.
Шок:
real 0m0.419s
user 0m0.320s
sys 0m0.032s
В заключение еще раз повторю, что тесты тупые, о производительности тех или иных решений можно судить относительно. Mojo::Base интересен и, на мой взгляд, нуждается в более взрослых сравнительных тестах. Но это в будущем.