4 ms·
Node has always supported native addons, and since 2017 it also provides a stable ABI making the process a whole lot easier[1]. That said, in my own experience
by maga 5y ago
Node has always supported native addons, and since 2017 it also provides a stable ABI making the process a whole lot easier[1].
That said, in my own experience it was seldom worth it to rewrite something in C++ for performance sake. After rewriting some computationally heavy part as a native addon, I often ended up gaing only ~20% more perfomance at best when compared to properly optimized JS implementation, and even that was not guaranteed since V8 improved rapidly. That was not a good enough reason to keep a whole different tool chain around, so I'd end up going back to JS.
[1] https://medium.com/netscape/javascript-c-modern-ways-to-use-c-in-javascript-projects-a19003c5a9ff https://medium.com/netscape/javascript-c-modern-ways-to-use-...
- gargarplex 5y agoI have written a native C++ module to speed up JSON parsing and manipulation by a factor of 10x+
- whatever_dude 5y agoSell it to Rockstar. Their native C++ JSON parsing seems to be 10x slower than JS/Node.
- brundolf 5y agoWhat about with wasm? I assume there's a good interop story there like there is in the browser, and you don't have to worry about building for different platforms
- maga 5y agoWASM has its moments, as you can see in this[1] benchmark it outperforms JS and native addons on certain tasks. Since the bottleneck with native addons is usually data copying/marshalling, and we have direct access to WebAssembly memory from the JavaScript side, using WebAssembly on this "shared" memory might become the best approach for computationally heavy tasks. I wrote about it a bit here[2]. [1] https://github.com/zandaqo/iswasmfast https://github.com/zandaqo/iswasmfast [2] https://medium.com/swlh/structurae-1-0-graphs-strings-and-webassembly-25dd964d5a70#9257 https://medium.com/swlh/structurae-1-0-graphs-strings-and-we...
- dindresto 5y agoYup wasm is the way to go as you can just distribute the wasm binary over npm and don't have to worry about further compile steps on the consumer side, but it's not always possible to use wasm.