Javascriptの命名規則


12

私はJavaのバックグラウンドで、JavaScriptを初めて使用しています。次の例のように、単一文字のパラメーター名を使用する多くのJavaScriptメソッドに気付きました。

doSomething(a,b,c)

好きではありませんが、仲間のJavaScript開発者が、これはファイルサイズを小さくするために行われ、JavaScriptファイルをブラウザーに転送する必要があることに気付きました。

それから私は別の開発者と話をしていることに気づきました。Firefoxがページをより速くロードするために変数名を切り捨てる方法を教えてくれました。これはWebブラウザーの標準的なプラクティスですか?

JavaScriptでプログラミングする際に従うべきベストプラクティスの命名変換は何ですか?識別子の長さは重要ですか?その場合、どの程度ですか?


13
ブラウザが変数名を変更することは非常に疑わしい。の存在下ではeval、それは安全でevalはありません(ええ、恐ろしいですが、それは標準の一部であり、最適化のための標準的なコンパイルを捨てることはありません)そして、トラフィックを減らすために少しでも助けにはなりません-あなたはまだ完全なファイルを送信します。

4
開発者が短い変数名の利点について議論しているのをよく見ます。聞いてはいけません。これはほとんどの場合、「私は良い名前を発明するにはあまりにも親指です」または「私はあまりにも多くの文字を入力するのが面倒です」という言い訳です。
ドックブラウン

@DocBrown:私もそれが気に入らなかった。私はJavaScriptの専門家ではないので、ベストプラクティスを知りたいと思っています。
-ManuPK

結局、意味のあるメソッド名を使用するために、おそらく50〜100KBの追加データについて話していましたか?100KBで速度の問題が発生した場合、解決しようとする価値はありません。十分な大きさのユーザープールではその問題が発生しないためです。
ラムハウンド

回答:


26

開発者自身が短い変数名を使用していないことがわかります。開発中は、意味のある詳細な変数名を使用しています。

次に、ビルド/リリースプロセスで、Webサイトを高速化するためのベストプラクティスとして、ファイルのサイズを最小化する目的で、作成したコードをミニファイヤ/ 難読化ツールに実行します。パフォーマンス重視する場合、これはオプションの手順です。ほとんどの小さなWebサイトはこれを行いません。

あなたは、開発者として、縮小/難読化プロセスをにするべきではありません。読みやすく、意味があり、十分に文書化され、適切に構造化されるようにコードを記述します。次に、パフォーマンスを重視する場合(オプション、忘れないでください!)、リリースプロセスにミニファイヤ/難読化ツールを導入して、コードを最小化し(空白、改行、コメントなどを削除)、難読化します(変数を短くするなど)名前)。難読化と縮小化を説明する優れた記事はこちらにあります

さらに、Desktop FireFoxは変数名periodを切り捨てません。変数名の切り捨ては、ページのダウンロードを高速化するためにあります。FireFoxがファイルを取得するまでに、ファイルは既にダウンロードされているため、ダウンロードする必要はありません。あなたの友人はこれをしているプラ​​グインを実行するかもしれません。その場合、それを役に立たないのでアンインストールするように彼に言ってください。

完了するために、一部の(モバイル)ブラウザーには、要求したリソースの応答をインターセプトし、それらを圧縮する(JavaScriptファイルの縮小化を含めることができる)仲介サーバーを使用するオプションがあります。圧縮はサーバーで(つまり、ページをダウンロードする前に)行われるため、ファイルを既にダウンロードした後(ブラウザーではなく、小さなファイルをダウンロードすることの潜在的な利点)に注意してください(質問で提案)。このようなモバイルブラウザには、Opera Mini、および新しいバージョンのGoogle Chrome(少なくともiOSでは、Androidについては不明)が含まれます。詳細については、こちらをご覧ください


11

いいえ、すべてのブラウザがJavaScriptを自動的に短縮してパフォーマンスを向上させるわけではありません。

ただし、JavaScriptの場合、難読化ツールと呼ばれるツールやこの目的のために設計されたshinker(またはコンプレッサー)と呼ばれる他のツールがあるため、コードの可読性/保守性を犠牲にして処理速度やセキュリティを向上させるべきではありません。

事前に最適化しないでください。ページの読み込みが十分に速く、JavaScriptに過敏なコンテンツが含まれていない場合は、心配する必要はありません。変数に意味のある名前を付けます。コードの可読性は保守性にとって非常に重要であり、もしあったとしてもめったに犠牲にされるべきではありません。

優れたJavaScriptコーディング規約への参照が必要な場合は、これらを使用することをお勧めします


2

早すぎるファイルサイズを心配しないでください。常に懸念事項ですが、読みやすさと保守性がより重要です。

とはいえ、おそらくスクリプトの縮小版(たとえば、YUI Compressor経由)を使用する必要があります。

一般的なWeb開発のベストプラクティスに興味がある場合は、すべてのプログラマーがWeb開発について知っておくべきことを読むことをお勧めします。


1

JavaScriptで長い間働いていました。

すべての変数にハンガリー語表記法を使用する必要がある命名基準がありました。

