загрузка и компиляция шаблона в ratpack: блокировка или нет?

Я добавляю поддержку шаблона Pebble в свое приложение, и есть один вопрос, который меня беспокоит: должен ли мой экземпляр RendererSupport использовать экземпляр Blocking.get() ratpack или нет? Поскольку у PebbleEngine есть собственный кеш, я не могу сказать, будет ли он загружать исходный код шаблона с диска, так что это (возможно) операция ввода-вывода. Глядя на реализацию шаблонов рулей, я не вижу особого отношения к операции ввода-вывода.

Итак, мой вопрос: является ли эмпирическим правилом использование Blocking для всех операций, потенциально связанных с вводом-выводом (например, доступ к файловой системе или базе данных), или есть какое-то более сложное правило?


person leetwinski    schedule 21.10.2016    source источник


Ответы (1)


Если кеш Pebble неограничен (один из Handlebars), то я бы сказал, что вы можете сделать то же самое, что делает интеграция Ratpack для Handlebars - зависеть от кеша и запускать код, который потенциально может загрузить шаблон с диска в вычислительном потоке. Вы будете платить штраф за производительность каждый раз, когда шаблон загружается в первый раз (поскольку вы будете запускать блокирующий код в потоке вычислений), но он исчезнет по мере увеличения охвата вашего кэша.

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

person erdi    schedule 03.11.2016
comment
именно так я и думал, но не был уверен на 100%. Спасибо! - person leetwinski; 07.11.2016