广告
返回顶部
首页 > 资讯 > 前端开发 > node.js >初始Nodejs
  • 795
分享到

初始Nodejs

Nodejs 2022-06-04 17:06:20 795人浏览 安东尼
摘要

基本概念 node.js,或者 node,是一个可以让 javascript 运行在服务器端的平台。可以说,Node.js开创了javascript模块化开发的先河,早期的javascript需求都很简单,

基本概念

node.js,或者 node,是一个可以让 javascript 运行在服务器端的平台。可以说,Node.js开创了javascript模块化开发的先河,早期的javascript需求都很简单,基本都是写成函数的,然后是面向过程的写法,后来慢慢的引入面向对象开发思想,再后来就慢慢写成 类。最后node.js的出现才开始有了js模块化开发的概念,这使得臃肿的js代码免去了命名冲突等一系列开发难题。

Node最大的特点就是采用了异步式I/O与事件驱动的架构设计。Node.js是一个让js运行在浏览器外的平台。其最初目标是实现事件驱动,非阻塞I/O的WEB服务器

Node.js 只是一个 JavaScript 的运行环境(或者说是一组库), 为标准 js 补充了有关异步 io, 即读写网络和文件的功能。
一个库嘛,无非是调调 api 什么的,除了略反人类的事件回调之外,和其他后端语言(PHP, python)也差不了多少。

Node.js使用的是单线程模式,每一个线程完成一个功能,一个进程可以有多个线程,对于所有的I/O都采用异步式的请求方式。每个异步式I/O请求完成后都会被推送到事件队列,等待程序进程进行处理。

总之,node的核心思想就是:非阻塞,单线程和事件驱动。(同步对应的是阻塞,异步对应的是非阻塞)

Node.JS架构示意图
查看图片

单线程

javascript语言的执行环境是"单线程"(single thread)。
所谓"单线程",就是指一次只能完成一件任务。如果有多个任务,就必须排队,前面一个任务完成,再执行后面一个任务,以此类推。

这种模式的好处是实现起来比较简单,执行环境相对单纯;坏处是只要有一个任务耗时很长,后面的任务都必须排队等着,会拖延整个程序的执行。常见的浏览器无 响应(假死),往往就是因为某一段Javascript代码长时间运行(比如死循环),导致整个页面卡在这个地方,其他任务无法执行。

大部分 Web 应用的瓶颈都在 I/O, 即读写磁盘,读写网络,读写数据库。使用怎样的策略等待这段时间,就成了改善性能的关键点

同步与异步

为了解决这个问题,Javascript语言将任务的执行模式分成两种:同步(Synchronous)和异步(Asynchronous)。

"同步模式"就是上一段的模式,后一个任务等待前一个任务结束,然后再执行,程序的执行顺序与任务的排列顺序是一致的、同步的;"异步模式"则完全不同, 每一个任务有一个或多个回调函数(callback),前一个任务结束后,不是执行后一个任务,而是执行回调函数,后一个任务则是不等前一个任务结束就执 行,所以程序的执行顺序与任务的排列顺序是不一致的、异步的。

"异步模式"非常重要。在浏览器端,耗时很长的操作都应该异步执行,避免浏览器失去响应,最好的例子就是ajax操作。在服务器端,"异步模式"甚至是唯一的模式,因为执行环境是单线程的,如果允许同步执行所有Http请求,服务器性能会急剧下降,很快就会失去响应。

进程与线程

Mac系统中的进程与线程

查看图片

从图中我们可以看出,一个进程可以包括多个线程,进程就好比工程里的车间,线程就是这个车间的工人,在引入线程的操作系统中,通常都是把进程作为分配资源的基本单位,而把线程作为独立运行和独立调度的基本单位。由于线程比进程更小,基本上不拥有系统资源,故对它的调度所付出的开销就会小得多,能更高效的提高系统内多个程序间并发执行的程度。

区别

线程和进程的区别在于,子进程和父进程有不同的代码和数据空间,而多个线程则共享数据空间,每个线程有自己的执行堆栈和程序计数器为其执行上下文。多线程主要是为了节约CPU时间,发挥利用,根据具体情况而定。线程的运行中需要使用计算机的内存资源和CPU。

查看图片

模块和包模块

模块:一个实现某些特定功能的文件,以实现模块化编程。通过require(模块名)引入模块.
—模块中的功能(如:变量,函数)通过赋给exports对象的某个属性提供给调用者使用。

