2012-01-10 1 views
0

パフォーマンスJavaScriptで著者はハッシュ文字の前に文字列内のすべてのものを削除するには、次のコードを使用しています(Tuts +メンバー<a href="http://tutsplus.com/tutorial/building-a-simple-css-selector-engine/" rel="nofollow">here</a>のための目に見える)CSSセレクタエンジンを構築するためのチュートリアルで

// sel = "div#main li" 
if (sel.indexOf("#") > 0) { 
    sel = sel.split("#"); 
    sel = "#" + sel[sel.length -1]; 
} 

私はJavaScriptの初心者ですが、私は初心者プログラマーではありません。そして、これは大砲で蟻を殺すような圧倒的な操作のようです。多分すでにindexof()を使用して、if文で囲まれていない

sel.substr(sel.indexOf("#")); 

:私のようなものを使用すると思います。だから、著者がJavaScriptに関する本を書いたとしても、私が気づいていない秘密があるはずです。前者のコードを使う利点はありますか?多分パフォーマンスで?

+3

'split()'のオーバーヘッドがあなたが示唆しているものよりも小さい場合、私は気になります。悲しいことに、JavaScriptの本とチュートリアルがたくさんあります。 (私はあなたのチュートリアルについては何も知らないので、これはちょうど異常であるかもしれませんし、貨物カルトの伝統の結果かもしれません)。 – Pointy

+0

ああ:[このウェブサイト](http:// jsperf .com)いくつかの簡単な比較パフォーマンステストを行う。 – Pointy

+0

あなたの使いたい*特定のページで両方向にプロファイルしてください。どんな状況にも耐えることができる、固くて速いルールはありません。 – Piskvor

答えて

1

通常、さまざまな実装間でさまざまなパフォーマンスの違いがあるため、テストが必要になります。しかし、パフォーマンスが本当に考慮されるなら、私は.split()が遅いと確信しています。 「多分、if文で囲まれていない...」

しかし、私はあなたがそうであるように、あなたがインラインでそれを持ってshould'tと言うでしょう。 .indexOf()は一致が見つからない場合は-1を返します。これにより、.substrは文字列の最後の文字を返します。

var sel = 'tester'; 
sel.substr(sel.indexOf("#")); // "r" 

ので

var sel = 'tester', 
    idx = sel.indexOf("#"), 
    sub; 

if(idx !== -1) { 
    sub = sel.substr("#"); 
} 
0

私はチュートリアルがやろうとしているかわからないんだけど、sel="div#main li#first"は、有効なCSSで、そのコードが#firstsel.substr(sel.indexOf("#"));#main li#firstを返す返します。私は推測していますが、それはCSSセレクタを逆戻りして作業するループで動作する可能性があります。

-1

Real life CSS selector enginesはすべてのために正規表現を使用して、これが最善の方法であるように思わ... if文を保ちます。言語は文字列操作のための強力な専用ツールを提供します。なぜそれを使用しないのですか?あなたの場合:

sub = sel.replace(/^.+?#/, "#") 

あなたの仕事は速く、余分な混乱を伴わない。

パフォーマンス?私たちのアプリケーションは時間が重要ではないので、javascriptでは通常はあまり気にしません。フォームを検証したり、divをフェードインさせるのに0.1秒か0.01秒かかるかどうかは誰も気にしません。

関連する問題