Пересмотрено и отредактировано через годы:)
Вот EJS :: Template .
Он делает именно то, что вы просили - компилирует шаблоны в JS и использует V8
(или даже JE
) механизмы для оценки. К сожалению, нет поддержки Javascript :: Duktape (пока).
Кроме того, здесь приведен фрагмент использования Jemplate
(на стороне сервера) из ответа great @ ysth с движком Duktape.
use strict;
use warnings;
use Jemplate;
use JavaScript::Duktape;
# can omit these steps - see bellow
# Get the lite runtime js-source without the unnecessary AJAX (we are server side)
my $jemp_runtime = Jemplate::runtime_source_code('lite');
# The Template::Toolkit template
my $template = q{
[%- FOREACH pope IN perlmonks -%]
pope: [% pope.name %] = [% pope.experience %]
[% END -%]
};
# compile the Template source using Jemplate and name it
my $jemp_template = Jemplate->compile_template_content($template, 'monkstemplate');
# the data
my $data = {
'perlmonks' => [
{ 'name' => 'vroom', 'experience' => '1007479', },
{ 'name' => 'BrowserUk','experience' => '167247', },
{ 'name' => 'Corion', 'experience' => '133975', },
{ 'name' => 'ikegami', 'experience' => '128977', }
]
};
# init
my $js = JavaScript::Duktape->new();
$js->set( 'write' => sub { print $_[0]; } );
$js->eval($jemp_runtime); # eval the runtime code
$js->eval($jemp_template); # the Template code compiled into JS
$js->set("monkdata", $data);# bind the data
# finally eval the template processing code
$js->eval(q!
write(
Jemplate.process('monkstemplate', monkdata)
);
!);
производит
pope: vroom = 1007479
pope: BrowserUk = 167247
pope: Corion = 133975
pope: ikegami = 128977
Вы можете опустить все вызовы Jemplate, предварительно скомпилировав шаблоны с помощью команды jemplate
, например:
jemplate --runtime=lite --compile /path/to/templates > jemplate_source.js
И просто загрузите jemplate_source.js
и проверьте его в движке JS.
Только для заметки: на моем noteboook, используя оригинальный TemplateToolkit , я получил 10k / sec. Вышеуказанный Jemplate / Duktape только 5k / sec.
Мой оригинальный ответ:
Вот Shotenjin , полученный из системы шаблонов Tenjin. (Perl Tenjin здесь .
Shotenjin основан на joose, поэтому с некоторыми плюсами можно будет использовать Shotenjin из Perl с Javascript :: V8. Но это не совсем то, что вы ищете.
РЕДАКТИРОВАТЬ: То, что вы ищете, уже сделано - к сожалению, для рубина. https://github.com/elado/isotope
EDIT2: только что обнаружен: вот Template :: JavaScript что такое TT, скомпилированный в JS и выполненный на стороне сервера v8 ...