如何使用模块?

在Node中使用模块是非常方便的,在 JavaScript 代码中可以直接使用全局函数 require() 来加载一个模块。例如,我们可以使用require("http")来加载node中自带的http服务器模块,

包:包是一个文件夹,它将模块封装起来,用于发布、更新、依赖管理和版本控制。通过package.JSON来描述包的信息:入口文件,依赖的外部包等等。通过npm install命令来安装包,并通过require使用包。

异步式 I/O 与事件驱动

Node.js 的异步机制是基于事件的,每一个 I/O就是一次请求,所有的磁盘 I/O、网络通信、数据库查询都以非阻塞的方式请求,返回的结果由事件循环来处理。如下图所示:

查看图片

Node.js 进程在同一时刻只会处理一个事件,完成后立即进入事件循环检查并处理后面的事件。这样做的好处是,CPU 和内存在同一时间集中处理一件事,同时尽可能让耗时的 I/O 操作并行执行

查看图片

开始node编程

在这里,我推荐大家使用webstORM进行node.js的开发,方便又快捷,比起cmd,或者Mac下的终端都好用太多了。

至于node的安装大家就自行百度吧,这里就不赘述了,看下webstorm下的node编程界面吧:
我们只需要在编写好的node代码界面按鼠标右键,然后点击Run就行啦,方便又快捷吧

查看图片

下面是node的输出界面:

查看图片

在Mac系统下进行web开发,我推荐大家使用的三款工具是:coda2,webstorm和Sublime text3这些是目前我已经的最好的开发工具了,大家不妨试试哪个更符合自己的口味。

在webstorm进行node开发需要先配置一定的文件,大家就自行百度吧,因为我的webstorm已经配置好了,所以没法截图给大家看步骤了,大概步骤是,在mac系统下是先点击顶部栏的webstorm,然后点击perference,然后点击Node.js and NPM,然后在右侧点击configure配置,最后大概会是下面这个样子:

查看图片

windows系统下和这个流程步骤大概相似啊,我使用的版本是8.0.4的。

全局变量

在js编程中,我们最好给每个变量都添加上var关键字,以免污染全局命名空间,提高代码的耦合风险。

console

console用于向标准输出流standout(stdout)和标准错误流(stderr)输出字符。

console.log()向标准输出流打印字符并以换行符结束,其接受多个参数,将以类似C语言的printf()格式输出

查看图片

console.log(__dirname)输出文件目录

计算代码运行时间

 console.time(label) 
console.timeEnd(label)

查看图片

我们只需在开始和结束那里给同样一个标签即可,中间放你想要计算执行时间的任何代码。

__filename和__dirname

 console.log(__filename);// /Users/hwax/Desktop/My Project/avalon/hello.js
 console.log(__dirname);// /Users/hwax/Desktop/My Project/avalon

--结束END--