それはうまくいくようでした。私はそれを使うことに反対するケースがあることを知っていますが、それは私たちにとってはうまくいきました。特に、ものを見つける必要がある巨大なJavaScriptファイルがある場合。

時期尚早に最適化することには注意します。あなたは実際にはまったく速く実行されない乱雑なコードで終わる可能性が非常に高いです。


5
ハンガリー記法?それは古い学校です。ハンガリー記法は古い開発リリックであり、やがて推奨されなくなりました。
スモークフット

2
私は少しそれを使用する傾向がありますが、jqueryによってラップされる値に対してのみ、$で開始します。ハンガリーの表記法の問題は、人々がプログラムの意味論ではなく「int」対「String」の観点からあなたにタイプすることを伝えることです
ザカリーK

「特に、ものを見つける必要がある大規模なJavaScriptファイルがある場合」 - 私はあなたを聞く。しかし、ハンガリーの表記法は単なる絆創膏です...長期的には助けにはなりません。何かの種類を変更する必要があるが、すべての変数プレフィックスを変更する時間がないときに混乱します。これらすべてを自動化することで、GWTが独自のIMOに参加します。
-funkybro

1
私は、言語の緩やかに型付けされた側面を「壊す」という表記法を使用して必ずしも購入するわけではありません。確かに、タイプを変更するときは名前を変更する必要がありますが、とにかくそれはあなたがしていることを追跡できるようにするために良いことです。ofい点がいくつかあることは知っています。しかし、大まかに(私は数十万行のコードを話している)プロジェクトで緩く型付けされた言語で作業したことがある場合、特定のインスタンスでより速く道を見つけるのに役立ちます。日付が付けられているなどと言っても、OPがやろうとしている中核的な問題に実際には対処していません。
アランデリモン

1
ハンガリーの表記法は、人々がその理由を本当に理解せずにすぐに却下するものの1つです。それはgoto、人々が「gotoを使用しない... gotoを使用しない...」というマントラを不注意に繰り返すのと同じカテゴリーに入る方法であることがわかりました。現実には、ツールキット内の単なるツールです。他のツールと同様に、便利な状況とあまり役に立たない(または有害でさえある)状況があります。誰かが木片をハンマーで見ようとして悪い経験をした後、「ハンマーを使わないで、もっと良いものを見た!」と宣言したようなものです。。抜本的な一般化は常に間違っている
-MattDavey

1

識別子の長さは関係ありません。他の人が言ったように、実稼働環境ではスクリプトのダウンロード時間を短縮するためにMinificationを使用できます。実際、特にJavaScriptは風変わりな言語であり、長い間JavaScriptが仕事を成し遂げるための単なるものとして無視されてきたため、許容可能なコーディング/命名規則に従う必要があります。命名規則の場所を探している場合は、Google JavaScriptスタイルガイドが適しています。それは示唆しています、

  • functionNamesLikeThis、たとえば、getCashbackData(){}
  • variableNamesLikeThis、たとえば、var alertInterval = 10;
  • ClassNamesLikeThis、たとえば、var CustomerOrder = {getOrderLines:function(){}}
  • EnumNamesLikeThis、たとえば、var ColorOfChoice = {White: "#FFFFFF"}
  • methodNamesLikeThis、たとえば、var CustomerOrder = {getOrderLine:function(){}}
  • SYMBOLIC_CONSTANTS_LIKE_THIS、たとえば、var EPOCH_UNIX = "01011970"

リンクを追加する以外に何かありますか?ダグラス・クロックフォードとは誰なのか説明さえしません。
ラムハウンド

0

「クリーンコード開発者」の哲学に腹を立てています(また、上記の投稿から、変数名のサイズを小さくすることでパフォーマンスに影響を与えないことがわかったため)、アドバイスしかできませんでした。

  1. 適切なオートコンプリート機能とインテリセンス機能を備えた、aptana、netbeans、eclipse(すべて無料)、または多数の商用製品(無料ゲームがあれば、 JetBrainsの製品を調べてください)
  2. コメントが不要になるようにコードを記述してください。つまり、書く代わりに

    getXy(e) { return [e.pageX, e.pageY ] }

    それは本当に何でも意味する可能性があります(特にjsのような狂気の緩く型付けされた言語では;)

    getPageCoordinatesFromEvent(event) { 
        return [event.pageX, event.pageY ];
    }

    優れたIDEでは、通常、変数名を2回入力することは決してありません。2、3秒で数文字を入力し、オートコンプリートからEnterキーを押します。自分ですべての文字を入力することを主張する場合、とにかく良いIDEはいずれにせよタイプミスを通知します。これは非常に表面的な例にすぎないため、(批判の形式としてではなく、正直な推奨として)強くお勧めします

  3. Robert C.Martinの「Clean Code」やHunt / Thomasの「Pragmatic Programmer」を入手して、この種の質問を二度と聞かないでください。 -、および(ミニファイを含む)開発プロセスの一部をビルドし、楽しい部分に集中して、優れた機能を果たす明確に理解可能なコードを記述します。

PS最先端のjavascriptコードの開発に慣れる必要がある場合は、上記の「Pro Javascript Techniques」に関するJohn "Mr. jQuery" Resigの本をご覧ください。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.