tobleron

tobleron

How is Erlang/OTP Runtime compared to ChromeV8/NodeJS?

If any of you knows a resource (website, docs, articles) where I can access to see a comparison of how both of these ecosystems works, it would be great.

Delving into NodeJS a bit, I feel like there is a lot of similarities:

  1. npm ↔ hex
  2. Chrome V8 (Javascript → C++ → machine code) ↔ Erlang Runtime (Elixir → Erlang → machine code)
  3. As far as my research can tell both ecosystems can run asynchronous code but would love to read more resources about this topic if exists.
  4. NodeJS speed depends on asynchronous processing whereas Erlang depends on ultra lightweight synchronous processing (optionally asynchronous).

One thing I am trying to get my head around is a missing layer. NodeJS is not a framework, but isn’t it doing a lot of the work that a phoenix web server is doing, or is it more fair to compare Elixir with NodeJS and Phoenix with ExpressJS?

The purpose of the comparison is not to see what is superior as obviously the use cases may be different, but it’s more like to understand where they are similar and where they are different. I am just brainstorming with you!

Most Liked

mythicalprogrammer

mythicalprogrammer

Chrome V8 doesn’t goes from javascript to C++ to machine code. It compiles directly to machine code according to the wikipedia.

As far as my research can tell both ecosystems can run asynchronous code but would love to read more resources about this topic if exists.

NodeJS runs on one giant event loop last time I check. I believe there is a threading library API over yonder. So the programmers themselves are doing to “thread logic” when they do async stuff and catching all those error and weird logic cases.

Erlang you can just create bunch of Erlang’s processes. The whole concurrency concept is built into the language unlike Javascript so it’s pretty nice to write logic in Erlang/Elixir. The actor model that Erlang/Elixir uses is imo easier to reason with and easier to mentally model than NodeJS async style. But then again you’re asking in an Elixir forum…

One thing I am trying to get my head around is a missing layer. NodeJS is not a framework, but isn’t it doing a lot of the work that a phoenix web server is doing, or is it more fair to compare Elixir with NodeJS and Phoenix with ExpressJS?

NodeJS is just this technology that enable programmer to do javascript backend using V8. It also push for this async style concurrency paradigm.

You can compare Javascript to Elixir (they’re both languages).

Phoenix to ExpressJS (web framework).

NodeJS’s concurrency model (Async) to Elixir/Erlang’s concurrency model (Actor Model).

V8 vs BEAM VM I guess.

You can read about Erlang/Elixir’s VM here: Distributed Systems Chair

It’s a paper what makes Erlang’s VM unique and why it’s suited for concurrency.


For an overview of Erlang’s/Elixir’s Concurrency model try this:

hauleth

hauleth

As it was said earlier V8 do not translate JS to C++ but rather uses its’ own internal representation that then is converted to the machine code. This is called JIT.

This isn’t true either, at least not in general case. IIRC Erlang do not have JIT compiler right now (but there is work in progress to allow that) and it always interpreted intermediate language which is low-level description of instructions, something like WASM. However there is HiPE compiler that is ahead-of-time compiler of Erlang code to native code which enables performance boost but with cost (barrier between HiPE and non-HiPE code is slow and it disables few Erlang features).

Node/V8 cannot process data in parallel within single VM instance, BEAM does that natively. It is worth remembering that Node/V8 is single-threaded environment that runs big event loop (kqueue/epool/etc.).

Yes, in Node everything depends how few cycles you spend in the JS and instead you will allow everything to spend in wait. BEAM in that manner do not care that much as it allows you to run things in parallel when possible.


Comparison to be fair should be made between:

  • V8/NodeJS vs BEAM as an virtual machine - and to make it even more fair it should be Nx NodeJS + IPC (where N is the amount of CPU cores available) vs BEAM, or NodeJS vs BEAM with 1 scheduler enabled.
  • Elixir vs JavaScript/NodeJS - as a language and a “standard library”
  • Phoenix vs ExpressJS/whatever other web framework there is
tobleron

tobleron

Wow, this topic seems more complex than I thought, but I am thankful for all your detailed responses!

Where Next?

Trending in Questions Top

lanycrost
Hi everyone! I need implement if…else if…else condition from my elixir code, and anymore of this control flow structures not work proper...
New
senggen
Erlang/OTP 25 [erts-13.2.2] [source] [64-bit] [smp:8:8] [ds:8:8:10] [async-threads:1] 15:22:35.803 [error] gen_event {lager_file_backend...
New
hariharasudhan94
Lets say I have map like this fetching from my database %{"_id" => #BSON.ObjectId<58eb1a7a9ad169198c3dXXXX>, "email" => ...
New
tj0
I’ve been following the steps here for the upgrade from 1.6 to 1.7 and it has gone relatively smoothly all the way till the phoenix_view ...
New
cgraham
Hi! What is currently the best library/method for parsing text and tabular data out of PDF files in Elixir or Erlang?
New
stefanchrobot
Hi, I need a way to handle data migrations in my application. I found an article by @wojtekmach about manual migrations: Automatic and ma...
New
stjefim
Hello! Suppose you are building workflow (order / task / payment) processing system with the following requirements: Each workflow con...
New

Other Trending Topics Top

GenericJam
Edit: 2026 May 15 - This post is archived. Mob is alive!! Main docs: mob v0.7.11 — Documentation A bit of explanation for the slightly c...
New
JesseHerrick
Hey, I’m Jesse and I’m the main contributor behind Dexter, a full-featured, lightning-fast Elixir LSP optimized for large codebases. It s...
New
kip
Localize is the next generation localisation library for Elixir. Think of it as ex_cldr version 3.0. The first version will be released ...
New
webofbits
Squid Mesh is an open source workflow automation runtime for Elixir applications. It is aimed at Phoenix and OTP apps that want to defin...
New
jimsynz
Beam Bots (or just BB for short) is a framework for building fault-tolerant robotics applications in Elixir using familiar OTP patterns. ...
New
kip
In 2021 I started a new library called Tempo with the objective of modelling time as a set of intervals - not as instants. In 2022 I gave...
New

We're in Beta

About us Mission Statement