位置: 编程技术 - 正文

深入了解Node.js中的一些特性(深入了解求助者时,首先要进行工作是)

编辑:rootadmin

推荐整理分享深入了解Node.js中的一些特性(深入了解求助者时,首先要进行工作是),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:深入了解对方的36个问题,深入了解求助者时,首先要进行工作是,深入了解图片,深入了解图片,深入了解图片,深入了解的高级表达,深入了解英语,深入了解对方的36个问题,内容如对您有帮助,希望把文章链接给更多的朋友!

Node.js作为一门新兴的后台语言,旨在帮助程序员快速构建可伸缩的应用程序。Node.js有很多吸引人的地方,有关它的报道不计其数,本文将针对EventEmitter、Streams、Coding Style、Linting、Coding Style等特性进行分析探讨,帮助用户对Node.js有更深入的了解。

作为一个基于Chrome JavaScript 运行时建立的平台,我们对JavaScript 的相关认识,似乎都可应用于node应用程序之上;无需额外的语言扩展或修饰,我们便可以把前端编程的经验应用于后端编程。

EventEmitter(事件发送器)

首先应该先了解EventEmitter模型。它可以发送一个事件以及让消费者订阅感兴趣的事件。我们可以把它看成是向一个异步函数进行回调传递模式的扩展。特别是,当需要进行多次回调时,EventEmitter会更显优势。

例如,有一个调用者向远程服务器发送了一个“列出文件”的请求。你可能想对返回结果进行分组,对每一个分组进行一次回调处理。EventEmitter模型可以让你在每一个分组上发送“文件”回调,当全部操作完成时进行“结束”处理。

使用EventEmitter时,只需设置好相关事件和参数。

MyClass构造函数创建了一个时间触发器,触发延时为1s,触发事件为myEvent。要使用相关事件,需要执行on()方法:

这里要注意的是,订阅的EventEmitter事件虽然是异步事件,但当时间触发时,监听方的动作是会同步的。因此如果上述myEvent事件有个监听者,所有的监听会被按次序调用而不用等候事件的循环。

