2014-03-25 17 views
0

我們正面臨着當我們點擊分組中的「全部」鏈接時,我們在降有很多值(大約100個值)跌多選下拉組件性能問題非常緩慢。Mootools的多選檢查所有在Internet Explorer

這是問題在IE8只發生在其他瀏覽器工作正常。我們初步分析後,我們發現,

以下行multiselect.js文件的功能changeItemState導致在IE8這個問題。能否請您身邊提供給我們的任何工作,爲這個

monitor.set('html', ' 
+ this.changeMonitorValue(item.getParent()) + 
); 
monitor.title = this.getHoverTitle(item.getParent()); 
+0

你可以讓一個jsFiddle os JSBin重現你的問題?順便說一句,爲什麼quotes和concat'+'登錄'this.changeMonitorValue'? – Sergio

回答

1

不知道,當你已經刪除了實際的代碼,但是當你說你有100個價值觀 - 尤其是干將 - 這很可能是一個問題,在IE8或更低。

javascript中的字符串是不可變的。這意味着如果你需要連接100個字符串,它會創建一個新的字符串,向它添加下一個並清理100次。這是不是在IE很高性能,因此很多用來做而不是人:

var foo = 'a' + 'b' + 'c' + 'd', // faster in modern and mobile browsers 
    bar = ['a','b','c','d'].join(''); // faster by ~50% IE7, IE8 

http://jsperf.com/string-concat-vs-array-join-10000/9

然而,陣列加入訣竅是在移動設備中,Andorid的和現代的瀏覽器慢。

另一種優化可以爲您添加的形式操作(模型)中導出電流值到一個數組的變化處理,從而否定了需要得到100對那些在一個去提交事件。由於節點的父節點是不可變的(有可能),因此無需一直前往item.getParent(),您可以預先做一個節點,或者直接引用item.parentNode以避免函數調用。

changeMonitorValue源,因爲它很可能次優的,可以在那裏舉行的優化。我希望你使用http://mootools.net/forge/p/mutiselect

如果是這樣,https://github.com/mlazz/MultiSelect/blob/master/Source/MultiSelect.js可以被優化了很多。然而,這是插件作者的東西。

有創意:)