Javascript 中繁重计算的最佳实践?

2024-05-06

我正在处理客户端脚本,需要进行繁重的计算,例如将大量对象推送到数组中,这会导致 JavaScript 停止响应并且浏览器挂起并发出警报:

是否有任何最佳实践或设计模式来处理这些计算,我搜索并找到许多不同的方法来处理这些情况,但解决方案很难实现,所以我需要最佳实践并且易于理解?

(我只是编写代码,但我需要一个跨浏览器的通用解决方案,即多线程等)

示例代码(系列包含数千个对象):

for (var series = 0; series < chartObj.masterChart.series.length; series++) {
    var detailData = [];
    jQuery.each(chartObj.masterChart.series[series].data, function (i, point) {
        if (point.x >= chartObj.RangeSelectedMinValue && point.x <= chartObj.RangeSelectedMaxValue) {
            detailData.push({
                x: point.x,
                y: point.y
            });
        }
    });
    chartObj.detailChart.series[series].setData(detailData);
}

好的,看看您的代码,您可以优化一些内容:

var s = chartObj.masterChart.series, // #1
    sLength = s.length,              // #2
    chartMin = chartObj.RangeSelectedMinValue,
    chartMax = chartObj.RangeSelectedMaxValue;
for (var series = 0; series < sLength; series++) {
    var detailData = [],
        data = s[series].data,       // #3
        length = data.length;        // #2
    for(var i = 0; i < length; i++){ // #4
        var point = data[i];
        if (point.x >= chartMin && point.x <= chartMax) {
            detailData.push({
                x: point.x,
                y: point.y
            });
        }

    }
    chartObj.detailChart.series[series].setData(detailData);
}
  1. 您在 ChartObj 中多次获得相同的“更深”对象 --> 将其分配给临时变量;
  2. 不要计算循环每次迭代的长度。与#1原理相同
  3. Assign s[series].data到一个临时变量。这提供了指向数据的直接指针,而不必访问s[series].data循环的每次迭代。与#1原理相同
  4. jQuery 很慢。对于简单的循环,请使用 JavaScript,尤其如果你正在遍历一个巨大的物体。

我并不是说这个编辑会创造奇迹,但它应该会减少一点负载。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Javascript 中繁重计算的最佳实践? 的相关文章

