IT戦記 このページをアンテナに追加 RSSフィード Twitter

2006-09-24

複雑で重くなった JavaScript を超高速化する方法3

8 ヶ月前に setInterval 書き換えのネタで作ったやつ

ふと

ちょっと設計変えたらすごく速くなる気がして、作り替えてみた。

でも、作ってみたら clearInterval がちょっとだけ速くなったけど、正直そこまで変わらなかった。

でも、設計はきれいになったと思うので公開します。

ダウンロード

http://sample.ecmascript.jp/setInterval/setInterval03.js

以前のもファイル化した

使いかた

すべてのスクリプトより前に読み込む

<script src="setInterval0x.js" type="text/javascript"></script>

効果

setInterval を複数使っている場合はかなり高速化できます。

全部、ご自由にどうぞ。

brazilbrazil 2006/09/24 18:18 (function(){...})()でくくると、グローバル占有も少なくなって、ローカル変数になって速くなったりするのかしら。
逆にスコープの中に入っちゃうから遅くなるか...。

amachangamachang 2006/09/25 02:34 スコープが深くなると実行時にアクティベーションオブジェクトの初期化が重くなっちゃうんですよねー。だから全体を一個のスコープでくくると中の関数リテラルが全体的に重くなりそうです。

sinsin 2006/09/25 22:18 あまりJavascriptは知らないので間違っているかもしれませんが.

複数のスレッド(タイマ)を1つのスレッドにまとめて
スレッド切り替えのオーバヘッドをなくすということみたいですね.

たぶん本来ならDOMのタイマ実装自体このような単一スレッド管理
になっているべきだと思いますが.
気になったので無謀にもfirefoxのコードをざっと見たのですが,

http://koders.com/cpp/fidD4968FAFBED1DBE669987706E130C325A4AB5B0D.aspx?s=SetTimeoutOrInterval
ここのSetTimeoutOrIntervalの辺りから適当にたどって見ていくと
new nsTimeout, nsITimer, nsIThread, NS_NewThread,PR_CreateThread
とかでてくるのでたぶんタイマ毎にいちいちスレッド起動しているみたいですね….

nikonikonikoniko 2007/04/01 18:53 ちょと使ってみました。
http://www.nikoniko-comment.com/

splash Dsplash D 2007/04/25 11:50 XHTMLのscriptタグを一行で済ませるために、僕の作ったライブラリへprototype.jsやscript.aculo.usなどを読み込むようにしているので、どうしても重くなってしまう部分がありましたが、このスクリプトをライブラリの前半で読み込むと、瞬時に僕のライブラリを読み込めるようになりました。すごいです!

kenichikenichi 2007/06/14 05:16 このライブラリsetIntervalだけでsetTimeoutには対応していない理由って
何かあるのでしょうか?

kaorinkaorin 2007/08/01 18:16 自分のレベルでは、処理内容を完全には理解できていませんが、よさげなので使わせていただきます!

o-qo-q 2007/10/26 03:16 意味も分からず使ってみましたが結構速くなった気がします!
JavaScriptはまだまだ修行中の身ですが仕組みを理解できるよう頑張ります。

haolahnhaolahn 2007/11/19 02:23 使いどころがイマイチ理解できていませんが、
勉強がてら使わせていただきます。

mtmt 2008/01/22 09:48 使わせて頂きました。早くなった気がします。
ありがとうございます。

takasantakasan 2008/02/18 10:34 試しに使わせていただきます。

SugarCRMがめちゃくちゃブラウザ負荷が高くて、遅いんですよ。。。。

ありがとうございます。

nao-ponnao-pon 2008/08/20 13:53 はじめまして。

遅ればせながら、xpWiki という XOOPS の PukiWiki モジュールの JavaScript に組み込んでみました。

ありがとうございます。 :-D

hagino_3000hagino_3000 2008/09/11 13:49 試しに使わせてもらいます。

firefox2でガクガクしてきたので。

genta0406genta0406 2008/09/25 21:09 JavaScriptが重くて困っていたのでありがたく使わせていただきます。

http://www.g-styles.com/

ishikawamishikawam 2009/01/29 13:06 http://sample.ecmascript.jp/setInterval/setInterval03.js
を初め、ファイル庫へのリンクが切れているようです。。

shinriyoshinriyo 2012/01/12 20:35 試してみたかったですがリンク切れでしたね

はてなユーザーのみコメントできます。はてなへログインもしくは新規登録をおこなってください。