返回顶部
首页 > 资讯 > 前端开发 > node.js >Nodejs为什么选择javascript为载体语言
  • 717
分享到

Nodejs为什么选择javascript为载体语言

语言为载体Nodejs 2022-06-04 17:06:21 717人浏览 泡泡鱼
摘要

我们先来看看nodejs官网上的介绍:   其特点为:   1,它是一个javascript运行环境   2,依赖于Chrome V8引擎进行代码解释   3,事件驱动   4, 非阻塞I/O   5,

我们先来看看nodejs官网上的介绍:

查看图片

  其特点为:

  1,它是一个javascript运行环境

  2,依赖于Chrome V8引擎进行代码解释

  3,事件驱动

  4, 非阻塞I/O

  5, 轻量、可伸缩,适于实时数据交互应用

  6,单进程,单线程

  (1),nodejs为什么选择javascript为载体语言

    事实上,在实现 node.js 之初,作者 Ryan Dahl 并没有选择 JavaScript,他尝试过 C、lua,皆因其欠缺一些高级语言的特性,如闭包、函数式编程,致使程序复杂,难以维护。

    而 JavaScript 则是支持函数式编程范型的语言,很好地契合了 Node.js 基于事件驱动的编程模型。加之 Google 提供的 V8 引擎,使 JavaScript 语言的执行速度大大提高。

    最终呈现在我们面前的就成了 Node.js,而不是 Node.c,Node.lua 或其他语言的实现。

  (2),Node.js不是JS应用、而是JS运行平台

    看到Node.js这个名字,初学者可能会误以为这是一个Javascript应用,事实上,Node.js采用c++语言编写而成,是一个Javascript的运行环境。

    Node.js采用了Google Chrome浏览器的V8引擎,性能很好,同时还提供了很多系统级的api,如文件操作、网络编程等。

    以下是NodeJS所涉及的全部模块:

    查看图片查看图片

    浏览器端的Javascript代码在运行时会受到各种安全性的限制,对客户系统的操作有限。

    相比之下,Node.js则是一个全面的后台运行时,为Javascript提供了其他语言能够实现的许多功能。

  (3),Node.js的特点

    Node.js在设计上也是比较创新,它以单进程,单线程模式运行(这和Javascript的运行方式是一致的),

    事件驱动机制是Node.js通过内部单线程高效率地维护事件循环队列来实现的,没有多线程的资源占用和上下文切换,这意味着面对大规模的Http请求,Node.js凭借事件驱动搞定一切,

    习惯了传统语言的网络服务开发人员可能对多线程并发和协作非常熟悉,但是面对Node.js,我们需要接受和理解它的特点。

二,重要概念

  1,什么是 Event Loop ?(很重要的概念)

    Event Loop 是一个很重要的概念,指的是计算机系统的一种运行机制。

    想要理解Event Loop,就要从程序的运行模式讲起。运行以后的程序叫做进程(Process),一般情况下,一个进程一次只能执行一个任务。

    如果有很多任务需要执行,不外乎三种解决方法。

      (1),排队。因为一个进程一次只能执行一个任务,只好等前面的任务执行完了,再执行后面的任务。

      (2),新建进程。使用fork命令,为每个任务新建一个进程。

      (3),新建线程。因为进程太耗费资源,所以如今的程序往往允许一个进程包含多个线程,由线程去完成任务。

    以JavaScript语言为例,它是一种单线程语言,所有任务都在一个线程上完成,即采用上面的第一种方法。一旦遇到大量任务或者遇到一个耗时的任务,网页就会出现"假死",因为JavaScript停不下来,也就无法响应用户的行为。

    你也许会问,JavaScript为什么是单线程,难道不能实现为多线程吗?

    这跟历史有关系:

      JavaScript语言的一大特点就是单线程,也就是说,同一个时间只能做一件事。那么,为什么JavaScript不能有多个线程呢?这样能提高效率啊。

      JavaScript的单线程,与它的用途有关。作为浏览器脚本语言,JavaScript的主要用途是与用户互动,以及操作DOM。这决定了它只能是单线程,否则会带来很复杂的同步问题。

      比如,假定JavaScript同时有两个线程,一个线程在某个DOM节点上添加内容,另一个线程删除了这个节点,这时浏览器应该以哪个线程为准?

      所以,为了避免复杂性,从一诞生,JavaScript就是单线程,这已经成了这门语言的核心特征,将来也不会改变。

      为了利用多核CPU的计算能力,HTML5提出WEB Worker标准,允许JavaScript脚本创建多个线程,但是子线程完全受主线程控制,且不得操作DOM。
      所以,这个新标准并没有改变JavaScript单线程的本质。

      回到EventLoop:

      单线程就意味着,所有任务需要排队,前一个任务结束,才会执行后一个任务。如果前一个任务耗时很长,后一个任务就不得不一直等着。

      如果排队是因为计算量大,CPU忙不过来,倒也算了,但是很多时候CPU是闲着的,因为io设备(输入输出设备)很慢(比如ajax操作从网络读取数据),不得不等着结果出来,再往下执行。

      JavaScript语言的设计者意识到,这时主线程完全可以不管IO设备,挂起处于等待中的任务,先运行排在后面的任务。等到IO设备返回了结果,再回过头,把挂起的任务继续执行下去。

      于是,所有任务可以分成两种,一种是同步任务(synchronous),另一种是异步任务(asynchronous)。同步任务指的是,在主线程上排队执行的任务,只有前一个任务执行完毕,

      才能执行后一个任务;异步任务指的是,不进入主线程、而进入"任务队列"(task queue)的任务,只有"任务队列"通知主线程,某个异步任务可以执行了,该任务才会进入主线程执行。

      如下图:

        查看图片

       只要主线程空了,就会去读取"任务队列",这就是JavaScript的运行机制。这个过程会不断重复。

