当有许多(数千个)SVG 元素时,为什么 D3.js 平移比缩放慢?

2024-01-11

当 svg 包含许多元素时,D3.js 平移似乎比缩放更慢且更不稳定。我在 JSFiddle 上做了一个例子http://jsfiddle.net/cornhundred/cfeu1ws2/10/ http://jsfiddle.net/cornhundred/cfeu1ws2/10/代码也如下所示

var num_rect = 3000;

var zoom = d3.behavior.zoom()
    .on("zoom", zoomed);

function zoomed() {
    console.log('zooming or panning');
    d3.select('svg')
        .select('#rect_group')
        .attr("transform", "translate(" + d3.event.translate + ")scale(" + d3.event.scale + ")");
}

svg = d3.select("body")
    .append("svg:svg").attr("width", 800).attr("height", 800)
    .call(zoom);

var rect_group = d3.select('svg')
    .append('g')
    .attr('id', 'rect_group');

var data = _.range(num_rect);

var color = d3.scale.linear().domain([0, num_rect]).range(['red', 'blue']);

rect_group.selectAll('rect')
    .data(data)
    .enter()
    .append('rect')
    .attr('height', 175)
    .attr('width', 5)
    .attr('x', function (d) {return 50 + d / (0.003 * num_rect);})
    .attr('y', 50)
    .style('fill', function (d) {return color(d);});

在这个例子中我附加num_rects将矩形并排放置到 svg 上并添加一些颜色,以便清楚地看到有很多矩形。每当调用缩放函数时,我也会生成控制台日志。

增加num_rect高于 ~3000 会导致平移不稳定,而缩放则保持平滑。这可以从可视化的行为或控制台日志的频率(“缩放或平移”)中看出。这很奇怪,因为我预计平移比缩放更消耗 CPU 资源。

这种行为似乎也是特定于浏览器的 - 我只在 Chrome 中看到这种情况(这也很奇怪,因为 Chrome 通常最擅长渲染 D3.js 可视化)。


None

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

