前に作ったこれ
以前は読み込みが遅すぎて数十KBのファイルの読み込みがやっとだったのをかなりスピードアップさせました!!
なんと30MBでも1秒かかりません
766msec/22files(30134280byte)
以前は読み込みが遅すぎて数十KBのファイルの読み込みがやっとだったのをかなりスピードアップさせました!!
なんと30MBでも1秒かかりません
766msec/22files(30134280byte)
遅かった部分はUint8Arrayに読み込んだデータを入れている箇所
数十KBと言っても10,000はループするしそういうもんなのかなーと思ってたのですが、普通の配列のループで1万回すのにそんなに掛かるわけがない!それに型付き配列って高速になるとかどこかで書いてた!
ということでUint8ArrayとArrayで適当なデータで比較してみました
するとUint8Arrayの方が明らかに早い
じゃあなんで遅いんだ?と思って色々してたら原因を発見
file.sizeとdata.lengthは両方共同じ値なのでどっちでもOK
file.sizeをループで何回もアクセスさせてみるとすっごく遅い、遅すぎる!
.でプロパティアクセスするのはハッシュ計算いるから変数に代入しといたほうがいいっていうのは聞いたことあるけどdata.lengthもプロパティアクセスしてるし普段ここまで遅くならないのになんで??
理由はよくわからないのですが、file.sizeにはアクセスしないほうが良さそう
そんなわけで、ループ条件をfile.sizeからdata.lengthに変えるだけですっごく高速化しましたー
最初に書いたとおり、私の環境だと30MBが1秒弱でロードできます
使い道が広がったということで微妙な機能追加やデザイン変更もしました
ただ、1ファイルが80MBくらいのを読み込もうとするとブラウザがクラッシュしました
原因は不明ですがそれが限界ってこと?
50MB程度では問題なくできます
複数のファイルの合計だと300MB超えてもまだ大丈夫でした
リンク:
http://blog.livedoor.jp/netomemo/hp/tool/filedivcom.html
数十KBと言っても10,000はループするしそういうもんなのかなーと思ってたのですが、普通の配列のループで1万回すのにそんなに掛かるわけがない!それに型付き配列って高速になるとかどこかで書いてた!
ということでUint8ArrayとArrayで適当なデータで比較してみました
するとUint8Arrayの方が明らかに早い
じゃあなんで遅いんだ?と思って色々してたら原因を発見
をfor(var i=0; i<file.size; i++){uint_array[i] = data.charCodeAt(i);}
にすると早くなるfor(var i=0; i<data.length; i++){uint_array[i] = data.charCodeAt(i);}
file.sizeとdata.lengthは両方共同じ値なのでどっちでもOK
file.sizeをループで何回もアクセスさせてみるとすっごく遅い、遅すぎる!
.でプロパティアクセスするのはハッシュ計算いるから変数に代入しといたほうがいいっていうのは聞いたことあるけどdata.lengthもプロパティアクセスしてるし普段ここまで遅くならないのになんで??
理由はよくわからないのですが、file.sizeにはアクセスしないほうが良さそう
そんなわけで、ループ条件をfile.sizeからdata.lengthに変えるだけですっごく高速化しましたー
最初に書いたとおり、私の環境だと30MBが1秒弱でロードできます
使い道が広がったということで微妙な機能追加やデザイン変更もしました
ただ、1ファイルが80MBくらいのを読み込もうとするとブラウザがクラッシュしました
原因は不明ですがそれが限界ってこと?
50MB程度では問題なくできます
複数のファイルの合計だと300MB超えてもまだ大丈夫でした
リンク:
http://blog.livedoor.jp/netomemo/hp/tool/filedivcom.html
コメント一覧 (2)
原因は不明ですがそれが限界ってこと?
恥ずかしいのうwww
パソコンの環境は一緒なのでブラウザが許可する最大値が変わったんでしょうね
コメントする