Производительность снижается при использовании MooseX :: Declare в основном при запуске? - PullRequest
5 голосов
/ 30 марта 2010

Удар производительности с использованием MooseX :: Declare, в основном, встречается, когда он выполняет свою первоначальную магию (то есть "переводит" определение в стандартный синтаксис Perl)? то есть, когда компиляция и начальная установка во время выполнения завершены, есть ли разница в производительности при вызове метода MooseX :: Declare по сравнению с методом, определенным с помощью традиционного объявления?

Ответы [ 2 ]

8 голосов
/ 30 марта 2010

Ответ - да и нет. Поскольку MooseX :: Declare использует MooseX :: Method :: Signatures для распаковки и проверки параметров, это приводит к накладным расходам времени выполнения по сравнению с отсутствием проверки параметров вообще.

Но , если ваша идея «традиционного объявления» включает проверку количества и типа ваших параметров (и это следует делать, если вам нужен надежный код), то нет причин полагать, что проверка MXD / MXMS делает будет медленнее, чем проверка, которую вы сделаете сами.

2 голосов
/ 31 марта 2010

MooseX :: Declare - это преобразование декларативного синтаксиса во время компиляции в «истинный» код Perl. Все его служебные данные находятся во время компиляции.

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

Так что с точки зрения времени выполнения, это выигрыш / выигрыш. Вы платите только за те функции, которые используете. Проверка типов - это то, что вам все равно придется делать вручную, и принуждение, хотя оно определенно влияет на производительность, включено для каждого аргумента.

...