2011-06-22 26 views
0

我剛剛完成我的腳本,使用flot和jquery。現在我的問題是,它在Opera和Firefox中速度很快,但在Internet Explorer中速度很慢(不出所料),這就是爲什麼我想知道是否有辦法讓我的腳本更有效率(換句話說,可能會刪除一些「for循環」等)?因此,如果有任何代碼大師那裏誰有一些空閒時間殺的,請幫助我,因爲我自己也是可怕的。在寫高效的代碼:P是否可以使此腳本更有效?

感謝這麼多提前=)

它可以發現 on this address

+4

如果你能解釋它應該做什麼等,而不是我們必須閱讀數百行代碼,這會有所幫助。 – Niklas

+0

您是否嘗試過使用IE8/9或Firefox中的JavaScript分析器(通過Firebug)分析您的代碼? –

回答

2

再提一些建議:

有人指出:

... $(this).attr('id'); 
... $(this).attr('name'); 

是昂貴的,你不需要$這裏所有,只需使用:

... this.id; 
... this.name; 

而且,使用.css(...)是一個巨大的浪費,使用一個類並將CSS放入一個樣式元素中。

您可以將參考文獻(例如$('#x'))存儲在關閉中。同樣,您不需要$,使用文檔直接獲取元素的效率會更加高效。的getElementById使,而不是:

$('#x').text(pos.x.toFixed(2)); 

你可以有:

x.innerHTML = pos.x.toFixed(2); 

它取代幾個功能與單個屬性訪問調用。基本思想是儘可能多地刪除jQuery,保持對事物的引用,而不是頻繁獲取它們,並使用直接的屬性訪問,而不是函數。

順便說一下,當我嘗試從jsFiddle javascript區域複製時,Safari會凍結。我不是那個網站的忠實粉絲。

+0

+1有用的考慮,使用jQuery非常實用,我忘記了大部分的東西都可以用基本的JS直接完成。大 –

1
for(k; k<datasets.length; k++){ 

每次執行循環接下來,您呼叫的length屬性,它的更好,如果你是在一個變量在循環的開始只保存,這樣的時刻:

for(var k, len = datasets.length; k < len; k++){ 

而且,這裏你是在浪費資源:

key = $(this).attr("id"); 
subsystem = $(this).attr("name"); 

只是施蒂希$(本)到一個變量,使每次使用$()創建通過元素的副本時間。只是這樣做:

var $this = $(this); 

而且使用$該從那裏來代替$(本),只能重複使用$(本)當這成爲一個不同的對象。

1

首先,使用jQuery選擇器,如果使用類名,那麼如果可以更具體地使用它,則效率更高。 e.g代替

var checkboxContainerFailed = $(".failedCheckboxes"); 

嘗試

var checkboxContainerFailed = $("#graph-table-bottom td.failedCheckboxes"); 

其次,它通常被認爲不如用[]符號來代替var subsystemNames = new Array();

第三,你在這裏的數據陣列中的尾隨逗號。這可能會導致IE的問題:

"test2-a4/", 
     ] 

最後,試圖通過JSLint任何錯誤運行整個事情。

相關問題