Загрузка и компиляция шаблона в ratpack: блокировка или нет?
Я добавляю поддержку шаблонов Pebble в мое приложение ratpack, и меня беспокоит один вопрос: должен ли мой RendererSupport
экземпляр использовать ratpack's Blocking.get()
или нет? Поскольку PebbleEngine имеет свой собственный кэш, я не могу сказать, будет ли он загружать исходный код шаблона с диска, поэтому это (возможно) операция ввода-вывода. Глядя на реализацию шаблонов руля, я не вижу особого удовольствия от операции ввода-вывода.
Итак, мой вопрос: это правило большого пальца использовать Blocking
для всех операций, связанных с вводом-выводом (например, файловая система или доступ к базе данных), или есть более сложное правило?
1 ответ
Если кэш Pebble неопределен (например, Handlebars), я бы сказал, что вы можете сделать то же самое, что делает интеграция Ratpack для Handlebars - зависит от кеша и запустить код, который потенциально может загрузить шаблон с диска в вычислительном потоке. Вы будете платить штраф за производительность каждый раз, когда шаблон загружается в первый раз (потому что вы будете запускать блокирующий код в вычислительном потоке), но он уйдет, когда увеличится объем кеша.
Обратите внимание, что в трекере есть проблема, которая направлена на устранение этого снижения производительности для интеграции Handlebars путем предварительной компиляции шаблонов и, таким образом, заполнения кеша при запуске.