当有许多(数千个)SVG 元素时,为什么 D3.js 平移比缩放慢? 的相关文章

  • 从多层嵌套数组 JavaScript 中获取所有键值

    我有一个这样的对象 var data id 36e1e015d703120058c92cf65e6103eb title Alex McGibbon id 60beb5e7d7600200e5982cf65e6103ad title Ale
  • 为什么 lodash 将我的数组转换为对象?

    我是 lodash 的新手 创建了一个函数 该函数从值为 null 或空白的对象中删除键 但是当我传递包含某些部分作为数组的对象时 它会删除数组并将其转换为对象 下面是我尝试过的代码 mixin removeFalsies this rem
  • Javascript图像编辑插件

    在哪里可以找到 Javascript 或 jQuery 图像编辑器插件 用户可以单击图像进行编辑 并且该插件允许他们进行裁剪 调整大小 旋转 翻转等 Pixastic http pixastic com lib 不再活跃 和CamanJS
  • 选择多选选项最多 2 个

    我正在对不同主题使用多重选择 我想将选择限制为最多 2 个 并且如果用户取消选择 则以相同的方式禁用其他选项 同样 该选项必须可供用户使用
  • 应该使用encodeURI吗?

    javascript 的encodeURI 函数有任何有效用途吗 据我所知 当您尝试发出 HTTP 请求时 您应该 完整的 URI 您想要放入 URI 中的某些片段 可以是 unicode 字符串或 UTF 8 字节序列 在第一种情况下 显
  • 如何将 scala 列表转换为 javascript 数组?

    有更简单的方法吗 document ready function var jsArray if scalaList null for id lt scalaList jsArray push id 很简单 如下所示 import play
  • ECMAScript 6 类中的 getter 和 setter 有何用途?

    我对 ECMAScript 6 类中 getter 和 setter 的意义感到困惑 什么目的 下面是我参考的一个例子 class Employee constructor name this name name doWork return
  • Sequelize 关联 - 请改用 Promise 风格

    我正在尝试将 3 张桌子连接在一起Products Suppliers and Categories然后排SupplierID 13 我读过了如何在sequelize中实现多对多关联 https stackoverflow com a 25
  • 如何从左向右滑动文本和图像并具有滑动效果[关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • Durandal SPA 与打字稿有关的问题

    我使用 TypeScript 1 8 将我的 durandal SPA 应用程序从 VS 2012 更新到 VS 2015 它将生成 JavaScript ECMA5 我解决了所有构建错误 但我无法修复一个名为 return 语句只能在函数
  • 当key未知时如何获取js对象中的属性值

    我有一个对象数组 a 81 25 p 81 25 81 26 p 81 26 我想循环遍历数组并获取值p在每个元素中 for var key in a console log a key outputs 81 25 Object How d
  • 如何使用 JavaScript 压缩文件?

    有没有办法使用 JavaScript 来压缩文件 例如 在雅虎邮件中 当您选择下载电子邮件中的所有附件时 它会被压缩并下载到单个 zip 文件中 JavaScript 能够做到这一点吗 如果是这样 请提供一个编码示例 我发现这个图书馆叫js
  • 如何将 vue3-openlayers 插件添加到 nuxt

    我有以下 main ts 文件Vue3 https v3 vuejs org import createApp from vue import App from App vue How to do this in nuxt3 import
  • es6-module 默认导出导入为未定义

    我不确定我在这里缺少什么 我正在使用 jspm 和 es6 module loader 开发一个项目 我有一个模块定义如下 import hooks from hooks import api from api import tools f
  • 单击 btn 而不触发 div 单击未按预期工作

    代码沙盒 https codesandbox io s currying breeze depdc9 file package json https codesandbox io s currying breeze depdc9 file
  • 跟踪预防阻止了对 https://appsforoffice.microsoft.com/lib/1.1/hosted/office.js 存储的访问

    大约一年半前 我使用 OfficeJS API 编写了一个 Excel 加载项 它一直工作到大约两周前 Excel 似乎已经进行了更新 现在我可以右键单击任务窗格并查看开发工具 而以前我无法做到这一点 并且必须运行外部 MS Edge 开发
  • 单击 html 中的按钮后如何从 javascript 函数写入文件

    我正在尝试编写真正基本的代码 在 html 文件上按下按钮后 通过 JavaScript 函数在本地写入 txt 文件 这不可能吗 我可以仅使用 javascript 文件写入文件 但在尝试同时使用两者时则不能
  • 阻止 PM2 上不同时运行的请求

    在我的 Express 应用程序中 我在应用程序中定义了 2 个端点 一种用于 is sever up 检查 另一种用于模拟阻塞操作 app use status req res gt res sendStatus 200 app use
  • 如何将函数导入到Vue组件中?

    我正在尝试将单个函数导入到我的 Vue 组件中 我为我的函数创建了一个单独的 js 文件 randomId js exports randomId gt My function 在我的 Vue 组件中 我导入了 Random js let
  • 了解客户端文件的对象 URL 以及如何释放内存

    我在用createObjectURL获取本地图像文件的引用 URL 当我完成文件 图像后 我打电话revokeObjectURL释放该内存 一切对我来说都很好 但我只是想确保我释放了我能释放的所有内存 我检查后出现了我的担忧chrome b

随机推荐

  • IIS 7.0 上的 ETag

    IIS 中的 Etag 是否默认启用 如果没有 请告诉我如何打开它们 Etag 开启 默认设置为 0 http attosol com etag and iis demystified http attosol com etag and i
  • Python 更新 Github 远程存储库上的文件,无需本地工作目录

    这是关于在没有本地工作目录的情况下推送到远程存储库的问题的后续问题 Python 将文件推送到 Github 远程仓库 无需本地工作目录 https stackoverflow com questions 39737192 python p
  • Python - 将 CSV 转换为对象 - 代码设计

    我有一个小脚本 用于读取包含员工的 CSV 文件 并对这些数据执行一些基本操作 我们读入数据 import gd dump 并创建一个Employees对象 包含一个列表Employee对象 也许我应该想一个更好的命名约定 哈哈 然后我们调
  • 作为图形 IDE 用户,我应该对传统编辑器感兴趣吗? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 如何确定节点中用户的IP地址

    如何确定控制器内给定请求的 IP 地址 例如 快递 app post get ip address function req res need access to IP address here In your request https
  • 使用来自 C99 的库在 Windows 上使用 TCC 编译文件

    所以最新版本的TCC据说实现了C99的一些功能 但是 我发现它不包括C99的数学库 有没有办法让它在 Windows 上使用更多 C99 的库 我用 google 搜索了一下 发现了一些主要与 Linux 相关的建议 但对于这个项目 我需要
  • org.apache.http.conn.HttpHostConnectException:与 https://jazz.net 的连接被拒绝

    我已将我的工作灯从 5 0 5 升级到 5 0 6 当我在 5 0 5 上工作时 它工作正常 但当我在更新版本的工作灯 5 0 6 中使用相同的代码时 它给了我这个错误 响应 apps services api RTMLight commo
  • 从 XCode 中的 .strings 文件读取字符串

    我是 iOS 新手 我有一个 strings 文件 其中存储了一个免责声明 当我的应用程序打开时可以查看该免责声明 但是 我无法弄清楚如何从 disclaimer strings 文件中调用 免责声明 字符串 如有帮助 将不胜感激 另外 感
  • 如何通过哈希比较限制 API 密钥的使用

    我目前正在使用Spotify in my Android应用程序 但我需要使用Secret为了刷新令牌等等 我想传达我的秘密Backend到应用程序 因此秘密并不驻留在APK并且反编译时找不到 我读过很多关于保护应用程序中的秘密的内容 通过
  • RobotFramework:超出启动关键字的最大限制

    我是 RobotFramework 的新手 我正在尝试做一个简单的测试 使用 Log 关键字打印 Hello world 并从 java 类获取值 我在 Ride 上使用 jybot Settings Library robot MyTes
  • 是的,嵌套模式验证

    我正在尝试根据用户选择的选择选项有条件地验证对象 问题是我正在渲染货币列表 并且在尝试将其设为必填字段时遇到巨大困难 因为我必须传入一个空的对象开始 我的代码堆栈是 React Formik 和 Yup 所有最新版本 对象模式 catego
  • 防止同时触摸多个按钮

    在iOS中 是否有办法防止包含多个按钮 兄弟 的UIView同时被触摸 例如 可以通过两次触摸同时点击两个并排的不重叠按钮 设置 UIView exclusiveTouch
  • 如何为 Maven/Surefire 和 Eclipse 加载不同的 logback 配置

    我想在 Eclipse 和 Maven surefire 插件 中为我的单元测试使用不同的默认 logback 配置 基本上 我希望将测试期间生成的任何日志发送到 Eclipse 中的控制台或 Maven 的文件 目前 我有一个包含两个附加
  • Java Applet 中的背景图像

    如何在 Java Applet 中设置背景图像 假设我希望 background gif 成为我的 java applet 类中的背景 但我该怎么做呢 我认为没有一个函数可以做到这一点 但是您可以扩展一个Panel 它可以充当一个简单的组件
  • backbone.js 的跨浏览器如何?

    我们正在使用多种浏览器类型 网络 移动设备 平板电脑和智能电视 我们正在为我们的 mvc 寻找backbone js backbone js 是否有任何已知的跨浏览器限制 我认为这与 Backbone 关系不大 而与您使用的 HTML 和
  • 什么是陈旧状态?

    我在维基百科上阅读有关对象池模式的内容 http en wikipedia org wiki Object pool http en wikipedia org wiki Object pool 并且它提到 危险的陈旧状态 陈旧 状态到底是
  • Python 2 和 Python 3 中 exec 函数的行为

    以下代码给出了不同的输出Python2 and in Python3 from sys import version print version def execute a st b 42 exec b nprint b b format
  • 使用 npm 如何将包下载为 zip 格式,并将其所有依赖项包含在包中

    我想做的是下载包含所有依赖项的软件包 以便将它们传输到另一台没有互联网连接的计算机上并安装在那里 所以情况是 下载包 到 zip tarball 任何文件 而不安装它 下载的文件中包含其所有依赖项 正确的版本及其依赖项的依赖项 将文件传输到
  • Git:无法从一台计算机推送

    我的一位同事在他的机器上从 git 推送更改时遇到了问题 如果他登录到另一台机器 他可以很好地推送 但是从他的机器上 当他尝试推送时 他会收到以下错误 D Projects test1 best practices gt git push
  • 当有许多(数千个)SVG 元素时,为什么 D3.js 平移比缩放慢?

    当 svg 包含许多元素时 D3 js 平移似乎比缩放更慢且更不稳定 我在 JSFiddle 上做了一个例子http jsfiddle net cornhundred cfeu1ws2 10 http jsfiddle net cornhu