zoukankan      html  css  js  c++  java
  • 深入浅出Node.js(一)

    1、Node.js将Javascript解决不确定性所使用的事件驱动方式引入了进来,因为JS是一门事件驱动的语言,旨在能够对外界的事件作出响应;

     

    2、Node.js中,所有的有关异步的操作,都在同步操作执行完毕之后才会开始执行;Node不适合做大量计算的应用,因为大量计算会阻塞事件循环调度(主线程),所以在异步操作中,最好不要存在大量计算(消耗CPU)的代码;Node适合有大量的IO操作,如:读文件、处理文件请求;

     

    3、每一个正在运行的应用程序都称之为进程,每个应用程序都至少有一个进程,进程是用来给应用程序提供一个执行的环境,进程是操作系统给应用程序分配资源的最小单位;线程是用来执行应用程序中的代码,在一个进程内部可以有多个线程,在一个线程内部同时只能干一件事,代码从上到下依次执行;

     

    4、Node的异步I/O的平台差异:由于Windows和Unix/Linux平台的差异,Node提供了libuv作为抽象封装层,保证上层的Node与下层的自定义线程池及IOCP之间各自独立;

     

    5、setTimeout(callback)方法会有一个判断事件是否到了的过程,最少也要判断一次;setImmediate(callback)方法会直接添加到事件队列的尾部,等待下一次调度;proccess.nextTick(callback)方法和setImmediate一样,但是优先级更高,在下次调度中会优先执行;

     

    6、Node的异常处理:由于Node是单线程运行环境,一旦抛出异常没有被捕获,就会引起整个进程的崩溃,Node的异常处理对于保证系统的稳定性非常重要;Node采用的方法是将错误对象作为第一个参数传递给回调函数,这样就避免了捕获代码与发生错误的代码不在同一时间段的原因;

     

    7、Node统一规定:回调函数一定作为方法的最后一个参数出现、回调函数的第一个参数默认接收错误信息(便与外界获取调用的错误信息),第二个参数才是真正的数据;

     

    8、Node内置调试器:

         启动调试:node debug 文件.js

         常用命令:-n (下一步)、s(步入)、o(步出)

        第三方调试工具:node-inspector(https://www.npmjs.com/package/node-inspetor)

         安装:npm install -g node -inspector

         1).启动调试器:node-inspector,保持挂起不要关闭

         2).打开另一个命令台,以调试模式启动程序:node --debug foo.js  node --debug-brk foo.js(调试器会在程序的第一行停住)

        VSCode调试(最方便):

         1).打开要调试的文件按F5,编辑器会自动生成一个launch.json文件

         2).修改 launch.json相关内容,主要是name和program(需要调试文件的路径)字段

         3).点击编辑器左侧长的像蜘蛛的按钮,然后点击左上角DEBUG后面的按钮,启动调试,打断点,尽情调试

     

    9、事件驱动原理:Node.js接收到请求之后,首先会把无阻塞的普通代码执行完毕,然后Node.js会把所有的阻塞IO请求放入一个事件队列中,然后通过主线程来调度,从线程池中调度线程来处理事件队列中的阻塞IO请求,当阻塞IO执行完毕之后会调用对应的回调函数,同时该线程会被释放重新回到线程池中;

     

    10、Node.js中的path:

           1).basename(p,[,ext]):注意第二个参数用法,获取文件名称部分;

           2).dirname(p):获取文件目录;

           3).extname(p):获取文件扩展名;

           4).format(pathObject)和parse(pathString);

           5).isAbsolute(p):判断是否为绝对路径;

           6).join([path1][,path2][,...]):拼接路径字符串;

           7).normalize(p):将非标准路径转换为标准路径;

           8).sep:获取操作系统的文件路径分隔符;

     

    11、fs模块读取文件:

           1).readFile(path,encode,callback):异步读取文件(进入事件队列,不阻塞后续代码的执行,实际的调用直到它被事件循环线程提取出才会执行);

           2).readFileSync(path,encoude):同步读取文件(会阻塞主线程);

     

           fs模块写入文件(如果文件存在会覆盖,如果文件不存在直接创建然后写入数据):

           1).writeFile(file,data[,options],callback):异步写入文件;

           2).writeFileSync(file,data[,options]):同步写入文件; 

     

          fs模块向文件中追加内容: 

          1).appendFile(file,data[,options],callback(err)):异步追加; 

          2).appendFileSync(file,data[,options]):同步追加;

     

     

         fs模块验证路径是否存在:  

         1).exists(path,callback(exists)):exists为布尔类型,表示文件是否存在;   

         2).existsSync(path):返回一个布尔类型;

     

     

     

         fs模块获取文件信息:  

         1).stat(path,callback(err,stats)):stats对象挂载了对应文件的所有信息属性;  

         2).statSync(path):返回一个fs.stats实例;

     

         fs模块删除文件:  

         1).unlink(path,callback(err))

         2).unlinkSync(path):同步删除;

     

         fs模块创建目录:  

         1).mkdir(path,callback()):回调函数没有参数,此方法无法创建多级目录,只能创建一级目录;

         2).mkdirSync(path):同步创建;

     

     

         fs模块删除空目录:  

     

         1).rmdir(path,callback()):回调函数没有参数,此方法只能删除空目录

     

         2).rmdirSync(path):同步删除;

     

     

  • 相关阅读:
    《c程序设计语言》读书笔记--大写转小写
    《c程序设计语言》读书笔记--字符串比较
    《c程序设计语言》读书笔记--反转字符串
    spring接收json字符串的两种方式
    logback的使用
    初识Vim
    Chrome控制台
    构造有层次的大纲
    让chrome浏览器快的不要不要的
    排序算法Java版
  • 原文地址:https://www.cnblogs.com/littlebirdlbw/p/5671869.html
Copyright © 2011-2022 走看看