JS 如何使用 performance 查看内存

正常情况下我们可以在控制台中查看当前页面或应用程序的内存使用情况

浏览器环境中,你可以使用浏览器的开发者工具Memory来查看内存信息

如果你想在 JavaScript 中获取内存信息并打印到控制台,你可以使用性能 API 中的 memory 或者 measureUserAgentSpecificMemory 属性

查看页面内存占用情况

js 复制代码
console.log(performance.memory);
{
    jsHeapSizeLimit: 4294705152
    totalJSHeapSize: 102883888
    usedJSHeapSize: 87997796
}

jsHeapSizeLimit:JavaScript 堆的大小限制。 totalJSHeapSize:JavaScript 堆的总大小。 usedJSHeapSize:JavaScript 堆的使用大小。

查看特定对象的占用情况

在这里我已经简单给大家封装了一遍

js 复制代码
// 创建一个对象,用于测量其内存消耗
var myObj = { data: 'some data' };

// 在对象上执行一些操作,增加内存消耗
for (var i = 0; i < 100000; i++) {
    myObj['property' + i] = 'value' + i;
}
if (crossOriginIsolated) {
    runMemoryMeasurements(myObj)
} else {
  console.error(
        crossOriginIsolated + ' crossOriginIsolated\n Cross-Origin-Opener-Policy 设置为 same-origin(保护源站免受攻击)\n Cross-Origin-Embedder-Policy 设置为 require-corp(保护源站免受侵害)'
  );
}
function runMemoryMeasurements(obj) {
    const interval = 5000;
    console.log(`下一次测量5 秒.`);
    setTimeout(this.measureMemory(obj), interval);
}

function measureMemory(obj) {
    // 测量对象的内存消耗
    window.performance
     .measureUserAgentSpecificMemory(obj)
     .then(function (bytes) {
       console.log('内存占用:', getFileSize(bytes.bytes));
       runMemoryMeasurements(obj)
     });
}

function getFileSize(size) {
   //把字节转换成正常文件大小
   if (!size) return '';
   var num = 1024.0; //byte
   if (size < num) return size + 'B';
   if (size < Math.pow(num, 2)) return (size / num).toFixed(2) + 'KB'; //kb
   if (size < Math.pow(num, 3))
     return (size / Math.pow(num, 2)).toFixed(2) + 'MB'; //M
   if (size < Math.pow(num, 4))
     return (size / Math.pow(num, 3)).toFixed(2) + 'G'; //G
   return (size / Math.pow(num, 4)).toFixed(2) + 'T'; //T
}

可以把vconsole打开,方便移动端查看

注意⚠️浏览器需要校验crossOriginIsolated: 是一个新的安全特性,用于表示一个页面或者一个 Worker 是否启用了跨域隔离 未配置:会在控制台提示你未开启

怎么开启呢 nginx.conf路由配置模块添加

js 复制代码
  location /origin1 {
      add_header 'Cross-Origin-Embedder-Policy' 'require-corp';
      add_header 'Cross-Origin-Opener-Policy' 'same-origin';   
      ......
  }

woker 中:

js 复制代码
const worker = new Worker('your-worker.js', { crossOriginIsolated: true });
  • 正确开启后如图

这里有个demo可以看(我不维护,看不见了就是我删了) 链接

相关推荐
祈澈菇凉2 小时前
Webpack的基本功能有哪些
前端·javascript·vue.js
记得早睡~3 小时前
leetcode150-逆波兰表达式求值
javascript·算法·leetcode
庸俗今天不摸鱼4 小时前
Canvas进阶-4、边界检测(流光,鼠标拖尾)
开发语言·前端·javascript·计算机外设
[廾匸]5 小时前
cesium视频投影
javascript·无人机·cesium·cesium.js·视频投影
菲力蒲LY5 小时前
vue 手写分页
前端·javascript·vue.js
一丢丢@zml5 小时前
new 一个构造函数的过程以及手写 new
javascript·手写new
化作繁星7 小时前
React 高阶组件的优缺点
前端·javascript·react.js
zpjing~.~7 小时前
vue 父组件和子组件中v-model和props的使用和区别
前端·javascript·vue.js
FFF-X7 小时前
大屏自适应终极方案:基于比例缩放的完美适配实践(Vue3版)
javascript·html5
卓有成效的程序员7 小时前
为什么要用 const 和 let,而不是 var?
javascript