Bagaimana untuk melihat id pembolehubah dalam nodejs

WBOY
Lepaskan: 2023-05-28 11:55:38
asal
649 orang telah melayarinya

Node.js ialah persekitaran masa jalan JavaScript berdasarkan enjin Chrome V8 Ia boleh menjalankan kod JavaScript pada bahagian pelayan dan digunakan secara meluas dalam aplikasi web, alat baris arahan, skrip bahagian pelayan dan medan lain. Dalam Node.js, berurusan dengan pembolehubah adalah sangat penting, dan rujukan pembolehubah adalah asas program. Dalam artikel ini, kami akan mendalami cara melihat id pembolehubah dalam Node.js.

id ialah pengecam unik pembolehubah Dalam Node.js, id diberikan kepada pelbagai jenis struktur data, termasuk fungsi, objek, tatasusunan, dsb. Setiap pembolehubah mempunyai alamatnya sendiri dalam memori Dalam Node.js, kita boleh menggunakan typeof dan fungsi pemeriksaan objek Object.prototype.toString.call() untuk melihat jenis pembolehubah. Walau bagaimanapun, ini tidak memberitahu kami id pembolehubah.

Node.js menyediakan cara lain untuk melihat id pembolehubah, iaitu menggunakan objek proses. Objek proses menyediakan banyak maklumat dan alatan yang berguna, termasuk mendapatkan ID proses, parameter baris arahan, pembolehubah persekitaran, dsb. Dalam Node.js, kita boleh melihat id pembolehubah melalui objek proses Untuk melakukan ini, kita perlu menggunakan API yang disediakan oleh V8: v8.getHeapStatistics().

v8.getHeapStatistics() digunakan untuk mendapatkan statistik timbunan memori V8 Ini adalah objek JavaScript yang mengandungi banyak maklumat tentang penggunaan memori, seperti berikut:

{
  total_heap_size: 14773248,         // V8内存堆的总大小
  total_heap_size_executable: 4194304,// 可执行代码的大小
  total_physical_size: 14773248,     // 内存堆所占的总物理大小(包括使用中和空闲的部分)
  total_available_size: 12734672,    // 内存堆的总剩余空间
  used_heap_size: 8172856,           // V8内存堆中已被使用的大小
  heap_size_limit: 1535115264,       // V8内存堆的最大限制容量
  malloced_memory: 8192,             // 通过malloc分配的内存大小
  peak_malloced_memory: 58368,       // 通过malloc分配的内存峰值
  does_zap_garbage: 0                // 标识是否启用了zapping垃圾回收
}
Salin selepas log masuk

Kita boleh. Dapatkan id pembolehubah dengan menggunakan fungsi v8.getHeapStatistics() dan merentasi timbunan memori. Pelaksanaan khusus adalah seperti berikut:

const v8 = require('v8');
const process = require('process');

const idLookupTable = new Map();

function printId(obj) {
  const heapStats = v8.getHeapStatistics();
  const heapSpace = v8.getHeapSpaceStatistics();
  const heapStart = heapStats.total_heap_size - heapStats.used_heap_size;
  const heapEnd = heapStats.total_heap_size;
  let id = '0x';

  for (let i = heapStart; i < heapEnd; i++) {
    const chunk = process.memoryUsage().rss.slice(i, i + 8);
    const chunkId = chunk.toString('hex');
    if (idLookupTable.has(chunkId)) {
      id = idLookupTable.get(chunkId);
      break;
    }
    id = `0x${(parseInt(chunkId, 16) >>> 0).toString(16)}`;
    idLookupTable.set(chunkId, id);
  }

  console.log(`id: ${id} type: ${Object.prototype.toString.call(obj)}`);
}

let arr = [1, 2, 3];
let obj = { a: 1, b: { c: 'hello' } };

printId(arr);
printId(obj);
Salin selepas log masuk

Dalam kod di atas, kami mula-mula menggunakan v8.getHeapStatistics() dan v8.getHeapSpaceStatistics() untuk mendapatkan statistik dan status ruang timbunan memori, dan kemudian melintasi memori timbunan untuk mendapatkan id pembolehubah . Kami menganggap 8 bait setiap blok memori sebagai int tidak bertanda 32-bit dan menukarnya kepada rentetan hex. Jika blok memori ini telah diperuntukkan kepada pembolehubah sebelum ini, kita boleh mencari id sebelumnya dengan mencari jadual carian. Jika blok memori ini tidak pernah diperuntukkan kepada pembolehubah lain, kami menggunakan v8.getHeapStatistics() dan process.memoryUsage().rss untuk mengira id pembolehubah.

Dalam kod di atas, kami menggunakan objek Peta bernama idLookupTable untuk menyimpan hubungan pemetaan antara id blok memori dan id pembolehubah. Dengan cara ini, apabila menggunakan blok memori yang sama, kita boleh terus menggunakan jadual carian tanpa pengiraan semula.

Dalam pelaksanaan di atas, kami menggunakan modul v8 dan modul proses yang disertakan dengan Node.js Kami perlu memasangnya sebagai kebergantungan:

npm install v8 process
Salin selepas log masuk

Dengan menjalankan kod di atas, kami akan mendapat. Output berikut:

id: 0x84327d8c742d type: [object Array]
id: 0x22308cb75c1 type: [object Object]
Salin selepas log masuk

Seperti yang anda lihat, kami berjaya memperoleh id arr dan obj serta mencetak jenisnya. Memandangkan id ialah alamat pembolehubah dalam ingatan, anda mungkin mendapat id yang berbeza setiap kali anda menjalankan program. Pada masa yang sama, disebabkan mekanisme pengumpulan sampah JavaScript, pembolehubah dalam ingatan mungkin dialihkan ke lokasi lain, jadi id pembolehubah juga akan berubah.

Ringkasnya, Node.js menyediakan objek proses dan fungsi v8.getHeapStatistics() untuk melihat id pembolehubah. Dengan merentasi timbunan memori, kita boleh mengira id pembolehubah dan menyimpannya dalam jadual carian untuk kegunaan seterusnya. Dalam pembangunan sebenar, kami mungkin tidak perlu melihat id pembolehubah, tetapi memahami proses ini boleh membantu kami memahami dengan lebih baik prinsip asas rujukan pembolehubah dalam JavaScript, untuk membangunkan kod berkualiti tinggi dengan lebih baik.

Atas ialah kandungan terperinci Bagaimana untuk melihat id pembolehubah dalam nodejs. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!