1. Introduction to Node.js
1. Introduction to Node.js
1. What is Node.js?
- Node.js is an open-source, cross-platform runtime environment for executing JavaScript code outside of a web browser
 - It’s built on Chrome’s V8 JavaScript engine, which compiles JavaScript directly to machine code for fast execution
- In order to execute Javascript a web browser has (what we call) a Javascript engine
 - This engine compiles or interprets the Javascript code on the page, and then executes it appropriately in the browser
 
 - Node.js was the first big push to allow Javascript to be ran outside the browser
 - Node.js is a runtime for Javascript, not a Javascript framework
- This means Node.js is just an environment that can execute Javascript
 - It doesn’t natively provide any form of structure for building a specific application
 - Instead frameworks like Express.js were created to make it easier to build a web backend with Node.js
 
 
Fun Fact: Other JavaScript Runtimes Exist! 🚀
Node.js is the most popular JavaScript runtime, but there are others too!
Deno:
- Created by Ryan Dahl, the original author of Node.js, as a “do-over” to fix design issues in Node.
 - Built with security first (e.g., no access to the file system or network by default).
 - Natively supports TypeScript out of the box, no additional setup needed.
 
Bun:
- A newer, high-performance runtime designed to be fast (think supercharged Node.js).
 - Aims to be an all-in-one tool for developers, so it includes many common tools, reducing the need for multiple tools during development
 
2. Key Features of Node.js
Asynchronous and Event-driven:
- Node.js has built in, simple support for asynchronous programming
 - Meaning operations like reading files, querying databases, and making API calls could be done simultaneously, instead of sequentially
 - Due it’s non-blocking nature, Node.js is extremely efficient for I/O intensive tasks
 - This means it can handle thousands of I/O based requests concurrently
 
Single-threaded with Event Loop:
- Node.js operates on a single thread but uses an event loop to manage concurrent requests
- This means it can do multiple things “at once” but not in the way you would usually expect with a multi-threaded program
 
 - It delegates heavy operations (like database queries) to background processes where they can continue to be executed in the background
 - Then, while those run, the rest of the code can continue
 
- Node.js operates on a single thread but uses an event loop to manage concurrent requests
 NPM (Node Package Manager):
- Node.js comes with npm, the default package manager for Node.js
- A package manager is a tool that helps a developer manage their external libraries (known as packages)
 
 - Node.js, through npm has a huge ecosystem of packages just waiting for use
 npmmakes it extremely easy to create new packages or add existing ones to your project- Using these premade packages can help you get your project off the ground quickly
 
- Node.js comes with npm, the default package manager for Node.js
 
3. Why Node.js?
- There are tons of options when working with web development, you can create a web backend in almost every language (PHP, Ruby and Java used to be common). So why use Node.js?
 - Speed and Efficiency
- Node.js runs on the “Chrome V8” engine, which compiles Javascript to machine code for fast execution
 - Asynchoronous I/O makes it able to handle high volumes of I/O heavy tasks (like database work or network requests) at once
 
 - Lots of support
- As silly as it is, Node.js is popular in part because everyone else is using it too
 - With a large community, there are already lots of resources out there to help you learn and solve problems
 npmprovides easy access to a huge volume of packages, which means the barrier to get up and running is even lower
 - Same language on the front and backend
- Using the same language everywhere means developers don’t have to spend the time learning and becoming comfortable with multiple languages
 - Reduces the cognitive load for developers when switching from the front to the backend
 - This increases development speed while (often times) lowering costs