2013-03-08 60 views
1

所有合适的人,我有轻微的性能瓶颈。规模的Javascript检查功能性能

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

-fix-

下面是导致工作版本的指数...

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; 
} 
+0

这就是,上帝为什么造数以及布兰登·艾克取得了'log'功能。 – ultranaut 2013-03-08 02:02:21

+0

是的,但我会如何使用它们? – 2013-03-08 02:04:00

+0

好地狱,这看起来正确的。我知道必须有一种方法。为什么更多的人不知道如何做到这一点? – 2013-03-08 02:06:37

回答

2

我的数学技能是生锈的,所以如果我在这里徘徊在真理之路上,就容易了。

基本上你想知道什么力量1.2y等于某一给定数量x。虽然log功能似乎无法有帮助,因为它会告诉你什么权力e将等于你的电话号码x,一些疯狂的对数的skillz你其实可以用它来得到你想去的地方:

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

赔率相当不错,y将不会是一个整数,我认为你想要的是,所以如果你继续前进并且Math.floor(y),你应该全部设置。