<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          關(guān)于node的知識點

          共 1785字,需瀏覽 4分鐘

           ·

          2020-08-25 23:39


          來源:SegmentFault 思否社區(qū)

          作者:小蔥




          node介紹


          1、node的應(yīng)用場景

          1 工具類 gulp webpack vite (node可以讓js運行在服務(wù)器)
          2 可以做服務(wù)端 優(yōu)化ssr
          3 可以做中間層 (解決跨域問題,格式化數(shù)據(jù))


          2、性能

          非阻塞
          異步I/O(當(dāng)這個方法調(diào)用完畢后不會立即返回結(jié)果)
          事件驅(qū)動(發(fā)布訂閱模式)


          3、優(yōu)勢

          在Java、PHP或者.NET等服務(wù)器語言中,會為每一個客戶端連接創(chuàng)建一個新的線程。而每個線程需要耗費大約2MB內(nèi)存。也就是說,理論上,一個8GB內(nèi)存的服務(wù)器可以同時連接的最大用戶數(shù)為4000個左右。要讓web應(yīng)用程序支持更多的用戶,就需要增加服務(wù)器的數(shù)量,而web應(yīng)用程序的硬件成本當(dāng)然就上升了。


          NodeJs不為每個客戶連接創(chuàng)建一個新的線程,而僅僅使用一個線程。當(dāng)有用戶連接了,就觸發(fā)一個內(nèi)部事件,通過非阻塞I/O、事件驅(qū)動機制,讓Node.js程序宏觀上也是并行的。使用Node.js,一個8GB內(nèi)存的服務(wù)器,可以同時處理超過4萬用戶的連接。





          node的全局對象和模塊


          1、global


          global是全局對象,可以直接訪問里面的屬性
          里面有:

          • Buffer
          • process
          • setInterval,setTimeout,setImmediate
          • console
          • queueMicrotask


          2、模塊

          • __dirname
          • __filename
          • exports
          • module
          • require()


          3、process常用屬性或方法


          process.platform 系統(tǒng)
          process.kill 殺進程
          process.exit 退出進程
          process.nextTick node中的微任務(wù) 當(dāng)前執(zhí)行棧的底部 優(yōu)先級比promise高
          process.cwd() 當(dāng)前的工作目錄,是可變的,看命令在哪里執(zhí)行 (__dirname當(dāng)前文件所在的文件夾,此路徑不會發(fā)生變化)
          process.env 環(huán)境變量(可以set,例如process.env.NODE_ENV)
          process.argv 執(zhí)行時所帶的參數(shù)


          4、事件環(huán)機制



          重要的三個階段
          timer 存放定時器
          poll 輪詢處理I/O回調(diào)
          check setImmediate
          如果在 I/O 回調(diào)的方法里,setImmediate優(yōu)先于 timer 執(zhí)行
          應(yīng)為 poll 接下來是 check


          nextTick 算是一個微任務(wù),不在事件環(huán)中
          在node 11 以上 宏任務(wù)與微任務(wù)的執(zhí)行順序與瀏覽器一樣





          Buffer


          JavaScript 語言自身只有字符串?dāng)?shù)據(jù)類型,沒有二進制數(shù)據(jù)類型。


          但在處理像TCP流或文件流時,必須使用到二進制數(shù)據(jù)。因此在 Node.js中,定義了一個 Buffer 類,該類用來創(chuàng)建一個專門存放二進制數(shù)據(jù)的緩存區(qū)。在 Node.js 中,Buffer 類是隨 Node 內(nèi)核一起發(fā)布的核心庫。Buffer 庫為 Node.js 帶來了一種存儲原始數(shù)據(jù)的方法,可以讓 Node.js 處理二進制數(shù)據(jù),每當(dāng)需要在 Node.js 中處理I/O操作中移動的數(shù)據(jù)時,就有可能使用 Buffer 庫。原始數(shù)據(jù)存儲在 Buffer 類的實例中。一個 Buffer 類似于一個整數(shù)數(shù)組,但它對應(yīng)于 V8 堆內(nèi)存之外的一塊原始內(nèi)存。Buffer屬于global上的屬性可以直接被訪問,讀取文件,寫入(二進制)從硬盤中讀取的數(shù)據(jù)都存到內(nèi)存上,

          buffer可以和字符串相互轉(zhuǎn)化
          定義buffer的三種方式


          let buf1 = Buffer.alloc(6);let buf2 = Buffer.from('珠峰');let buf3 = Buffer.from([65,66,67]);


          buffer中常用的方法


          • buff.toString()
          • buff.fill()
          • buff.slice()
          • buff.copy
          • Buffer.concat()
          • Buffer.isBuffer()
          • indexOf





          點擊左下角閱讀原文,到?SegmentFault 思否社區(qū)?和文章作者展開更多互動和交流。

          -?END -

          瀏覽 35
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  中文字幕 日韩 国产 | 91土豪约大长腿美女嫩模 | 亚洲高清免费在线 | 欧美变态拉屎操逼网站 | 亚洲一级片 |