文字列でsubstrは遅かった事に今更気付く


ものすごーーーく単純に
substrは遅いって事に気付いた。

ほんとただこれだけの事なんだわサ。

[javascript]

//—————————————————————-
//    @bref get windows special folder
function getSpFolderPath(dir_name){
var wsh = WScript.CreateObject(“WScript.Shell”);
return wsh.SpecialFolders(dir_name)
}

var gobj = {};
gobj.folder = getSpFolderPath(“Desktop”);

//    logger
function log(str, file_name){

var file_name = file_name || “default”;
WScript.Echo(str);
var cmd =
[
“cmd.exe /c echo”,
str,
“>>”,
gobj.folder+ “//” + file_name + “.log”
]

//    loging
WScript.CreateObject(“WScript.Shell”).Exec(cmd.join(” “))

}

//—————————————————————-
//    stringのあれのテスト

var dt = new Date();
var str = “asdfwert”;
var loop = 10000000;
var val = “”;

log(“substr”);

for(var i = 0; i<=loop; i++){
val = str.substr(0, 5);
}

log(new Date() – dt);

log(“substring”);
dt = new Date();
for(var i = 0; i<=loop; i++){
val = str.substring(0, 5);
}

log(new Date() – dt);

log(“indexOf”);
dt = new Date();
for(var i = 0; i<=loop; i++){
val = str.indexOf(“asdfw”);
}

log(new Date() – dt);

log(“search”);
dt = new Date();
for(var i = 0; i<=loop; i++){
val = str.search(“asdfw”);
}

log(new Date() – dt);

log(“charAt”);
dt = new Date();
for(var i = 0; i<=loop; i++){
val = str.charAt(0);
val = str.charAt(1);
val = str.charAt(2);
val = str.charAt(3);
val = str.charAt(4);
}

log(new Date() – dt);

log(“charCodeAt”);
dt = new Date();
for(var i = 0; i<=loop; i++){
val = str.charCodeAt(0);
}

log(new Date() – dt);

log(“length”);
dt = new Date();
for(var i = 0; i<=loop; i++){
val = str.length;
}

log(new Date() – dt);

log(“slice”);
dt = new Date();
for(var i = 0; i<=loop; i++){
val = str.slice(0, 5);
}

log(new Date() – dt);

log(“replace”);
dt = new Date();
for(var i = 0; i<=loop; i++){
val = str.replace(“asdfw”, “xxxxx”);
}

log(new Date() – dt);

log(“split”);
dt = new Date();
for(var i = 0; i<=loop; i++){
val = str.split(“f”);
}

log(new Date() – dt);

[/javascript]

結果はこちら!
単位はミリ秒

substr
4936
substring
4779
indexOf
3299
search
25394
charAt
19793
charCodeAt
2766
length
1688
slice
4711
replace
5955
split
11605

つまーり!

なにかの文字評価で、
探す、抜き出す、編集するって事をする際は
出来るだけ、substrとかsplitとかreplaceを避けた方がイイって事さ!

ある意味では、
文字列に一定のルールがあるなら
そのルールにのっとって、sliceやらをindexOfを駆使したり。
逆に言えばルールを設ければ、操作速度は格段に上がる!

この大容量時代だからこそ、
ちょっとした工夫で格段に処理が変わるのかもね。

まぁ~~、
今更気付いてんじゃねーよとか
んなもん考えなくてもわかるっしょとか
ひじょーーーーにきびしーーー
ツッコミが入りそうだけど・・・

ゆるせ・・・

以上今日のチップスでした

Leave a comment

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください