2012-08-07 4 views
5

に日付/時刻の建設を最適化していない、我々はそうのように、現在の日付/時刻を表す数値を得ることができます次のようになります。なぜGoogleはJavaScriptで彼らのフロントページのJavascript

var g = +new Date; //11 bytes shorter 
:これを行うの

var f = (new Date()).getTime(); 

最もコンパクトな方法は、以下のコードに反映されています(ここで働いているのを参照してください)

Googleのフロントページのソースコードを検索すると、11回使用される2番目のコンベンションが見つかります。したがって、Googleが毎回11バイト(合計121バイト)を節約できたようです。

圧縮とキャッシングはこれを軽減する役割を果たすでしょうが、確かにGoogleがこの単純なスイッチを作る価値があります。

Amazonのフロントページコードとこれを比較し、第3回目のコンベンションを使用します(すべての場合ではありません)。

Googleはなぜこの最適化に興味がありませんか? 121バイトは私たちの大半にとってはピーナッツですが、私は彼らがフロントページの最後のすべてのパフォーマンスを圧迫することに興味があったでしょう。

+0

閉じる投票について何が分かりませんか? Google *(または誰か)が何かをしている理由を尋ねると思うので、もっと明確にするために編集して幸いです –

+0

正しい質問は「長い構文の利点は何ですか? –

+0

注: 'document.getElementById'は単独で30回出現し、さらに多くのdom機能があるため、これらを短くすることで〜500-1000バイトを簡単に保存できます。 –

答えて

4

私は、可読性があり、限界的なバイト節約よりも保守性が良いと言います。 また、最初の2つのオプションは将来の証明ですが、3つ目のオプションは、エンジン(Rhino、Nodeなど)全体で変更または動作が異なる実装の詳細です。

あなたの例の第四可能性が関数に呼び出しをラップすることです:

var now = function() { 
    return (new Date().getTime()); 
} 

はもちろん、これはほんの数バイトを保存しますが、少なくとも数回、それを呼び出した後。

+0

第3のオプションはどのように実装固有ですか?私は、DateTimeを数値にキャストするときの動作はECMAScriptで指定されると考えていました。それを言って、私は見ていない... :) –

+0

私はそれが変更される可能性があり、コンテキストに基づいてすべてを自動的にキャストする現在の実装に固有であると言いました。これは明らかにすべてのJSパーサーで動作しますが、いくつかの最適化のために厳密に型指定されたパーサーはこれを別々に処理しないと言う人がいます。しかし、そうですね、私はそれをより明確にすることができました。 :) –

+0

メンテナンス可能なコードをエンドユーザーのクライアントに提供することに多くの注意を払っているようには見えません。しかし、実際には4番目の可能性が実装されています: 'google.time()' – Robert