node的一些模块,中间件等的介绍,还了解了queueMicrotask()这个函数与nextTick在事件处理顺序中的区别

Buffer

计算机中所有的内容∶文字、数字、图片、音频、视频最终都会使用二进制来表示。
JavaScript可以直接去处理非常直观的数据︰比如字符串,我们通常展示给用户的也是这些内容。
事实上在网页端,图片我们一直是交给浏览器来处理的;JavaScript或者HTML,只是负责告诉浏览器一个图片的地址;浏览器负责获取这个图片,并且最终讲这个图片渲染出来。

但是对于服务器来说是不一样的:
服务器要处理的本地文件类型相对较多;

  • 比如某一个保存文本的文件并不是使用utf-8进行编码的,而是用GBK,那么我们必须读取到他们的二进制数据,再通过GKB转换成对应的文字;
  • 比如我们需要读取的是一张图片数据(二进制),再通过某些手段对图片数据进行二次的处理(裁剪、格式转换、旋转、添加滤镜),Node中有一个Sharp的库,就是读取图片或者传入图片的Buffer对其再进行处理;
  • 比如在Node中通过TCP建立长连接,TCP传输的是字节流,我们需要将数据转成字节再进行传入,并且需要知道传输字节的大小(客服端需要根据大小来判断读取多少内容);

Buffer就是为了存储二进制数据,可以看成是一个存储二进制的数组。在计算机中,很少的情况我们会直接操作一位二进制,因为一位二进制存储的数据是非常有限的;所以通常会将8位合在一起作为一个单元,这个单元称之为一个字节 ( byte ) ;也就是说1byte = 8bit,1kb=1024byte ,1M=1024kb;

  • 比如很多编程语言中的int类型是4个字节,long类型时8个字节;
  • 比如TCP传输的是字节流,在写入和读取时都需要说明字节的个数;
  • 比如RGB的值分别都是255,所以本质上在计算机中都是用一个字节存储的;
创建buffer
  • 创建一个buffer并编码,不写编码方式默认utf8:const buffer = Buffer.from('你好啊','utf16le')解码输出一个buffer:console.log(buffer.toString('utf16le'))

  • alloc()创建。const buffer = Buffer.alloc(8);8表示size,空间为8个字节;

  • buffer和文件操作.resize( , )重定义图片尺寸

    fs.readFile('./xx.png',(err,data)=>{
        fs.writeFile('./xxxx.png',data,err=>{
            console.log(err)
        })
    })
    

事件循环

进程和线程:

  • 进程:计算机已经运行的程序

  • 线程:操作系统能够运行运算调度的最小单位

    我们可以认为:启动一个应用程序,就会默认启动一个进程(也可能是多个进程);每一个进程中,都会启动一个线程用来执行程序中的代码,这个线程被称之为主线程;所以我们也可以说进程是线程的容器。

执行函数就是压栈调用的过程。函数执行完才会弹出栈。

事件循环中并非只维护着一个队列,事实上是有两个队列:

宏任务和微任务:

  • 宏任务队列( macrotask queue ) : ajax、setTimeout、setInterval、DOM监听、uI Rendering等
  • 微任务队列( microtask queue ) : Promise的then回调、 Mutation Observer API、queueMicrotask()等

事件循环对于两个队列的优先级

  • main script中的代码优先执行(编写的顶层script代码);(同步任务)
  • 在执行任何一个宏任务之前(不是队列,是一个宏任务),都会先查看微任务队列中是否有任务需要执行:也就是宏任务执行之前,必须保证微任务队列是空的;如果不为空,那么就优先执行微任务队列中的任务(回调);

前面讲过详细的有关事件循环顺序的问题&#x

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值