美文网首页
Nodejs behind the scene

Nodejs behind the scene

作者: Time_Notes | 来源:发表于2024-04-19 00:40 被阅读0次

    JS has no capability of controlling network or file system (this language doesn't do that, for that you need c or c++)

    node gives you access to many modules

    const http = require("http")

    http "babel" holds the reference of capability of networking


    libuv is a library (majorly in C)

    a interface between computer and nodejs (computer knows where the network is coming, libuv pass these to nodejs)

    net module: streams of data, bytes.

    http module: pass steams to string

    build information (head, browser, ip) into 2 boxes:

    request: instance of incoming messages, majorly consists of properties

    response: a writableStream until you hit the end. streams the response back, and give it to libuv. majorly methods, for example .end (end of stream)


    nodejs behind the scene

    event emitter: execute your code on some event that happens.

    we define functions in JS but never run it. (JS is single threaded, if you put () at the end of a function, it will execute)

    It gets execute when a request comes in. Libuv finds the properties (for example, a route when someone requesting a URL) and emits an event, then it is the job of nodejs to look into the code file (kept in memory) and looks for equivalent function, and based on that it executes the function. nodejs takes these objects (req, res) and give you access to each one of them, by injecting your requests and response to the function parameters.

    JS is defining what should happen (could be other languages), the hard part is done by nodejs and libuv.


    Node: a cross-platform JS runtime environment for executing JavaScript code

    Node is a cross-platform JS runtime environment

    JS code can't be understood by computer

    a JS engine is a program that converts JS code into machine code that allows a computer to perform specific tasks

    in simple terms, a JS engine can execute JS code

    JS engine JS engines typically developed by browser vendors every browser has a JS engine

    让JS从浏览器中分离出来,得以在服务器中运行

    JS engine is one component in the runtime environment

    v8 engine & nodejs: 

    v8 engine sits at the core of nodejs

    written in c++

    v8 can run standalone, or can be embedded in any c++ program (helped with the creation of nodejs)

    v8 engine (written in c++) embedded into node (c++) the idea behind nodejs: features available in c++ but not available with JS

    runtime: an environment which provides all the necessary components in order to use and run a JS program

    a engine is one component of js runtime

    JS code is executed in JS runtime:

    browser JS runtime components

    JS engine executes JS code: a call stack (where JS code gets executed), a heap memory to store all the variables that a js application needs.

    just a JS engine is not sufficient in the grand scheme of things, the engine itself can execute ecmascript but JS is ecmascript plus all those web apis (console.log, dom api). So to run js a browser needs not just a JS engine but a JS runtime.

    browser api: provided by the browser

    dom, timers(setTimeout, setInterval), promises, storage etc. which add extra functionality to the JS engine but are not part of JS language itself.

    queues: are where async tasks wait before they can be executed

    event loop: ensures async tasks are executed in the right order


    Nodejs: a JS runtime environment which provides all the necessary components in order to use and run a JS program outside the browser

    what can be built with nodejs nodejs runtime

    open source code written in JS and c++

    nodejs runtime, unlike browser runtime, does not have access to the web apis (there is no window or document when working with nodejs)

    deps folder: this folder contains external code that node.js requires for its functioning. we can treat it as one component in the nodejs runtime with sub components like v8, uv, ect.

    let me highlight two important dependencies: 

    1.v8: the same js engine present in the browser, without v8, there is no way for nodejs to understand js code. 

    2.uv: an open-source library called libuv, providing nodejs access to the underlying operating system features such as file system and networking.

    src folder: contains the c++ source code of the nodejs runtime. JS as a language was not designed to deal with low level functionalities like file system or networking, c++ on the other hand was designed to do that, so this source folder is a set of c++ features that nodejs brings to the table. Features such as file system handling and networking. nodejs adds new features to JS through c++ code.

    lib folder: libray of js code. How does js developer get access to these c++ features? the lib folder contains js code that's been written for you to easily get access to the c++ features. For example, fs.js contains js code that we can write to access the file system, the code internally calls the corresponding c++ features which further relies on libuv to access the operating system. The lib folder also contains a few utility functions that you may need when writing code with nodejs

    js runtime environment (c++ & js) capable of executing js outside of a browser browser runtime vs nodejs runtime ways to execute js (outside the browser) with node

    1.node REPL 

    reads JS code the user enters, evaluates the result of interpreting the line of code, prints the result to user, and loops util the user signals to quit

    $ node

    //this starts an interactive shell that processes nodejs expressions

    2. write js code in a file and run it with the code command in the terminal

    execute the js code written in a file with node:

    $ node index.js

    相关文章

      网友评论

          本文标题:Nodejs behind the scene

          本文链接:https://www.haomeiwen.com/subject/gcxsxjtx.html