Javascript 规模检查功能性能

标签 javascript performance math loops exponent

好的,我的性能有点瓶颈。

基本上我有一个由屏幕 div(“屏幕”)和图表 div(“图表”)组成的图表,当这个图表完成渲染时,它会检查它需要在图表上设置什么比例,以便让图表适合屏幕。问题是无论我想出什么比例,都必须是 1.2 的指数。换句话说,您需要能够通过将 1.2 乘以某个数字的次方来获得新比例的数字。

此函数用于计算我需要的比例。

fitScale = function (width, height)
{
  var scale = 1,
      gWidth = graph.element.offsetWidth,
      gHeight = graph.element.offsetHeight;
  while (gWidth > width * scale && gHeight > height * scale)
    scale *= 1.2;
  while (gWidth < width * scale || gHeight < height * scale)
    scale /= 1.2;
  return 900 / scale;
}

问题是这很糟糕......

它正在做的是获取图表尺寸(width, height)和屏幕尺寸(gWidth, gHeight)并循环遍历一个新的比例直到它到达右边数。

首先,它使比例变大,直到图表的至少一个维度乘以比例大于屏幕的一个维度。

然后循环返回以确保图表 * 刻度的两个维度至少比屏幕小一点。

我只想通过一次数学计算来执行此操作。也许通过计算贴身度然后向下舍入,但我不知道如何向下舍入到 1.2 的指数

-修复-

这是生成的工作版本...

fitScale = function (width, height)
{
  var wScale = graph.element.offsetWidth / width,
      hScale = graph.element.offsetHeight / height,
      snugg = wScale < hScale ? wScale : hScale,
      exp = Math.log(snugg) / Math.log(1 / 1.2),
      scale = Math.pow(1 / 1.2, Math.ceil(exp));
  return 900 / scale;
}

最佳答案

我的数学技能生锈了,如果我在这里偏离真理之路,请放轻松。

基本上,您想知道1.2y 次方等于某个给定数x。虽然 log 函数似乎没有用,因为它告诉你 e 的幂等于你的数字 x,还有一些疯狂的对数技巧z事实上,您可以使用它到达您想去的地方:

var y = Math.log(x) / Math.log(1.2);

很有可能 y 不是一个整数,我认为这是你想要的,所以如果你继续 Math.floor(y),您应该准备就绪。

关于Javascript 规模检查功能性能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15285373/

相关文章:

javascript - 如何通过在 webApp 中显示和创建指向存储在计算机中的本地文件的链接来在 Web 浏览器中查看本地文件?

javascript - 绑定(bind) src 时视频或 iframe 标签无法正常工作

PHP 数组输出到 JavaScript 函数

.net - "Spike"探查器?

javascript - MDN 示例(Math.random()): could it be parseInt() instead of Math. Floor()?

二进制值的 Python 字符长度

algorithm - 重复的递归排列

javascript - 如何进行 typescript 功能链接?

javascript - 使用 SumoSelect 的 Html 表单多个选择框,标记必填字段

c - 如何测量在 Pentium 4 处理器上运行时 C 算法消耗的功率?