2013-03-08 114 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),你應該全部設置。