Google V8 JavaScript Runtime Engine + TypeScript: Improvements on Node.js Server

The Node.js web server standard was introduced in 2009 by Ryan Dahl and has subsequently become a major aspect of contemporary JavaScript development platforms. Apache web servers function on the basis of threaded processes, whereas Node.js servers operate with event loops. With many simultaneous users, threaded concurrency becomes “leaky” on Apache, while Node.js servers use callbacks to eliminate wait times for extremely fast concurrency rates. JavaScript operates by design on the basis of event loops which Dahl transcribed into a server-side runtime environment to build a web server with a non-blocking I/O request processing structure. This allows Node.js application programmers to script highly concurrent programs on the same hardware that stream data at faster rates while also supporting TCP, DNS, & HTTP without Apache. The use of chunked requests/responses, keep-alive functions, and familiar APIs that operate in a platform independent manner has led to the success of Node.js as a web server standard, although it also includes a Python dependency. Nearly 10 years later, Dahl has deconstructed the mistakes still present in Node.js to relaunch a new platform written in Rust/Go that works with TypeScript & the Google V8 runtime engine in a secure sandbox environment.

Deno 2018: Experimental, Developmental, & Limited to TypeScript Support

The first release of Deno in 2018 attracted a lot of positive attention in the JavaScript development community because it was invented by the original creator of Node.js. Dahl presented a seminar at the 2018 JavaScript convention JSConf.EU that was titled “10 Things I Regret About Node.js”. Dahl lamented that many of the structural issues he has found in the framework can no longer be changed because so many different JavaScript projects are based on the Node.js foundation as it currently is designed. From this dual realization, Dahl went on to code a beta release version of Deno.

“Using Node is kind of like nails-on-chalkboard for me. I see the bugs that I introduced that aren’t really bugs at this point they’re just how it works but they are bugs and there were design mistakes made that just cannot be corrected now because there’s so much software that uses it.”

Dahl reportedly spent 2017 as a member of the Google Brain Residency Program working with TensorFlow and issues related to video reprocessing. In order to understand the change of perspective regarding the Node.js platform, it is recommended to compare the two videos:

Ryan Dahl: Original Node.js Presentation (2009)

  • “…V8: Google
  • libev: event loop library
  • libeio: thread pool library
  • http-parser: a ragel HTTP parser
  • evcom: stream socket library on top of libev
  • udns: non-blocking DNS resolver…”

Learn more about the design of the original Node.js web server.

10 Things I Regret About Node.js – Ryan Dahl – JSConf EU (2018)

  • “Supports TypeScript out of the box.
  • Uses a recent version of V8.
  • No package.json.
  • No npm.
  • Not explicitly compatible with Node.
  • Imports reference source code URLs only.
  • File system and network access can be controlled in order to run sandboxed code.
  • Single executable.”

Learn More About Deno: A secure TypeScript runtime built on V8.

Problems in Node.js: Web Security, Modules, Index.js, & the Build Process

In introducing Deno at the JSConf.EU event, Dahl stated the discovery that “server-side JavaScript required an event loop to succeed” was the biggest part of Node.js being adopted widely in IT practice. Dahl left the Node.js project in 2012 after the protocols for HTTP & SSL support had been established. At that time, Node.js had a small core, Windows Server support, and a stable system of APIs, as well as a growing ecosystem of external modules via NPM. Over the last 6 months, Dahl restarted coding on the platform with different goals.

In terms of regrets about the Node.js web server project, Dahl stated:

  • regret: no use of promises for asynch/await
  • regret: web security, write permissions, & file access
  • regret: the Build System (GYP/GN/Python)
    —> better would have been a Foreign Function Interface (FFI)
  • regret: JSON & NPM central repository dependencies
  • regret: node_modules too heavy & often required without the extension
  • regret: Index.js complicates the module loading system & overly “cute”

Overall, Dahl admitted that he still likes Node.js, the I/O structure, & programming on the platform, but built Deno runtime environment to address these regrets with a new product.

Install Deno using Bash:

alias file_server="deno --allow-net"

Upgrade to the latest published version of Deno:

file_server --reload

Learn More About the Deno Web Server Runtime Environment for TypeScript.

Deno: Major Product Watch for Node.js, JavaScript, & TypeScript Support

Deno utilizes JavaScript as a secure sandbox and allows users to opt into a secure network at runtime. It does not allow arbitrary native functions to be bound into V8. Instead all system calls are made by message passing. Deno does not currently support compatibility with other Node.js modules, focusing instead solely on TypeScript support. All imported files must require a file extension & use V8 snapshots for faster start-up times in compiling. Dahl is currently programming Deno in C++, Go, & Rust. Many of the advancements & changes introduced by Deno have a good possibility to be reincorporated into the Node.js project eventually. Deno is an important project to watch for the future of JavaScript, TypeScript, & Node.js development.

Node EventMachine::run(): “As an asynchronous event driven JavaScript runtime, Node is designed to build scalable network applications… This is in contrast to today’s more common concurrency model where OS threads are employed. Thread-based networking is relatively inefficient and very difficult to use. Furthermore, users of Node are free from worries of dead-locking the process, since there are no locks. Almost no function in Node directly performs I/O, so the process never blocks. Because nothing blocks, scalable systems are very reasonable to develop in Node… Node is similar in design to, and influenced by, systems like Ruby’s Event Machine or Python’s Twisted. Node takes the event model a bit further. It presents an event loop as a runtime construct instead of as a library.” Learn More About Node.js.

Source link