IT戦記

プログラミング、起業などについて書いているプログラマーのブログです😚

IE でオブジェクトの配列のソートを 10 倍速くする

この記事の内容は嘘です。間違えてました。申し訳ありません。

謝罪

すみません。この記事の内容では並び替えが行われないようです。手元の環境では toString を見ていて並び替えられていたようです。指摘してくださった id:nanto_vi さんご指摘ありがとうございます。




















以下のようにプロパティ値で並び替えたいとする。

var Klass = function(order) { this.order = order };

var array = [new Klass(3), new Klass(1), ....];

array.sort(function(a, b) { return a.order - b.order });

こうすると、 10 倍近く速くなる

var Klass = function(order) { this.order = order };

Klass.prototype.valueOf = function() { return this.order };

var array = [new Klass(3), new Klass(1), ....];

array.sort();

でも、 Firefox で動かないのでこうする

var Klass = function(order) { this.order = order };

Klass.prototype.valueOf = function() { return this.order };

var array = [new Klass(3), new Klass(1), ....];

array.sort(/*@cc_on);//*/function(a, b) { return a.order - b.order });

注意点

Klass に toString があるとそっちを見てしまうので toString があったらダメ

まとめ

昔 mala さんが言っていたように IE の気持ちになれば、 IEボトルネックが分かる。



間違えてました、まだまだ IE の気持ちを分かっていなかったようです。