随机推荐

  • 如何使用jquery通过ajax发送电子邮件地址

    var emailid email protected cdn cgi l email protection var data email emailid ajax type POST url sample php data data da
  • 尝试修复此错误:找不到映射的图像 UIPickerViewFrameLeft-162-Popover.png

    我正在尝试以编程方式创建 uiPickerView 并将其添加到视图中 而不使用界面生成器 不要误会我的意思 我喜欢 IB 但我想这样做的原因是因为我正在尝试构建一个对象 我可以快速插入该对象以使用 UIPopoverViewControl
  • chrome_options.binary_location() TypeError: 'str' 对象不可调用

    我希望每个人都好 我是 python 新手 我尝试运行这段代码 但我不明白问题是什么以及如何解决这个问题 我的代码是 from selenium import webdriver from time import sleep url raw
  • 用parsec解析递归数据

    import Data Attoparsec Text Lazy import Data Text Lazy Internal Text import Data Text Lazy pack data List a Nil Cons a L
  • 间接变量/参数引用(另一个属性/另一个变量中的名称)

    是否可以使用 XSL 访问名称存储在另一个变量 或参数 中的变量 或参数 如果没有 为什么 我是 xsl 的新手 来自其他语言 可以使用此功能 例如 bash ant 也许我在寻找这个问题的答案时就错了 但既然我在SO上没有找到它 我想应该
  • 使 div 更大并在悬停时向上动画更大的部分

    当用户将鼠标悬停在 div 上时 我试图将 div 向上设置动画 我可以对 div 进行动画处理 使其变大 但动画是向下发生的 我试图将 div 的底部保持在同一位置 并平滑地向上增加 div 的大小 请参阅 jsfiddle 这里 htt
  • Python - 重写 print()

    我正在使用 mod wsgi 想知道是否可以覆盖 print 命令 因为它没用 这样做是行不通的 print myPrintFunction 因为这是一个语法错误 Print 不是 Python 2 x 中的函数 因此这不能直接实现 但是
  • Javascript 设置输入字段的值

    因为虽然我无法设置 type text 的输入字段的值 以前 我总是使用这样的东西
  • 在heroku实例上安装PIL

    我创建了一个python flask托管在heroku上的应用程序 我很有趣PILpython 中的图像库 我无法安装PIL在heroku实例中 我尝试过以下几种方法 方法一 Added PIL 1 1 7 in requirements
  • 锁定 contenteditable="true" div 中的元素

    我有一个用于用户输入的 contenteditable div 当单击按钮时 它会显示替换某些单词的选项 首先 它删除所有 html 并创建可以替换单词的 span 元素 这些词的标记不同 我面临一些问题 当直接在跨度之前或之后单击并键入文
  • 将 Google Drive 目录中的所有文件恢复为旧版本

    最近 病毒加密了我的所有文件 不幸的是 谷歌备份和同步立即将文件的新版本 加密 上传到我的驱动器 我知道我可以将单个文件恢复到以前的版本 但我的驱动器上大约有 30 000 个文件 这意味着我无法手动恢复所有这些文件 我尝试使用 Apps
  • 如何编写Elasticsearch多个必须脚本查询?

    我想使用查询来比较多个字段 我有字段 1 到 4 我想搜索字段 1 大于字段 2 的数据 并且下面的查询工作正常 size 0 source field1 field2 field3 field4 sort query bool filte
  • 使用数据库数据模型生成 SQLAlchemy 模型、架构和 JSON 响应

    将 Flask 和 SQLAlchemy 用于 Python Web 应用程序 我的目标是创建一个系统 在其中我可以 从现有 PostgreSQL 数据库导入数据模型 并将它们映射到相应 SQLAlchemy 模型中的字段 使用这些 SQL
  • 如何确定某个键是否被按下,只知道它在美国键盘上的位置?

    考虑一下 对于 Windows 视频游戏 我需要确定在美式英语键盘布局上生成 和 字符的键 通常位于 Escape 键下方并保留为 1 是否已被按下 这听起来似乎是一个微不足道的问题 但对我来说似乎不是一个问题 当Windows发送键盘消息
  • 我可以获得有关过度限制类型签名的警告吗?

    当我为可能更具多态性的函数提供类型签名时 GHC 或某些 lint 工具可以告诉我吗 GHC 不这样做 快速搜索 Hackage 也没有发现任何结果 实现这样的事情的一个简单但可能非常有效的方法是在 GHCi 中加载模块 使用 browse
  • 如何在MongoDb中保存Timestamp类型值 |爪哇

    从 Java 驱动程序中 我想在 MongoDb 中保存一个类似于下面 json 的文档 ts Timestamp 1421006159 4 我尝试过的选项 选项1 映射 doc new HashMap 1 doc put ts new B
  • Pytorch“展开”等价于 Tensorflow [重复]

    这个问题在这里已经有答案了 假设我有大小为 50 50 的灰度图像 在本例中批量大小为 2 并且我使用 Pytorch Unfold 函数 如下所示 import numpy as np from torch import nn from
  • 单元测试项目无法读取应用程序的App.config

    在运行 Visual Studio Pro 2013 12 0 21005 1 的构建计算机上 我有一个单元测试项目无法正确读取其 App config 文件 如果有的话 以下返回 null System Configuration Con
  • std::is_trivially_copyable - 为什么易失性标量类型不可简单复制?

    C 17 的当前标准 我观察到 C 11 的类似措辞 对于普通可复制类型的措辞非常混乱 我首先使用以下代码 GCC 5 3 0 偶然发现了这个问题 class TrivialClass std is trivially copyable
  • Javascript 中繁重计算的最佳实践?

    我正在处理客户端脚本 需要进行繁重的计算 例如将大量对象推送到数组中 这会导致 JavaScript 停止响应并且浏览器挂起并发出警报 是否有任何最佳实践或设计模式来处理这些计算 我搜索并找到许多不同的方法来处理这些情况 但解决方案很难实现