Американский лось действительно, это замедляется?

Я недавно загрузил Американского лося. Экспериментально, я переписал существующий модуль у Американского лося. Это, кажется, удобный способ постараться не писать много повторяющегося кода. Я запустил тесты модуля, и я заметил, что он был немного отложен. Я представил код с-d:DProf, и кажется что только включая строку

no Moose;

в коде увеличивает время выполнения приблизительно на 0,25 секунды (на моем компьютере). Действительно ли это типично? Я делаю что-то не так, я misinstall это, или мы должны действительно ожидать это много задержки?

11
задан 22 February 2011 в 02:32
поделиться

3 ответа

Да, использование Moose сопряжено с некоторыми неудобствами. Однако это штраф только при запуске, а не во время выполнения; если вы все написали правильно, то во время выполнения все будет работать довольно быстро.

Вы также включили эту строку:

__PACKAGE__->meta->make_immutable;

во все ваши классы, когда вы не использовали Moose;? Вызов этого метода сделает его (время выполнения) быстрее (за счет времени запуска). В частности, построение и уничтожение объектов эффективно "встраиваются" в ваш класс и больше не вызывают мета API. Настоятельно рекомендуется делать ваши классы неизменяемыми. Это сделает ваш код намного быстрее при небольших затратах времени на компиляцию. Это будет особенно заметно при создании большого количества объектов. 1 2

Однако иногда эти затраты все же слишком велики. Если вы используете Moose внутри скрипта или каким-то другим способом, где время компиляции составляет значительную часть общего времени использования, попробуйте сделать s/Moose/Moo/g - если вы не используете модули MooseX, вы можете перейти на Moo, цель которого - быть быстрее (при запуске), сохраняя 90% гибкости Moose.

Поскольку вы работаете с веб-приложением, не рассматривали ли вы возможность использования Plack/PSGI?

1Из документации по make_immutable, в Moose::Cookbook::Basics::Recipe7
2См. также статью Стевана Литтла: Почему make_immutable рекомендуется для классов Moose

20
ответ дан 3 December 2019 в 01:38
поделиться

См. Moose::Cookbook::FAQ:

Я слышал, что Moose работает медленно, это правда?

Опять же, этот вопрос непростой, так что да и нет.

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

В настоящее время мы предоставляем возможность сделать ваши классы неизменяемыми как средство повышения скорости. Это означает несколько большие затраты времени на компиляцию, но увеличение скорости выполнения (особенно при конструировании объектов) довольно значительное. Это можно сделать с помощью следующего кода:

MyClass->meta->make_immutable();

Мы регулярно переводим горячие точки Class::MOP на XS. Флориан Рагвиц и Юваль Когман в настоящее время работают над способом компиляции ваших аксессоров и экземпляров непосредственно в C, чтобы все могли наслаждаться молниеносной скоростью ОО.

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

Использование Moose и Dancer для этого проекта дало дополнительное преимущество: мое небольшое демонстрационное приложение сократилось с примерно 5 000 строк до менее чем 1 000 строк.

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

12
ответ дан 3 December 2019 в 01:38
поделиться

Ваш вопрос немного обманчив. Да, Moose имеет измеримую стоимость запуска, но не медлит после этого. Если стоимость запуска непомерно высока, вы всегда можете демонизировать свое приложение.

6
ответ дан 3 December 2019 в 01:38
поделиться
Другие вопросы по тегам:

Похожие вопросы: