Node.js学习笔记-02

三、node的异步I/O

四、异步编程

1、函数式编程

高阶函数

函数可以作为参数或者返回值。

偏函数用法

偏函数用法是指创建一个调用另外一个部分——参数或变量已经预置的函数——的函数的用法。

举个例子:在JavaScrip中进行类型判断时,我们通常会进行类似上述代码的方法定义。如下代码存在的问题是需要重复去定义一些相似的函数,如果有 更多的isXXX(),就会出现更多的冗余代码。

var toString = Object.prototype.toString;
var isString = function (obj){return toString.call(obj) =='[object String]';
}
var isFunction = function (obj){return toString.call(obj) == '[object Function]';
}

改造以后

var isType = function (type) {return function (obj) {return toString.call(obj) == '[object ' + type + ']';}
}
var isString = isType('String')
var isFunction = isType('Function')
console.log(isString)
console.log(isFunction)

2、异步编程的优势与难点

Node利用JavaScript及其内部异步库,将异步直接提升到业务层面,这是一种创新。

优势

Node带来的最大特性莫过于基于事件驱动的非阻塞I/O模型,这是它的灵魂所在。非阻塞I/0可以使CPU与I/O并不相互依赖等待,让资源得到更好的利用。对于网络应用而言,并行带来的想象空间更大,延展而开的是分布式和云。并行使得各个单点之间能够更有效地组织起来,这也是Node在云计算厂商中广受青睐的原因,图4-1为异步IO调用的示意图。

难点

  1. 异常处理
  2. 函数嵌套过深
  3. 阻塞代码
  4. 多线程编程
  5. 异步转同步

3、异步编程的解决方案

1. 事件发布/订阅模式

2.Promise / Deferred

3.流程控制库

4、异步并发控制

五、内存控制

V8的内存限制:

在一般的 后端开发语言中,在基本的内存使用上没有什么限制。然而在Node中通过JS使用内存时就会发现只能使用部分内存(64位系统下约为1.4GB,32位系统下 约为0.7GB)。在这样的限制下,将会导致Node无法直接操作大内存 对象。

高效使用内存

这一节中定义的闭包概念是:
实现外部作用域访问内部作用域中变量的方法叫做闭包(closure)。

小结:
在正常的JavaScript执行中,无法立即回收的内存有闭包和全局变量引用这两种情况。由于V8的内存限制,要十分小心此类变量是否无限制地增加,因为它会导致老生代中的对象增多。

六、理解 Buffer

Buffer是一个像Array的对象,但它主要用于操作字节。下面我们从模块结构对象结构的层面上来认识它。

1、Buffer结构

模块结构:
Buffer 是一个典型的JavaScript与C++结合的模块,它将性能相关部分用C++实现,将非性能相关的部分用JavaScript实现。

Buffer所占用的内存不是通过V8分配的,属于堆外内存。由于V8垃圾回收性能的影响,将常用的操作对象用更高效和专有的内存分配回收策略来管理是个不错的思路。

由于 Buffer 太过常见,Node 在进程启动时就已经加载了它,并将其放在全局对象(global)上。所以在使用Buffer时,无需通过 require() 即可直接使用。

2、Buffer的转换

3、Buffer的拼接

4、Buffer与性能

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/10174.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

企业网络安全与数据保护合规建设 ——从合规运营到香港上市

序言 《企业网络安全与数据保护合规建设 ——从合规运营到香港上市(一)》梳理了我国网络安全与数据保护领域近期主要立法情况,本文将着重分析拟赴港上市企业运营阶段的数据合规要点以期为拟赴港上市的相关企业提供有益的参考。 二 企业运营…

PatchMatchNet运行eth3d数据集重建 实操教程(图文并茂、超详细)、bash eval.sh脚本文件解释说明

文章目录 1 准备工作1.1 下载源码1.2 测试集下载1.2 配置环境2 eth3d 数据集 重建演示2.1 重建效果查看3 补充 测试列表定义4 Meshlab查看三维点云时 ,使用技巧总结1 Meshlab查看三维点云时 ,换背景颜色2 Meshlab查看三维点云时,点云颜色很暗淡,怎么调亮3 Meshlab和CloudCo…

Jenkins 还可以支持钉钉消息通知?一个插件带你搞定!

Jenkins 作为最流行的开源持续集成平台,其强大的拓展功能一直备受测试人员及开发人员的青睐。大家都知道我们可以在 Jenkins 中安装 Email 插件支持构建之后通过邮件将结果及时通知到相关人员。 但其实 Jenkins 还可以支持钉钉消息通知,其主要通过 Ding…

Log4j源码解析

