内射老阿姨1区2区3区4区_久久精品人人做人人爽电影蜜月_久久国产精品亚洲77777_99精品又大又爽又粗少妇毛片

Node.jsAPI詳解之如何使用V8模塊

小編這次要給大家分享的是Node.js API詳解之如何使用V8模塊,文章內(nèi)容豐富,感興趣的小伙伴可以來(lái)了解一下,希望大家閱讀完這篇文章之后能夠有所收獲。

創(chuàng)新互聯(lián)-專業(yè)網(wǎng)站定制、快速模板網(wǎng)站建設(shè)、高性價(jià)比大連網(wǎng)站開發(fā)、企業(yè)建站全套包干低至880元,成熟完善的模板庫(kù),直接使用。一站式大連網(wǎng)站制作公司更省心,省錢,快速模板網(wǎng)站建設(shè)找我們,業(yè)務(wù)覆蓋大連地區(qū)。費(fèi)用合理售后完善,十多年實(shí)體公司更值得信賴。

本文實(shí)例講述了Node.js API詳解之 V8模塊用法。分享給大家供大家參考,具體如下:

Node.js API詳解之 V8

v8 模塊暴露了特定于V8版本內(nèi)置到 Node.js 二進(jìn)制文件中的API. 通過(guò)以下方式使用:

const v8 = require('v8');

注意: APIs 和實(shí)現(xiàn)可能在任何時(shí)間變動(dòng)。

v8.cachedDataVersionTag()

說(shuō)明:

返回一個(gè)表示從V8版本,命令行標(biāo)志和已檢測(cè)到的CPU功能派生的“version tag”的整數(shù)。
這對(duì)于判斷vm.Script cachedData是否兼容當(dāng)前v8實(shí)例非常有用。

demo:

const v8 = require('v8');
console.log( v8.cachedDataVersionTag() );
// 2299951209

v8.getHeapSpaceStatistics()

說(shuō)明:

返回關(guān)于v8堆空間的統(tǒng)計(jì),即組成v8堆的片段。
通過(guò)V8 GetHeapSpaceStatistics 函數(shù)提供統(tǒng)計(jì)信息,無(wú)論堆空間的順序,或是堆空間的可用性都可以被保證,并且可能是多個(gè)V8版本。

demo:

const v8 = require('v8');
console.log( v8.getHeapSpaceStatistics() );
// [ { space_name: 'new_space',
//   space_size: 2097152,
//   space_used_size: 706992,
//   space_available_size: 324176,
//   physical_space_size: 2051712 },
//  { space_name: 'old_space',
//   space_size: 2420736,
//   space_used_size: 2325072,
//   space_available_size: 176,
//   physical_space_size: 2368592 } ]

v8.getHeapStatistics()

說(shuō)明:

返回?fù)碛幸韵聟?shù)的對(duì)象:
total_heap_size
total_heap_size_executable
total_physical_size
total_available_size
used_heap_size
heap_size_limit
malloced_memory
peak_malloced_memory
does_zap_garbage
does_zap_garbage是個(gè)0/1式布爾值,它凸顯是否設(shè)置了–zap_code_space選項(xiàng)。
若為真,那么V8引擎會(huì)用一個(gè)位模式來(lái)覆蓋堆中的垃圾。
如此,RSS(常駐內(nèi)存集)會(huì)變得越來(lái)越大,因?yàn)閂8會(huì)一直征用所有的堆頁(yè),從而讓他們更難被操作系統(tǒng)交換掉。

demo:

const v8 = require('v8');
console.log( v8.getHeapStatistics() );
// { total_heap_size: 7159808,
//  total_heap_size_executable: 3670016,
//  total_physical_size: 6020992,
//  total_available_size: 1492618992,
//  used_heap_size: 4550336,
//  heap_size_limit: 1501560832,
//  malloced_memory: 8192,
//  peak_malloced_memory: 1185928,
//  does_zap_garbage: 0 }

v8.setFlagsFromString(string)

說(shuō)明:

v8.setFlagsFromString()可以被用來(lái)在腳本中設(shè)置V8引擎的命令行標(biāo)識(shí)。此方法應(yīng)該謹(jǐn)慎使用。
在虛擬機(jī)已經(jīng)運(yùn)行后修改其設(shè)置可能會(huì)造成不可預(yù)測(cè)的結(jié)果,包括崩潰和數(shù)據(jù)丟失,或者一點(diǎn)作用也沒(méi)有。
針對(duì)一個(gè)特定版本的Node.js,可供其使用的V8選項(xiàng)可以通過(guò)運(yùn)行node –v8-options來(lái)獲取。
一個(gè)非官方的,由社區(qū)維護(hù)的選項(xiàng)清單及其效果可參見這里。

demo:

const v8 = require('v8');
v8.setFlagsFromString('mbp v8');

