gpt4 book ai didi

javascript - JavaScript 中变量的大小

转载 作者:行者123 更新时间:2023-12-04 17:27:50 25 4
gpt4 key购买 nike

出于兴趣,是否可以确定 JavaScript 变量的大小(以字节为单位)?

我有一个在桌面上运行良好的网络应用程序,但是 blows up * 在 iPad 上。我猜这是因为 iPad Safari 的内存有限,但我想了解一下我的应用程序中发生了什么。

我可以根据 JSON 源的大小估计相对大小,但最好知道序列化对象的实际大小

  • “炸毁” = Safari 速度变慢,然后屏幕变黑,然后我回到标准 iPad 主屏幕。不管那叫什么。在我看来,Safari 已经用完了为浏览器实例分配的内存。
  • 最佳答案

    这不会直接回答你的问题。 JS 语言引用没有指定如何存储数据,所以这取决于执行实现的小组,在这种情况下是 WebKit 团队,我还没有看到任何公开的内容。我绝对没有看到有关 Mobile Safari 的 WebKit 实现的任何信息。

    我想说的是,桌面上的东西实际上可能运行得并不好,只是桌面的速度和大小掩盖了移动设备上出现的“问题”。在 iOS 上,如果我没记错的话,浏览器实例有 10MB 的上限可以在其中运行,但在实践中,你会在 6 或 7MB 左右开始碰壁。在 PC 上,当您的 RAM 用完时,计算机只会将未使用的内存转储到磁盘上。在 iOS 上,要么资源停止加载(例如图像),要么浏览器退出(这可能是您遇到的情况)。

    如果您有 Mac,您可以使用名为“Instruments”的工具(它是 iOS SDK 的一部分)来窥探 Safari 以了解它的运行情况。如果您没有 Mac 或不想下载 SDK,只需打开一个干净的 Safari 实例,打开 Windows 的任务管理器或 Mac 的事件监视器,然后查看加载 web 应用程序时内存使用情况的变化。

    停留在 6MB 窗口内很烦人。最重要的是尽量避免创建新图像。例如,这种模式在 iPhone 上是一个大问题:

    function placeImage(imagename,targetelement) { 
    var image = new Image();
    image.src = imagename;
    targetelement.appendChild(image);
    }

    在这种情况下,即使您从 DOM 中删除了图像,并且即使 image范围在 placeImage ,它永远不会被释放,这个应用程序崩溃浏览器只是时间问题。如果是这种情况,请考虑一次需要显示多少张图像,仅为这些元素创建图像对象并回收它们(只需在需要新图像时随时重置 src)。

    另外,我发现 JavaScript 的应用程序堆栈比桌面浏览器小得多,所以如果你有很多递归,你会在 iOS 上更快地看到问题。发现这个问题的方法是在 Safari 中打开开发者工具并使用分析器查看哪些函数被调用最多。

    [编辑] 我不记得这是否是揭示 webkit 内部如何以不同方式存储数字的确切技术,但我认为它是。基本上,您对一百万个随机数进行排序,首先使用浮点数,然后(如果取消注释该行)一个整数,然后是一个大整数。我不擅长类型化语言,所以我不完全确定这证明了什么,除了内部数字根据它们的最小可能表示进行不同处理。
    arrTarget = [];
    for (var i = 0; i < 1000000; i++) {
    arrTarget.push(Math.random() * 16000000);
    // arrTarget.push(Math.floor(Math.random() * 16000000));
    // arrTarget.push(Math.floor(Math.random() * 1600000000000));
    }

    // Time how long it takes to sort the array:
    var time = new Date().getTime();
    arrTarget.sort();
    console.log(new Date().getTime() - time);

    关于javascript - JavaScript 中变量的大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5254278/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com