DEV Community

Cover image for JavaScript Runtimes: Introduction to JavaScript Runtimes
Shrinibas Mahanta
Shrinibas Mahanta

Posted on

JavaScript Runtimes: Introduction to JavaScript Runtimes

Introduction

Ever wondered why JavaScript, a language specifically built for manipulating UI elements, went on to become the most widely used language? It's not just for UI manipulation anymore; JavaScript is now widely used everywhere, from front-end to back-end development, to machine learning, and beyond. Over the course of this series, we will take a deep dive into runtimes, more specifically into some popular JavaScript runtimes, and explore how these tools have enabled JavaScript to operate beyond our browsers.

JavaScript: Origins and Backstory

In the mid-90's, the web was in its infancy. More and more websites were being hosted every day, and the web was growing at a tremendous rate due to the increasing availability of personal computing to the masses.

At that time, the web was primarily static, with no user interaction. Most people used web browsers like AOL, Yahoo, and Netscape Navigator to browse the web. Among these three browsers, Netscape was leading in both users and innovation. The team at Netscape realized that with the growing web, there was a need for two-way interaction.

To address this need, they hired Brendan Eich in April 1995 to create a new language. Eich, who had a background in Scheme and other programming languages, developed the first version of JavaScript in just ten days in May 1995 and then created the JavaScript engine for Netscape Navigator. This development marked the beginning of Web 2.0.

JavaScript Engine: Powering the Modern Web

A JavaScript engine is simply a computer program that interprets JavaScript code. The engine is responsible for executing the code. The first JavaScript engine was developed by Brendan Eich and it was a mere interpreter. Modern JavaScript engines have evolved significantly and now use techniques like JIT (just-in-time) compilation to achieve better performance. In JIT compilation, the entire code is converted into machine code at once and then executed immediately.

Every JavaScript engine contains two basic components: a call stack and a heap. The call stack is where our code gets executed, and the heap is the place in memory where all the objects we need in our application are stored.

Google's V8 engine was the first to introduce JIT compilation and was a game changer. Currently, it is the most widely used engine, being utilized in every Chromium-based web browser, applications built using the Electron framework, runtime systems like Node.js and Deno, and any other frameworks that embed Chromium.

Apart from V8, there are other notable JavaScript engines:

  • SpiderMonkey - Used in Firefox and its forks.
  • JavaScriptCore - Used in Safari Browser and the Bun runtime system.

JavaScript Runtime: What Exactly is a Runtime?

In a nutshell, a runtime is a system that allows us to compile code or execute it in real-time. A JavaScript runtime is essentially a wrapper that includes the JavaScript engine, a callback queue, and a set of APIs, providing an environment to execute our JavaScript code.

We understand that a JavaScript engine is crucial for executing code, but to make it useful, we need APIs. These APIs enable our code to interact with web pages, networks, databases, and file systems. For example, web browsers provide web APIs to handle browser events and interact with the DOM, while Node.js offers APIs for I/O operations.

Now that we've covered what a runtime is, let's examine two of the most widely used and highly regarded JavaScript runtime systems for running code on servers

  • Node.js:

    • Node.js is an open-source and cross-platform JavaScript runtime environment.
    • It runs the V8 JavaScript engine, the core of Google Chrome, outside of the browser. This allows Node.js to be very performant.
    • Node provides a set of asynchronous I/O primitives in its standard library that prevent JavaScript code from blocking.
  • Bun.sh:

    • Bun is an all-in-one JavaScript runtime and toolkit designed for speed, complete with a bundler, test runner, and Node.js-compatible package manager.
    • It extends JavaScriptCore, the performance-minded JS engine built for Safari. which makes it the fastest JavaScript runtime.
    • Bun provides a minimal set of highly optimized APIs for performing common tasks, like starting an HTTP server and writing files.

That's all for this part. In the next part, we'll dive deeper into Node.js origins and its core APIs for building powerful server-side applications. Stay tuned!

Top comments (1)

Collapse
 
sandhya_1cf540897e75bd253 profile image
Sandhya

👍👍