근사 계산 대상 이 js 에서 메모 리 를 차지 하고 있 음
오래 전부터 한 대상 이 JS 에서 얼마나 많은 메모 리 를 차지 하 는 지 보고 싶 었 습 니 다. 최근 까지 온라인 에서 사용 하기 때문에 서버 에서 데 이 터 를 전송 하 는 크기 를 계산 해 야 하기 때문에 이 수요 가 특히 강 했 습 니 다.
예비 지식
우리 가 현재 사용 하고 있 는 js 는 고급 언어 입 니 다. 메모리 디 테 일 위 에 추상 적 인 층 을 만 듭 니 다. 현재 우리 가 접 하고 있 는 것 은 바로 변수 입 니 다. 변수의 점용 메모리 가 고정 되 고 언어 규범 이 설명 되 어 있 습 니 다. 그러나 해석 기 를 실현 하기 때문에 한 유형의 변수 가 메모 리 를 사용 할 수 있 고 조금 더 규범 화 될 수 있 습 니 다. 여기 서 우 리 는 먼저 무시 할 수 있 습 니 다. 이렇게 하면...우 리 는 규범 에 따라 정 의 된 변수 메모리 크기 에 따라 변수 가 사용 하 는 메모 리 를 계산 할 수 있다.
js 유형
undefined
null
boolean
number
string
object (일반 배열 과 대상 구분)
npm - object-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))
우선 object - size of 를 설치 한 후 도입 하면 대상 의 크기 를 얻 을 수 있 습 니 다.
객체 크기 의 결함
궁금 해서 제 가 이 가방 의 소스 코드 를 봤 어 요.
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 으로 표시 되 었 습 니 다. 여 기 는 정확 하지 않 습 니 다. 그 다음 에 string 형식 입 니 다. 똑 같은 문자 입 니 다. 중국어 가 사용 하 는 바이트 와 영어 가 다 르 고 대상 의 크기 도 계산 하지 않 았 지만 사용 할 수 있 습 니 다.
다음으로 전송:https://www.cnblogs.com/sefaultment/p/11518625.html
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.