アルゴリズムのプロファイリングを既に行っていて、それが遅すぎると判断した場合を除き、パフォーマンスの最適化について心配する必要はありません。最初に動作するアルゴリズムを取得してから、必要に応じてプロファイリングします。
// Returns the index of the first difference between strings a and b,
// or -1 if the strings are equal. Case-sensitive.
function indexOfDiff(a, b) {
if(a === b) {
return -1;
}
var len = Math.min(a.length, b.length);
for(var i = 0; i < len; i++) {
if(a.charAt(i) !== b.charAt(i)) {
return i;
}
}
return len;
}
絶対にパフォーマンスが必要な場合は、「;」の既知の位置に基づいてヒューリスティックなアプローチを試すことができます。(あなたの例のように、文字とセミコロンが交互になっていることがわかっている場合は、他のすべての文字をチェックできます)。
または、非常に大きな文字列の場合は、再帰的な二分探索を試すことができます。1 つの文字列を半分に分割し、他の文字列の同等の部分文字列と等しいかどうかを確認します。等しい場合は、残りの半分を確認します。等しくない場合は、その文字列を半分に分割し、適切なサイズの部分文字列を絞り込んでチェックするまで、このプロセスを繰り返します。このアプローチははるかに複雑でエラーが発生しやすいため、最初に単純なアプローチを試してください。