Serialization API

說(shuō)明:

序列化API提供了一系列用于序列化JavaScript值的方法,它們兼容于HTML structured clone algorithm。
格式是向下兼容的(可以安心存儲(chǔ)于硬盤中)。
注意: 此API正在開發(fā)中,任何變化(包括不兼容的API或者傳輸格式)可能會(huì)隨時(shí)發(fā)生直到此警告被移除。

v8.serialize(value)

說(shuō)明:

使用DefaultSerializer來(lái)序列化value到一個(gè)緩沖區(qū)中。

demo:

const v8 = require('v8');
console.log( v8.serialize('isjs') );
// 

v8.deserialize(buffer)

說(shuō)明:

用默認(rèn)配置來(lái)執(zhí)行DefaultDeserializer從而從一個(gè)緩沖區(qū)中讀取一個(gè)JS值

demo:

const v8 = require('v8');
const serializeVal = v8.serialize('isjs');
console.log( serializeVal );
// 
console.log( v8.deserialize(serializeVal);
// isjs

class: v8.DefaultSerializer

說(shuō)明:

Serializer的子類,用來(lái)將TypedArray(尤其是Buffer)和Dataview序列化成一個(gè)宿主對(duì)象,
并且對(duì)于它們底層的ArrayBuffer,只有被它們實(shí)際指向的部分會(huì)被存儲(chǔ)起來(lái)。

class: v8.DefaultDeserializer

說(shuō)明:

Deserializer的一個(gè)子類,根據(jù)DefaultSerializer的格式而定。

new Serializer()

說(shuō)明:

創(chuàng)建一個(gè)新的Serializer對(duì)象。

serializer.writeHeader()

說(shuō)明:

寫出一個(gè)包含序列化格式版本的頭文件

serializer.writeValue(value)

說(shuō)明:

序列化一個(gè)JavaScript值并將結(jié)果加入內(nèi)部的緩沖區(qū)。
如果value不能被序列化則拋出錯(cuò)誤。

serializer.releaseBuffer()

說(shuō)明:

返回存儲(chǔ)里的內(nèi)部緩沖區(qū)。若緩沖區(qū)已經(jīng)被釋放則不應(yīng)該使用此序列化機(jī)制。
如果之前的一次寫入操作失敗,那么執(zhí)行此方法會(huì)造成不可預(yù)知的行為。

serializer.transferArrayBuffer(id, arrayBuffer)

說(shuō)明:

標(biāo)記一個(gè)ArrayBuffer, 表明它的內(nèi)容正在被帶外傳輸中。
同時(shí)將ArrayBuffer包裹于一個(gè)反序列化的上下文內(nèi),之后將結(jié)果傳入deserializer.transferArrayBuffer()中。

serializer.writeUint32(value)

說(shuō)明:

寫出一個(gè)原始32位無(wú)符號(hào)整型。
此方法在一個(gè)自定義的serializer._writeHostObject()中使用.

serializer.writeUint64(hi, lo)

說(shuō)明:

寫出一個(gè)原始64位無(wú)符號(hào)整型,會(huì)被拆分成高32位和低32位兩部分。
此方法用于一個(gè)自定義的serializer._writeHostObject().

serializer.writeDouble(value)

說(shuō)明:

寫出一個(gè)JS的number值。 從方法用于一個(gè)自定義的serializer._writeHostObject().

serializer.writeRawBytes(buffer)

說(shuō)明:

將原始字節(jié)寫入序列化機(jī)制的內(nèi)部緩沖區(qū)中。
反序列化機(jī)制會(huì)有對(duì)應(yīng)的方法來(lái)獲得緩沖區(qū)的長(zhǎng)度。
此方法用于一個(gè)自定義的serializer._writeHostObject()中。

serializer._writeHostObject(object)

說(shuō)明:

此方法用來(lái)寫出某種宿主對(duì)象,進(jìn)一步說(shuō),是由綁定的原生C++代碼所生成的一個(gè)對(duì)象。
如果無(wú)法序列化object,那么一個(gè)恰當(dāng)?shù)漠惓?huì)被拋出。
此方法在Serializer對(duì)象本身是不存在的,但可在其子類中提供。

serializer._getDataCloneError(message)

說(shuō)明:

當(dāng)一個(gè)對(duì)象無(wú)法被克隆時(shí),會(huì)使用此方法來(lái)生成待拋出的錯(cuò)誤對(duì)象。
此方法默認(rèn)為Error的構(gòu)造函數(shù),可以在子類中被覆蓋。

serializer._getSharedArrayBufferId(sharedArrayBuffer)

說(shuō)明:

