2017-09-29 9 views
1

私は次のコードしている、私のカスタムテーブルに使用されるソートMozilla FirefoxのparseFloatはパフォーマンスの低下

​​

このコードを前処理は、Mozillaブラウザでは非常に不十分な行動、特にparseFloatは部になるようです。

オペラ

Preprocessing ended in 56.89500000000044 milliseconds. 
T1B: 35.88000000001557 
T2B: 4.690000000055079 
T3B: 8.65999999995438 

Internet Explorerの

Preprocessing ended in 372.7204875779862 milliseconds. 
T1B: 248.5273986186603 
T2B: 17.503554555074515 
T3B: 66.14627339602884 

エッジ

Preprocessing ended in 457.5451515628629 milliseconds. 
T1B: 320.98263165675325 
T2B: 9.163721063269804 
T3B: 91.9268633019874 
: さまざまなブラウザからの結果があります。

Google Chromeの

Preprocessing ended in 51.73499999999876 milliseconds. 
T1B: 33.16500000007545 
T2B: 4.495000000026266 
T3B: 7.229999999955908 

Mozilla Firefoxの(55.0.3(32ビット))

Preprocessing ended in 31678.250000000004 milliseconds. 
T1B: 31622.514999999778 
T2B: 17.620000000077198 
T3B: 21.96500000006563 

で何が起こっているのか!?このコードをmozillaのために修正するには?

cells[DURATIONTYPE].innerTextには、単純な浮動小数点数XX.XXが2つの小数点以下(つまり43.21)に丸められています。

答えて

4

DOM(activeTRTable.rows[i].cells[DURATIONTYPE].innerText)とではなく、のparseFloatにアクセスするのが遅いことを確認してください。

引用MDN(強調鉱山)https://developer.mozilla.org/en-US/docs/Web/API/HTMLTableElement/rows

テーブルのすべての行のライブHTMLCollectionを返しHTMLTableElement.rows読み取り専用プロパティ。

は、私はそれはあなたが財産をアクセスとしてを生成し、すべての回であなたのための準備が維持されないと仮定します。 DOMで直接作業するのではなく、自分のデータ構造内のすべてをキャッシュし、DOMを書き込み専用として扱うべきです。

編集:クイックフィックスとしてループの前にrowsプロパティをキャッシュしてみてください。ただし、cellsプロパティは同様に動作します。

+0

はい、あなたは部分的に正しいです。それはその部分によって引き起こされたものです。しかし、行をキャッシュすることは本当に助けに見えませんでした。代わりに、.innerTextを.innerHTMLに変更すると、魔法がかかりました。 Wohoo、前処理は37.97ミリ秒で終了しました。 – Smarty77

関連する問題