Log4j源码解析 主要流程 Logger logger Logger.getLogger(Main.class); 1、通过Logger.getLogger(Class clazz) 或 Logger.getLogger(String name)进入。 2、加载LogManager进jvm, 执行静态代码块执行初始化, 创建出RepositorySelector实例及LoggerRepository实例(Hierarchy…

vue3响应式最大的特点

趋于面向对象编程,和Java很像,以前v-model可以使用,但是现在不是了。 let postsreactive({attrs:[],name:列表}) 任何东西,都先扔到一个对象里面 页面使用也不需要posts.name这样一堆点,直接{{name}}可以使用一个很方便的方法甩…

如何提高自动化测试覆盖率

实施自动化测试最重要的就是要保证其可用性,而不少同学写了不少自动化测试用例,但感觉到其可用性不高。究其原因,不是自动化测试本身的问题,是实施自动化测试的时候没有考虑周全。 第一,不合事宜地引入自动化测试 在公…

C语言实现扫雷

今天用C语言写一个扫雷的代码 扫雷其实和我们之前写的三子棋有点相似,首先是打印菜单,进行选择 我们还是像之前一样有三个文件,一个是game.h game.c test.c test.c实现我们的扫雷逻辑 gam.c实现我们的游戏需要的函数 game.h来声明 那么我们首…

轻量级Web报表工具ActiveReportsJS全新发布v4.0,支持集成更多前端框架!

ActiveReportsJS 是一款基于 JavaScript 和 HTML5 的轻量级Web报表工具,采用拖拽式设计模式,不需任何服务器和组件支持,即可在 Mac、Linux 和 Windows 操作系统中,设计多种类型的报表。ActiveReportsJS 同时提供跨平台报表设计、纯…

将Python远控隐藏在文档图片中的行动分析

1、概述 ** **近日,安天CERT通过网络安全监测发现了一起恶意文档释放Python编写的远控木马事件。通过文档内容中涉及的组织信息和其中攻击者设置的诱导提示,安天CERT判断该事件是一起针对阿塞拜疆共和国国家石油公司进行的定向攻击活动。此次事件中&…

godot引擎c++源码深度解析系列二

记录每次研究源码的突破,今天已经将打字练习的功能完成了一个基本模型,先来看下运行效果。 godot源码增加打字练习的demo 这个里面需要研究以下c的控件页面的开发和熟悉,毕竟好久没有使用c了,先来看以下代码吧。 //第一排 显示文本…

13、ffmpeg使用nvidia显卡对OAK深度相机进行解码和编码

基本思想:简单使用nvidia的硬件解码进行oak相机的编码和解码学习 一、在本机rtx3060配置好显卡驱动和cuda之后进行下面操作50、ubuntu18.04&20.04CUDA11.1cudnn11.3TensorRT7.2/8.6Deepsteam5.1vulkan环境搭建和YOLO5部署_ubuntu18.04安装vulkan_sxj731533730的…

README.md 文档使用 treer 生成树形项目结构

一、前言 前后端编写 README.md 文档的时候,常常需要描写项目的结构,使用 tree 命令生成的目录又不能忽略某个目录,不方便。后来我找到了可以忽略某些目录的 treer命令 ,特此记录一下: 二、使用 treer 生成项目结构 全局安装tr…

Redis 基础知识和核心概念解析:探索 Redis 的数据结构与存储方式

🌷🍁 博主 libin9iOak带您 Go to New World.✨🍁 🦄 个人主页——libin9iOak的博客🎐 🐳 《面试题大全》 文章图文并茂🦕生动形象🦖简单易学!欢迎大家来踩踩~&#x1f33…

攻略|如何成为Moonbeam收集人

Moonbeam与其他PoS机制EVM公链类似,仰赖节点的运营保持网络的顺利运行以及安全。Moonbeam作为同时兼容Substrate和以太坊API的开发平台,同以太坊主网相比仍存在差异。 在Moonbeam的生态中,节点运营者被称为收集人,负责收集来自Mo…

SQLite的应用

2023年7月27日 据我所知,使用了SQLite数据库的软件有: 火狐浏览器Joplin 火狐浏览器 火狐浏览器用SQLite数据库来存储历史记录、访问过的网址等。 Joplin Joplin是GitHub上一个很火的开源记事本软件, Joplin用SQLite来存储笔记里面的文…

Python-Go python模块与包 - GO问题 - GO容量测试

目录 go 模块与包复习(Init函数 - go mod) init函数有什么用?init函数是什么? go.mod文件是什么?有什么作用? python的模块与包 python中包的分类 1、内置模块:不需要安装,直接…

前端工作中常用 CSS 知识点整理

1.1文字溢出省略号 文字单行溢出: overflow: hidden; // 溢出隐藏 text-overflow: ellipsis; // 溢出用省略号显示 white-space: nowrap; // 规定段落中的文本不进行换行 多行文字溢出: overflow: hidden; // 溢出隐藏 text-overflow: …

C# 反汇编 dnSpy

反汇编工具&#xff1a;dnSpy 常见问题&#xff1a; 1、遇到反汇编结果为<PrivateImplementationDetails>&#xff0c;报错不能有尖括号。解决方法&#xff0c;在dnSpy中复制出这个类&#xff0c;就可以去掉尖括号去使用了。 2、componentResourceManager&#xff0c;…

Java电子招投标采购系统源码-适合于招标代理、政府采购、企业采购

功能描述 1、门户管理&#xff1a;所有用户可在门户页面查看所有的公告信息及相关的通知信息。主要板块包含&#xff1a;招标公告、非招标公告、系统通知、政策法规。 2、立项管理&#xff1a;企业用户可对需要采购的项目进行立项申请&#xff0c;并提交审批&#xff0c;查看…

【简单认识MySQL主从复制与读写分离】

文章目录 一、MySQL主从复制1、配置主从复制的原因&#xff1a;2、主从复制原理1、 MySQL的复制类型2、 MySQL主从复制的工作过程;1、 MySQL主从复制延迟2、优化方案&#xff1a;3、 MySQL 有几种同步方式&#xff1a; 三种4、异步复制&#xff08;Async Replication&#xff0…