如果EventEmitter的一个子类生成了一个emit(‘error')事件,但是无任何的监听方对此进行订阅,那么EventEmitter基类会抛出一个异常,从而导致当执行process对象时触发uncaughtException事件。

verror

verror是基类Error的扩展,可以让我们使用printf字符格式定义输出消息。

Streams(流)

如果有一个非常庞大的文件需要处理,理想的方法应该是读一部分,写一部分,不管文件有多大,只要时间允许,总会处理完成,这里就需要用到流的概念。Streams是Node中另一个广泛使用的模型,在Node中是EventEmitter的实现。提供了可读、可写或者是全双工接口。它是一个抽象接口,提供的常规操作事件包括:readable、writable、 drain、data、 end及close。如果我们能够使用pipeline(管道)来对这些事件进行有效整合,将可实现功能更强大的交互操作。

透过使用.pipe(),可以让Note通过pipeline与back-pressure进行通信。back-pressure的意思是:只读取那些能够写入的,或只写入那些能够读取的。

例如我们现在把来自stdin的数据发送到一个本地文件和远程服务器:

而如果我们想发送数据到一个本地文件,并想使用gunzip对这个stream进行压缩,可以这样做:

如果想对stream有更多了解,请点击这里。

Control Flow(流程控制)

由于JS中有第一类对象,闭包等功能概念,因而能够容易地对回调权限进行定义。这在进行原型设计时是非常方便的,能够对逻辑权限按需进行整合。但是同时容易造成使用笨拙的内置函数。

深入了解Node.js中的一些特性(深入了解求助者时,首先要进行工作是)

例如我们想按次序读入一系列文件,然后执行某个任务:

这个模式存在的问题是:

1.这些代码的逻辑非常散乱无序,相关的操作流程难以理解。2.没有任何差错或异常处理。3.JS中闭包内存泄漏是非常常见的,并难以诊断和探测。

如果我们想在一个输入集上进行一系列异步操作,使用一个流程控制库是更明智的选择。这里使用的是vasync。

vasync是一个流程控制库,其思路来源于异步操作。它的特别之处是能够让消费者对某个任务处理过程进行查看和观察。这些信息对研究某个错误的产生过程是非常有用的。

Coding Style(编程风格)

编程风格可谓最具争议性的话题,因为很多时候都是随性的。萝卜白菜,各有所爱。重要的是找到适合个人和团队的风格。一些传统的传承或许能够让Node开发之旅变得更美好。

1.为函数命名2.尽量对所有函数进行命名。3.避免闭包4.不要在某个函数中定义其它函数。这可减少很多想不到的闭包内存泄露意外。5.更多和更小巧的函数

V8 JIT虽然是一个功能强大的引擎,但是更小巧和精简的函数会与V8结合得更好。进一步说,如果我们的函数都是小巧玲珑的(行左右),我们自己进行阅读和维护时也会感谢自己的。

用编程方式检查风格:保持风格一致性,并使用一个检查工具来加强。我们使用的是jsstyle。

Linting(代码检查)

Lint工具可以在不运行情况下进行代码的静态分析,检查出潜在的错误和风险,例如在caseswitch中遗漏了break语句。Lint不简单地等同于风格检查,它更针对于客观的风险分析,而不是主观的风格选择。我们使用的javascriptlint,它里面有丰富检查项目。

Logging(日志记录)

当我们进行程序设计和编码时,需要有长远的目光。特别是要考虑好使用什么工具来进行调试。极好的第一步是进行有效日志记录。我们需要对信息进行识别,看看什么是调试时特别留意的,什么是运行时用来分析研究的。这里推荐使用Bunyan,一个直接的Node.js日志记录库,数据输出格式是JSON ,要了解更多信息,请点击这里。

Client Server

如果一款应用具备分布式处理能力,在市场上会更有吸引力。类似的接口可以用HTTP RESTFul API或原始的TCP JSON来描述。这可以让开发者把Node上的经验与异步网络环境相结合,以及把streams的使用与分布式可扩展式系统相结合。

常用工具:

1. restify

简单来说,这是一个用于构建REST服务的工具。它提供了良好的查看和调试处理支援,同时支持Bunyan与DTrace。

2. fast

fast是一款以TCP来处理JSON消息的轻量级工具。提供了DTrace支持,能够让我们迅速地对服务器客户端进行性能特征识别。

3. workflow

workflow构建于restify之上,能够对一系列远程服务和API进行业务流程定义。例如:错误状态,超时,重新连接,拥塞处理等。

基于NodeJS的前后端分离的思考与实践(一)全栈式开发 前言为了解决传统Web开发模式带来的各种问题,我们进行了许多尝试,但由于前/后端的物理鸿沟,尝试的方案都大同小异。痛定思痛,今天我们重新思

基于NodeJS的前后端分离的思考与实践(二)模版探索 前言在做前后端分离时,第一个关注到的问题就是渲染,也就是View这个层面的工作。在传统的开发模式中,浏览器端与服务器端是由不同的前后端两个

基于NodeJS的前后端分离的思考与实践(三)轻量级的接口配置建模框架 前言使用Node做前后端分离的开发模式带来了一些性能及开发流程上的优势,但同时也面临不少挑战。在淘宝复杂的业务及技术架构下,后端必须依赖Java

标签: 深入了解求助者时,首先要进行工作是

本文链接地址:https://www.jiuchutong.com/biancheng/374295.html 转载请保留说明!

上一篇:Nodejs Post请求报socket hang up错误的解决办法(node.js中用什么方法处理get、post请求的参数)

下一篇:基于NodeJS的前后端分离的思考与实践(一)全栈式开发(nodejs前后端数据交互)

  • 融资性售后回租印花税
  • 企业资产损失税前扣除管理办法2011215号第46条
  • 小规模纳税人征税率为多少
  • 印花税是当月交当月的吗
  • 金蝶kis旗舰版使用手册
  • 将固定资产转给母公司属于债务重组吗
  • 个人因终止投资经营而取得的股权转让收入如何计算个人所得税?
  • 固定资产到期怎么处理
  • 公司交的物业费入什么科目
  • 单位班车费用是福利费吗
  • 研发折旧会计分录
  • 主营业务成本属于
  • 房地产结转收入是什么意思
  • 有留抵税额可以享受加计抵减吗
  • 固定资产退回账务处理规定
  • 员工奖金分两次发怎么交税?
  • 注册资金未缴齐什么意思
  • 普通发票和专用发票的税点一样吗
  • 以旧换新的销售方式怎样确定销售额
  • 免征残保金还需交税吗
  • 支付车辆保险费及车船税会计科目
  • 车间未完工的产品属于什么
  • 安装设备领用原材料应该用成本还是公允
  • 技术转让所得减半征收企业所得税
  • window10的帮助与支持窗口在哪
  • 一个产品要有什么认证
  • 去年的记账凭证错了怎么办
  • 民营非盈利企业好申请吗
  • 如何pingip地址
  • 安防监控利润怎么样
  • PHP:spl_autoload()的用法_spl函数
  • 销售汇总表格模板
  • php字符串转浮点型
  • 交易性金融资产包括哪些项目
  • 累积未分配利润为负可以分红吗
  • 投资者减除费用60000
  • 普票销售方信息不完整可以用吗
  • 以前年度损益调整
  • vue入门
  • 大学毕业后送快递
  • 固定资产处置的三种方式
  • 个人出租房可开发票吗
  • python怎么设置窗口界面
  • php门户cms
  • 汇算清缴交税怎么做账务处理
  • 公司的现金收入包括
  • 零申报企业所得税的资产总额怎么填写
  • 个税跨月更正申报怎么做
  • 未确认融资费用怎么算
  • 住房租金专项附加扣除
  • 临时工工资由谁发
  • 房租押金可以要回来吗
  • 物流货损怎样处理
  • 个税手续费返还增值税申报表怎么填
  • 固定资产折旧费用的账务处理
  • 印花税计税依据和税率
  • 固定资产如何入账处理
  • 材料采购发生的共同费用可以按什么作为分配基础
  • 社保扣费不成功会再次扣费吗
  • 进项税销项税分录
  • mysql8.0环境配置
  • navicat连接mysql时出现1045错误的解决方法
  • 怎么操作win10系统
  • windowsold文件夹在哪里
  • 搜狗浏览器ie8
  • win10怎么取消u盘密码保护
  • python的linux
  • python该怎么用
  • meta-inf文件夹在哪
  • js tab选项卡
  • python正则批量替换字符串
  • 基于zepto的移动端轻量级日期插件--date_picker
  • python ntlk
  • 纳税人识别号不能含有IOZSV
  • 秀屿区国税局服务电话
  • 增值额未超过扣除项目金额20%是什么意思
  • 新疆中国邮政投诉电话
  • 外贸公司如何开发客户
  • 宁波无犯罪证明能当场拿到吗
  • 重庆国家税务局官方网站
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设