V8 engine for Elixir with pools
V8 engine for Elixir with pools.
Application start:
ElixirV8.start
or add it in application
section in mix:
def application do
[mod: {Example, []},
applications: [ :elixir_v8 ] ]
end
ElixirV8.create_pool(:default, 10)
Where :default
is name of pool and 10
is size of pool.
Also you can configure ElixirV8 directly from configuration file to get pools automatically created at application startup. In config/config.exs
, add :
config :elixir_v8, pools: [
test_pool: [{:size, 10}],
test_pool_2: [{:size, 20}]
]
You also can load js libs to each v8 engine in pool:
js_undescore_lib = Mix.Project.app_path <> "/priv/underscore-min.js"
ElixirV8.create_pool(:main, 10, [{:file, js_undescore_lib}])
Using config in mix:
js_undescore_lib = Mix.Project.app_path <> "/priv/underscore-min.js"
js_other_lib = Mix.Project.app_path <> "/priv/some-another-lib.js"
config :elixir_v8,
pools: [
main: [
{:size, 10},
{:max_overflow, 10},
{:file, js_undescore_lib},
{:file, js_other_lib}
]
]
ElixirV8.delete_pool(:default)
ElixirV8.delete_pool(:test)
Usage of pools (eval
js code):
iex(2)> ElixirV8.eval({:global, :main}, "1+2")
{:ok, 3}
iex(3)> ElixirV8.eval({:global, :main}, "1+2+3")
{:ok, 6}
Method eval_function
is execute function body with some arguments:
iex(4)> ElixirV8.eval_function({:global, :main}, "return data + 13", [13])
{:ok, 26}
iex(6)> ElixirV8.eval_function({:global, :main}, "return data * 13", [20])
{:ok, 260}
iex(8)> ElixirV8.eval_function({:global, :main}, "return arguments[0] * arguments[1]", [20, 5])
{:ok, 100}
git checkout -b my-new-feature
)git commit -am 'Add some feature'
)git push origin my-new-feature
)