本文标题: 初始Nodejs

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

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

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 初始Nodejs
    基本概念 Node.js,或者 Node,是一个可以让 JavaScript 运行在服务器端的平台。可以说,Node.js开创了javascript模块化开发的先河,早期的javascript需求都很简单,...
    99+
    2022-06-04
    Nodejs
  • 初探nodeJS
    一、node概要 对nodeJS早有耳闻,但是一直迟迟没有对它下手,哈哈哈,今儿咱就来初探一下它。 nodeJS是个啥东东? nodeJS,我的理解就是可以运行在后端的JavaScript。 为什么它能够在...
    99+
    2022-06-04
    nodeJS
  • 初始 redis
    官方定义: Redis(Remote Dictionary Server ),即远程字典服务,是一个开源的使用ANSIC语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API。从2010年3月1...
    99+
    2016-06-01
    初始 redis
  • 初始MySQL
    初始MySQL 为什么要学习数据库? 岗位技能需求 存储数据的方法 程序、网站中,需要长久保存大量数据 数据库是几乎软件体系中最核心的一个存在 什么是数据库? 数据库(Database)是:按照数据结构来组织、存储和管理数据的...
    99+
    2021-06-30
    初始MySQL
  • informix 初始化
    [informix@python ~]$ cat   .bash_profile PATH=$PATH:$HOME/binexport PATHexport INFORMIXD...
    99+
    2022-10-18
  • OGG在RAC上的初始化(下)-- OGG初始化
    上篇地址http://blog.itpub.net/29047826/viewspace-1284906/ 1,源端执行RMAN全库备份 备份路径为节点node1的本地磁盘。为了将该备份复制到灾备端,此次...
    99+
    2022-10-18
  • MYSQL的初始化
    #一 MYSQL安装后 应该进行初始化 ##首先配置好环境变量 在此电脑中的属性 配置信息如下 ## 初始化MYSQL 在mysql的根目录中创建一个my.ini的文档 my.in...
    99+
    2023-10-03
    mysql 数据库 Powered by 金山文档
  • SQL语句初始
    SQL概述 结构化查询语言(Structured Query Language)简称SQL,是一种特殊目的的编程语言 其主要用来进行数据库查询和程序设计 SQL可以用来存取数据 查询数据 更新和管理数据库系统 SQL语句结构 数据查询语...
    99+
    2020-09-17
    SQL语句初始 数据库入门 数据库基础教程 数据库 mysql
  • postgres initdb 初始化
    语法说明: initdb [option...] [ --pgdata | -D ] directory 参数解析: -A authmethod --auth=authmethod 这个选项为本地用户指定在pg_hba.conf中使用的默...
    99+
    2014-11-18
    postgres initdb 初始化
  • AS3 Vecter初始化
    var vec : Vecter.<Point> = new <Point>[     new Point(1,1),     new Point(1,2) ];类似于 Array的初始化的方法。 var arr :...
    99+
    2023-01-31
    初始化 Vecter
  • Python list初始化
    1、基本方法。lst = [1, 2, 3, 4, 5]2、初始化连续数字。>>> lst = [n for n in range(5, 10)] >>> print(lst) [5, 6, 7, 8, ...
    99+
    2023-01-31
    初始化 Python list
  • 进阶之初探nodeJS
    一、前言 在"初探nodeJS"随笔中,我们对于node有了一个大致地了解,并在最后也通过一个示例,了解了如何快速地开启一个简单的服务器。 今儿,再次看了该篇随笔,发现该随笔理论知识稍多,适合初级入门nod...
    99+
    2022-06-04
    进阶 nodeJS
  • nodejs初步体验篇
    前言:写这篇文章的由来:   1.前段时间单位有新项目启动,服务端要做的工作不多也不算麻烦,就是处理一些中间层的服务,而且我们团队里面个个都会JavaScript,领导就决定试试服务器端的JavaScrip...
    99+
    2022-06-04
    nodejs
  • 初始网络编程
    专栏简介: JavaEE从入门到进阶 题目来源: leetcode,牛客,剑指offer. 创作目标: 记录学习JavaEE学习历程 希望在提升自己的同时,帮助他人,,与大家一起共同进步,互相成长. 学历代表过去,能力代表现...
    99+
    2023-09-13
    网络协议 网络编程
  • Servlet如何初始化
    这篇文章主要为大家展示了“Servlet如何初始化”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“Servlet如何初始化”这篇文章吧。有时候,我们需要仅仅是在服务启动,而非其他更为复杂的定时任务...
    99+
    2023-06-17
  • [MySQL]初始JDBC编程
    专栏简介 :MySql数据库从入门到进阶. 题目来源:leetcode,牛客,剑指offer. 创作目标:记录学习MySql学习历程 希望在提升自己的同时,帮助他人,,与大家一起共同进步,互相成长. 学历代表过去,能力代表现...
    99+
    2023-09-11
    mysql 数据库 java
  • win10如何初始化
    这篇文章主要介绍“win10如何初始化”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“win10如何初始化”文章能帮助大家解决问题。首先点击左下角开始菜单,打开“设置” 接着进入其中“更新和安全”选项...
    99+
    2023-07-02
  • python 数据库初始
    1、数字2 是一个整数的例子。长整数 不过是大一些的整数。3.23和52.3E-4是浮点数的例子。E标记表示10的幂。在这里,52.3E-4表示52.3 * 10-4。(-5+4j)和(2.3-4.6j)是...
    99+
    2022-10-18
  • 002-postgres initdb 初始化
    语法说明: initdb [option...] [ --pgdata | -D ] directory 参数解析: -A authmethod --auth=authmethod 这个选项为本地用户指定在pg_hba.conf中使用的默...
    99+
    2016-12-11
    002-postgres initdb 初始化
  • MySQL 初始化安装
    下载mysql编译后的包,解压到/export/local/ (具体根据自己使用情况而定)下一、添加mysql用户和用户组1、groupadd mysql2、useradd -r -g mysql mysq...
    99+
    2022-10-18
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作