三,实例讲解

  好了,“废话”不多说了,马上开始我们第一个NodeJS应用:“Hello 大熊”。

  打开你最喜欢的编辑器,创建一个HelloWorld.js文件。

  代码如下:

1 var http = require("http") ;2 http.createServer(function(request,response){3 response.writeHead(200,{4 "Content-Type" : "text/plain"5 }) ;6 response.write("Hello,大熊 !") ;7 response.end() ;8 }).listen(8888) ;

  我们来运行并且测试这段代码。首先,用Node.js执行你的脚本:

  打开命令行工具CMD,切换到你的工作目录,运行命令“node HelloWorld.js”

  接下来,打开浏览器访问http://localhost:8888/,你会看到一个写着 “Hello,大熊 !” 的网页。

  一点小的扩展知识:

  如下图所示,这是NodeJS中的http.js部分源码,createServer是一个对用户很友好的接口,内部实现采用了单例模式,这样做的好处是,把实例的创建和初始化任务进行有效的分离,职责专一,降低耦合度,这是大家平时编程时可以借鉴的思想。

  查看图片

  哈哈哈,是不是很有意思,这只是一次短暂的体验,后面会陆续讲解很多的知识点,大家慢慢体会O(∩_∩)O哈哈~

四,总体概述

  1,它是一个Javascript运行环境

  2,依赖于Chrome V8引擎进行代码解释

  3,事件驱动

  4, 非阻塞I/O

  5, 轻量、可伸缩,适于实时数据交互应用

  6,单进程,单线程

  最后我想说的话是:这篇的例子不是很多,但是这些概念相当重要,一定要有一个清晰的理解,这样为以后的NodeJS学习会打下牢固的基础的,朋友们加油一起努力。

       哈哈哈,本篇结束,未完待续,希望和大家多多交流够沟通,共同进步。。。。。。呼呼呼……(*^__^*)

--结束END--

本文标题: Nodejs为什么选择javascript为载体语言

