【问题标题】:Javascript scale check function performanceJavascript规模检查功能性能
【发布时间】:2013-03-08 01:52:22
【问题描述】:

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

基本上,我有一个由屏幕 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;
}

【问题讨论】:

  • 这就是为什么上帝创造了对数而 Brendan Eich 创造了log 函数。
  • 是的,但我将如何使用它们?
  • 好吧,看起来不错。我知道一定有办法。为什么更多的人不知道如何做到这一点?
  • 那么如何使用对数函数来找到我的体重秤?

标签: javascript performance math loops exponent


【解决方案1】:

我的数学技能已经生疏了,所以如果我在这里偏离了真理之路,那就放轻松吧。

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

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

y 不是整数的可能性很大,我认为这是你想要的,所以如果你继续前进,Math.floor(y),你应该准备好了。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-25
    相关资源
    最近更新 更多