Node.js est un environnement d'exécution JavaScript basé sur le moteur Chrome V8. Il peut exécuter du code JavaScript côté serveur et est largement utilisé dans les applications Web, les outils de ligne de commande, les scripts côté serveur et d'autres domaines. Dans Node.js, la gestion des variables est très importante et les références de variables sont la pierre angulaire du programme. Dans cet article, nous examinerons en profondeur comment afficher les identifiants de variables dans Node.js.
id est un identifiant unique d'une variable dans Node.js, l'identifiant est attribué à différents types de structures de données, notamment des fonctions, des objets, des tableaux, etc. Chaque variable a sa propre adresse en mémoire. Dans Node.js, nous pouvons utiliser typeof et la fonction d'inspection d'objet Object.prototype.toString.call() pour vérifier le type de variable. Cependant, cela ne nous indique pas l'identifiant de la variable.
Node.js fournit une autre façon d'afficher les identifiants de variables, qui consiste à utiliser l'objet de processus. L'objet processus fournit de nombreuses informations et outils utiles, notamment l'obtention d'ID de processus, de paramètres de ligne de commande, de variables d'environnement, etc. Dans Node.js, nous pouvons visualiser l'identifiant de la variable via l'objet processus. Pour ce faire, nous devons utiliser une API fournie par la V8 : v8.getHeapStatistics().
v8.getHeapStatistics() est utilisé pour obtenir des statistiques sur le tas de mémoire V8. Il s'agit d'un objet JavaScript qui contient de nombreuses informations sur l'utilisation de la mémoire, comme suit :
{ 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垃圾回收 }
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);
npm install v8 process
id: 0x84327d8c742d type: [object Array] id: 0x22308cb75c1 type: [object Object]
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!