本文链接: https://lsjlt.com/news/12204.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • Nodejs为什么选择javascript为载体语言
    我们先来看看NodeJS官网上的介绍:   其特点为:   1,它是一个Javascript运行环境   2,依赖于Chrome V8引擎进行代码解释   3,事件驱动   4, 非阻塞I/O   5, ...
    99+
    2022-06-04
    语言 为载体 Nodejs
  • 为什么选择学习Go语言?
    为什么选择学习Go语言? 随着互联网技术的不断发展,编程语言的选择也成为了开发者需要思考的重要问题之一。在众多编程语言中,Go语言作为一门新兴的高性能编程语言,逐渐受到了越来越多开发者...
    99+
    2024-03-13
    高效 强大 简洁 go语言 并发请求 标准库
  • 为什么go语言是加载Unix时最佳选择?
    随着互联网技术的迅速发展,越来越多的开发者开始寻找一种高效、稳定的编程语言来构建大型系统。在这些语言中,Go语言因其高效、并发、简单易学等特点而受到了广泛的关注。对于Unix系统来说,Go语言也是最佳的选择之一。本文将会深入探讨为什么Go语...
    99+
    2023-08-15
    load http unix
  • 为什么选择PHP作为Web开发的首选语言
    为什么选择PHP作为Web开发的首选语言 在当今的互联网时代,Web开发已经成为了一个非常重要的领域。而选择一种合适的编程语言对于开发者来说至关重要。在众多的编程语言中,PHP作为一种...
    99+
    2024-04-02
  • 为什么选择Go语言进行开发?
    为什么选择Go语言进行开发? 在当今飞速发展的技术行业中,选择适合的编程语言进行开发变得愈发重要。Go语言,也称为Golang,是一种由Google开发的编程语言,它在过去几年内变得越...
    99+
    2024-04-02
  • 为什么选择 Go 语言来支持 GRPC?
    积累知识,胜过积蓄金银!毕竟在Golang开发的过程中,会遇到各种各样的问题,往往都是一些细节知识点还没有掌握好而导致的,因此基础知识点的积累是很重要的。下面本文《为什么选择 Go 语言来支持 GR...
    99+
    2024-04-04
  • 为什么选择Go编程语言?它能做什么?
    Go 编程语言,又称 Golang,是一种由 Google 开发的开源编程语言,于2009年首次发布。作为一门静态类型、编译型的语言,Go 在设计上注重简洁性、高效性和可靠性,深受广大...
    99+
    2024-02-22
    应用 go语言 特性 标准库
  • 为什么我心中TOP1的编程语言是Java?我为什么选择Java?
    文章目录 前言优点跨平台性面向对象编程(OOP)强大的类库和工具支持广泛的应用领域 缺点速度相对较慢内存消耗较大较高的学习曲线 Java 学习路线总结前置知识Web前端基础 后端基础1. Java基础2. 数据库技术...
    99+
    2023-08-16
    java 开发语言 spring boot
  • 为什么选择golang
    作为一门比较新兴但快速发展的编程语言,Golang在近几年已经逐渐被越来越多的开发人员所接受并加以使用。那么,为什么越来越多的人在选择编程语言时会优先考虑Golang呢?本文将对此进行探讨。一、Golang的历史与发展Golang的发展历程...
    99+
    2023-05-14
  • 为什么JavaScript是初学者的好选择
    本篇文章为大家展示了为什么JavaScript是初学者的好选择,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。有充分的理由,JavaScript是Web开发中使用的事...
    99+
    2024-04-02
  • 探究Go语言的优点:为何选择Go语言?
    当今软件开发领域繁荣发展,各种编程语言层出不穷,其中一门备受关注、备受推崇的编程语言就是Go语言。Go语言是由Google开发的一种静态类型、编译型的编程语言,它的设计目的是为了提高程...
    99+
    2024-02-28
    并发 高效 简洁 go语言 跨平台应用 标准库
  • 简述:我为什么选择Python而不是Matlab和R语言
     做数据分析、科学计算等离不开工具、语言的使用,目前最流行的数据语言,无非是MATLAB,R语言,Python这三种语言,但今天小编简单总结了python语言的一些特点及平常使用的工具等。 为什么Pyth...
    99+
    2022-06-04
    我为 而不是 语言
  • 解密:GRPC 为何选择支持 Go 语言?
    GRPC 是一种跨语言的高性能远程过程调用(RPC)框架,它基于 Protocol Buffers 进行数据传输,提供了强大的功能和性能优势。为了支持不同的编程语言,GRPC 提供了多...
    99+
    2024-04-02
  • 为什么Go语言是实现分布式文件负载均衡的最佳选择?
    Go语言是一种快速上手、高效率的编程语言,它在分布式文件负载均衡的场景下表现出色。在本文中,我们将探讨为什么Go语言是实现分布式文件负载均衡的最佳选择,并演示一些相关的代码。 分布式文件负载均衡是一个关键的问题,在大规模的分布式系统中,文件...
    99+
    2023-08-18
    分布式 load 文件
  • 为什么选择国外vps
    选择国外vps的原因:1、国外vps价格相对比国内vps便宜一些,并且国外的IT行业比过国内发达,性价比更高;2、国外vps的便捷性更高,不需要进行繁琐的备案流程,即开即用,并且国外vps限制少,能够快速搭建网站业务;3、国外vps的稳定性...
    99+
    2024-04-02
  • Go语言内核:为什么成为程序员的首选?
    在当今快速发展的科技时代,程序员这一职业已经成为越来越受人们青睐的职业选择。而在众多编程语言中,Go语言由于其简洁、高效、并发能力强等优势,逐渐成为许多程序员的首选。本文将探讨为什么越...
    99+
    2024-03-14
    程序员 go语言 内核
  • 如何选择Go语言作为开发工具
    标题:如何选择Go语言作为开发工具,需要具体代码示例 随着软件开发行业的迅速发展,选择一种适合自己的开发工具变得尤为重要。Go语言作为一种开源、高效、简洁的编程语言,越来越受到开发者们...
    99+
    2024-02-22
    开发工具 编程关键词 选择go语言 go语言 网络编程 标准库
  • 为什么选择mysql数据库?
    1、mysql性能卓越,服务稳定,很少出现异常宕机。 2、mysql开放源代码且无版权制约,自主性及使用成本低。 3、mysql历史悠久,社区及用户非常活跃,遇到问题,可以寻求帮助。 4、mysql软...
    99+
    2024-04-02
  • 为什么选择智稳软件?
    如今社会,越来越依靠全自动化设备。比如,农产品的收割、分类与装包,几乎可以依靠机械设备直接完成,与传统的使用大量人工劳动力相比,不仅速度增加,也减少了不必要的人力无力。而 智稳软件 也是如此。 ...
    99+
    2024-04-02
  • 为什么要选择VPS主机
    选择VPS主机的原因:1、VPS主机加载速度比共享虚拟主机快,并且能够根据自身需求自行安装程序或插件;2、VPS主机拥有自由的磁盘空间,可根据自身业务需求按需选择空间大小;3、VPS主机能够实现软硬件隔离,并且拥有独立服务器资源,从而有效降...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作