WEB相談室

Webページ作成に関しての何でも掲示板です。

タイトル:JavaScriptで、sprintf()

0:[投稿] はま [2003/11/30 01:49 ][環境:IE6, NN7 ]

JavaScriptでsprintfのようなものを作成しているのですが、パフォーマンスが悪くて
困っています。
どうにか速くなりませんでしょうか?

現在のソースは以下になります。
--------------------------------------------------------------------
function sprintf(str){
    var arg = arguments;
    for(var i=0; i<arg.length; i++) if(arg[i]==undefined) arg[i] = ""; // undefined は""に変換する。
    i = 1;
    return str.replace(/(([^\\]?)%(s|d))/g, function(s, a1, a2){ return a2 + arg[i++]; });
}
--------------------------------------------------------------------

なるべく速く動かすため、%sと%dだけです(%sも%dも同じ意味です。数値、文字と分けてはいません)。
このソースで以下のように動かした場合、

time = new Date().getTime();
for(var i=0; i<50000; i++){
    s = sprintf("%d/%d/%d(%s)", 2003, 11, 30, '平成');
}
alert(sprintf("%d --- %s", new Date().getTime()-time, s));

私の環境では6秒強です。sprintfを使わずにやった場合は0.5秒です。
圧倒的に後者の方が速いのですがsprintfのほうがソースが見やすく、
メンテナンスが楽になるため、この方法を使いたいのですが速くする
秘訣はないでしょうか?


1:[回答] Jankowski [2003/11/30 03:20 ]

ご存知かもしれませんがこのサイトにサンプルあります。
http://www.onicos.com/staff/iz/amuse/javascript/expert/

自分にはsprintfに関する知識がないので、どうにもアドバイスのしようがありません(汗


2:[回答] Boo [2003/11/30 10:24 ]

ここにもサンプルあります
http://www.gac.jp/article/index.php?stats=question&category=24&id=10747&command=msg
参考にしてください。


3:[回答] はま [2003/11/30 10:43 ]

回答有り難うございます。
スピードを問題にしているのですが・・・。
%sだけのものです。%dは意識的に分かりやすくするため使い
ますが、%sと動作は同じです。

回答(必須): 状態:

お名前(必須):

e-mail:

URL:




[戻る]

ChaichanPAPA's World