當(dāng)序列化機(jī)制將要序列化一個(gè)ShareArrayBuffer對(duì)象時(shí)會(huì)調(diào)用此方法。
它必須為這對(duì)象返回一個(gè)32位無(wú)符號(hào)整型的ID,但若這個(gè)對(duì)象已被序列化過(guò),則返回上一次序列化時(shí)所分配的ID。
這個(gè)ID會(huì)在對(duì)象被反序列化時(shí)傳入deserializer.transferArrayBuffer()中。
如果對(duì)象不能被序列化,則拋出異常。
Serializer類本身不包含此方法,但可以在其子類中設(shè)置它。

serializer._setTreatArrayBufferViewsAsHostObjects(flag)

說(shuō)明:

表明是否視TypedArray,DataView對(duì)象為宿主對(duì)象,也就是說(shuō),是否能將他們傳入serializer._writeHostObject()中。
默認(rèn)以上對(duì)象非宿主對(duì)象。

new Deserializer(buffer)

說(shuō)明:

生成一個(gè)新的Deserializer對(duì)象。

deserializer.readHeader()

說(shuō)明:

讀取并驗(yàn)證一個(gè)頭文件(包含格式信息)。
驗(yàn)證在某些情況下有可能不會(huì)通過(guò),比如傳輸格式不合格或者不被支持。
若發(fā)生上述情況,那么一個(gè)Error會(huì)被拋出。

deserializer.readValue()

說(shuō)明:

從緩沖區(qū)中反序列化一個(gè)JavaScript值,并返回它。

deserializer.transferArrayBuffer(id, arrayBuffer)

說(shuō)明:

標(biāo)記一個(gè)ArrayBuffer, 表明它的內(nèi)容正在被帶外傳輸中。
同時(shí)將ArrayBuffer包裹于一個(gè)序列化的上下文內(nèi),之后將結(jié)果傳入serializer.transferArrayBuffer()中
(當(dāng)arrayBuffer是ShareArrayBuffer實(shí)例時(shí),返回serializer._getSharedArrayBufferId()產(chǎn)生的id)

deserializer.getWireFormatVersion()

說(shuō)明:

讀取底層的傳輸格式的版本。很可能有助于遺留代碼來(lái)讀取舊的傳輸格式版本。
不可在.readHeader()之前調(diào)用此方法。

deserializer.readUint32()

說(shuō)明:

讀取并返回一個(gè)原始32位無(wú)符號(hào)整型。
用于一個(gè)自定義的deserializer._readHostObject()。

deserializer.readUint64()

說(shuō)明:

讀取一個(gè)原始64位無(wú)符號(hào)整型,將其拆分成一個(gè)包含兩個(gè)32位無(wú)符號(hào)整型的[hi, lo]數(shù)組,并返回此數(shù)組。
用于一個(gè)自定義的deserializer._readHostObject()。

deserializer.readDouble()

說(shuō)明:

讀取一個(gè)JSnumber值。 用于一個(gè)自定義的deserializer._readHostObject()。

deserializer.readRawBytes(length)

說(shuō)明:

從反序列化機(jī)制的內(nèi)部緩沖區(qū)中讀取原始字節(jié)。length必須和傳入serializer.writeRawBytes()中的緩沖區(qū)的長(zhǎng)度相符。
用于一個(gè)自定義的serializer.writeRawBytes()。

deserializer._readHostObject()

說(shuō)明:

此方法用來(lái)寫出某種宿主對(duì)象,進(jìn)一步說(shuō),是由綁定的原生C++代碼所生成的一個(gè)對(duì)象。
如果無(wú)法序列化數(shù)據(jù),那么一個(gè)恰當(dāng)?shù)漠惓?huì)被拋出。
此方法在Deserializer對(duì)象本身上是不存在的,但可有其子類提供。

看完這篇關(guān)于Node.js API詳解之如何使用V8模塊的文章,如果覺得文章內(nèi)容寫得不錯(cuò)的話,可以把它分享出去給更多人看到。

新聞名稱:Node.jsAPI詳解之如何使用V8模塊
網(wǎng)頁(yè)網(wǎng)址:http://www.rwnh.cn/article4/ghceoe.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站營(yíng)銷、Google品牌網(wǎng)站制作、網(wǎng)站設(shè)計(jì)公司、服務(wù)器托管

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

成都網(wǎng)站建設(shè)公司
公主岭市| 莫力| 扶沟县| 正安县| 桐乡市| 上蔡县| 黄冈市| 武邑县| 锡林郭勒盟| 神农架林区| 藁城市| 班戈县| 五常市| 宁德市| 岑巩县| 靖江市| 黄陵县| 阿合奇县| 建宁县| 平陆县| 廉江市| 武宣县| 图木舒克市| 无为县| 曲靖市| 黔西| 兰西县| 景谷| 新津县| 万荣县| 韶关市| 开化县| 大冶市| 宜城市| 宜黄县| 哈密市| 车险| 岳西县| 改则县| 大厂| 普格县|