私は現在、行を解析するために複数のケースをテストしています。当然のラインがたくさんありますV8とのPerfomanceの比較
"dHdX5jOa7ww9cGsW7jQF=dHdX5jOa7ww9cGsW7jQF=dHdX5jOa7ww9cGsW7jQF=dHdX5jOa7ww9cGsW7jQF"
、と私はキーを抽出する必要があり、かつ値:
各行には、そのようにフォーマットされます。
キーは、最初の "="で区切られています。 キーには "="文字はありません。
値は、最初の "="記号の後の文字列の残りの部分です。このためだから、
結果がでなければなりませんexemple:
{
key: "dHdX5jOa7ww9cGsW7jQF",
value: "dHdX5jOa7ww9cGsW7jQF=dHdX5jOa7ww9cGsW7jQF=dHdX5jOa7ww9cGsW7jQF"
}
ここで我々は、複数のソリューションを繰り返すことができますから:
// the first one is not very efficient with split splice join method
function first(line) {
const lineSplit = line.split('='),
key = lineSplit[0],
value = lineSplit.splice(1, lineSplit.length).join('=');
return {
key,
value
};
}
// the second one execute only what i want to do
// with built-in String prototype's functions
function optimized(line) {
const index = line.indexOf("="),
key = line.substr(0, index),
value = line.substr(index + 1, line.length);
return {
key,
value
};
}
// i tried to code the logic myself
function homemade(line) {
const len = line.length;
let value = "", key = "", valued = false;
for (let i = 0; i < len; ++i) {
const char = line[i];
if (valued === false) {
if (char !== '=') {
key += char;
} else {
valued = true;
}
} else {
value += char;
}
}
return {
key,
value
};
}
// and next recode substr and foreach built-in to implemant the same
// function but with homemade substr&foreach
String.prototype.substr2 = function(from, to){
let str = "";
for (let i = from; i < to; ++i) {
str += this[i];
}
return str;
};
String.prototype.indexOf2 = function(occ){
const len = this.length;
for (let i = 0; i < len; ++i) {
if (this[i] === occ) {
return i;
}
}
return -1;
};
function overload(line) {
const index = line.indexOf2("="),
key = line.substr2(0, index),
value = line.substr2(index + 1, line.length);
return {
key,
value
};
}
そしてjsBenchで結果出来上がり:
[I」にGoogle Chromeバージョン59.0.3071.104(公式ビルド)(64ビット)を使用しています。
あなたは、私は何が起こっているか理解していないブラウザin this jsBench
でこれらの関数の結果をチェックアウトすることができます。
組み込みの文字列操作は明らかにはるかに高速である理由:私は
私の質問がある...私は(ネイティブに必要なだけのコードを書いたので、それが可能にすることはできません想像)、このような他の詰め込みますか?
なぜこの繰り返しの文字列連結が不適切ですか?
代替手段はありますか?
組み込みの文字列操作を使用します。それらの 'return'ステートメントは' return {[key]:value} 'でなければなりません; '投稿されたJSBenchページは私のためには機能しません。彼らはNaNを呼ぶ。 – Pointy
あなたの特定の質問が何であるかは明確ではありません。大幅に異なる実行が必要な実装がありますか? – pvg
まあ、組み込みの文字列操作は、明らかに、これらの手作りの非効率的な繰り返し文字列の連結よりもはるかに高速です。 – Bergi