対象のメモリ占有JSで近似計算

メモリ

やがて、私が原因オンラインサービスの利用には最近まで、JS内のオブジェクトによって占有されているどのくらいのメモリ見てみたかったが、データの伝送の終わりの大きさを計算する必要があり、その需要は特に強いです。

予備

JS今、我々は、高レベルの言語を使用している、それがメモリ内にある、我々は現在にさらされ、細部の上に抽象化レイヤーを作成するには、メモリが可変である取る、変数が固定され、言語仕様書が、原因インタプリタの実現に、可能変数の型のメモリを占有し、わずかに多くを規制され、ここでは、最初のを無視することができ、我々はメモリの量を計算するために変数を定義した変数のメモリサイズの仕様に従うことができるように

JSタイプ

未定義

ヌル

ブーリアン

(正常配列とオブジェクトを区別する)目的

NPM - オブジェクトはsizeof

データ型サイズ公式の定義は、オブジェクトトラバースNPMパッケージがあり、その後、順次加算することによって占められる各属性メモリについて計算し、オブジェクトのおおよその大きさを求めることができます

npm install object-sizeof
  var sizeof = require('object-sizeof')
  
  // 2B per character, 6 chars total => 12B
  console.log(sizeof({abc: 'def'}))
  
  // 8B for Number => 8B
  console.log(sizeof(12345))
  
  var param = { 
    'a': 1, 
    'b': 2, 
    'c': {
      'd': 4
    }
  }
  // 4 one two-bytes char strings and 3 eighth-bytes numbers => 32B
  console.log(sizeof(param))
 

最初のオブジェクトのsizeofを取り付け、次いで得られる物体のおおよそのサイズに導入

オブジェクトはsizeof欠陥

好奇心が強い、私は、このパッケージのソースを見て

function sizeOfObject (object) {
  if (object == null) {
    return 0
  }

  var bytes = 0
  for (var key in object) {
    if (!Object.hasOwnProperty.call(object, key)) {
      continue
    }

    bytes += sizeof(key)
    try {
      bytes += sizeof(object[key])
    } catch (ex) {
      if (ex instanceof RangeError) {
        // circular reference detected, final result might be incorrect
        // let's be nice and not throw an exception
        bytes = 0
      }
    }
  }

  return bytes
}
function sizeof (object) {
  if (Buffer.isBuffer(object)) {
    return object.length
  }

  var objectType = typeof (object)
  switch (objectType) {
    case 'string':
      return object.length * ECMA_SIZES.STRING
    case 'boolean': 
      return ECMA_SIZES.BOOLEAN // 4
    case 'number':
      return ECMA_SIZES.NUMBER //8
    case 'object':
      if (Array.isArray(object)) {
        return object.map(sizeof).reduce((acc, curr) => acc + curr, 0)
      } else {
        return sizeOfObject(object)
      }
    default:
      return 0
  }
}

まずここでは、nullとundefinedメモリは0としてマークされ、これが真の場合、文字列型ではありません、また、文字、中国語と英語のバイトが同じではないが占有され、オブジェクトのサイズを計算しませんでしたが、また、あなたが使用することができます

おすすめ

転載: www.cnblogs.com/sefaultment/p/11518625.html