2017-11-02 9 views
1

参照:https://developers.google.com/maps/documentation/javascript/tutorialGoogleは「遅延」を間違った方法で使用していますか?

Googleはここで使用している:Googleは「延期」を使用している理由

<script src="https://maps.googleapis.com/maps/api/js?key=YOUR_API_KEY&callback=initMap" async defer></script> 
</body> 
</html> 

私の質問は、私の意見では、それは上記のそれらのスクリプトで何もしていないため?

のは、この(1)比較してみましょう:これにより

<script src="script.js" defer></script> 
</body> 
</html> 

を(2):

<script src="script.js"></script> 
</body> 
</html> 

唯一の違いは、ケースには "script.js" を実行するときにということである:(1)、 "bodyタグの終わり"と "htmlタグの終わり"がまだDOMにないことを確認します。 (1)の場合、それらのタグは既に "script.js"を実行しているDOMの中にあります。 body/htmlタグの最後はスクリーン上で何も変わらないので(レンダリング)、これらのタグは実際には「レンダリング」に影響しません。理論的には、これらの2つの例の間には小さな違いがありますが、実際には違いはありません。

だから、延期を使用する理由は何でしょうか?歴史に戻りましょう。古いブラウザで使用する場合:

<script src="script.js"></script> 
</body> 
</html> 

問題は「プリロードスキャナ」がないことでした。ドキュメントを(並行して)スキャンして、ダウンロードが既に開始されているかどうかを調べることができます。古いブラウザでは、「HTMLパーサー」がドキュメントのその部分に到達すると、初めて「script.js」が表示されます。ダウンロードを開始するのはかなり遅く、時間も無駄です。だから彼らは "遅延"を思いついたので、スクリプトタグをドキュメントの冒頭に置くことができますが、htmlパーサーがドキュメント全体で実行されると実行されます(htmlパーサをブロックしないようになります) )。

最新のブラウザでは、ページの最後の直前に「同期スクリプトタグ」を使用できるため、「遅延」は意味を持ちません。 「プリロードスキャナ」はすぐにダウンロードを開始します。そして、ドキュメントの終わりに配置するので、スクリプトの実行はhtmlパーサーをブロックしません(end body/htmlを除き、これらのタグはレンダリングに影響しません)。

「defer」は、新しいブラウザではドキュメントの最後に「同期スクリプトタグ」を使用できるだけなので、古いブラウザにいくつかの機能を追加しています。

しかし、スクリプトタグをドキュメントの最後に配置し、ドキュメントの最後に配置しないと、古いブラウザでは遅延が発生します。ドキュメントの最後に「延期」を置くと、ブラウザはダウンロードを開始するまでに長い時間待たなければなりません。

だから私が言っていることは、ドキュメントの最後の直前にスクリプトタグに置くとき、「延期」は実際には違いがないということです。ドキュメントの冒頭にあるスクリプトタグに置くだけで意味があります。

Googleは「遅延」の意味を本当に理解していないと思うのですが、なぜそれが追加されるのでしょうか?それは何もしていない。それとも私の間違った考えですか?

Google is wrong about defer?

Why a browser is not always finishing rendering of the preceding HTML, before executing javascript?

External blocking scripts force the browser to wait, before the page can be rendered?

これは、いくつかのより多くの質問/ Googleは/非同期らをセテラレンダリングし、延期の使用について言っている私はとにかくについての私の疑問を持って、私の投稿です

Consequences javascript can have document.write in the code?

0123私は、Googleが独自のスクリプトを作っているかチェックしたいと1件のGoogle検索の後に、私は「延期」の私にとっては奇妙な使用と、既にこの例を発見した理由

Loading external javascript via async script tag at the end of a webpage

がそれです。

とにかくそれを使う理由があるかもしれませんが、Googleは正当な理由を明らかにしていません。ドキュメンテーションでは、Googleがこのポスト/質問であなたに伝えていた話を伝えています。しかし、それはそのような "延期"を使用する理由ではありません。

私は、異なるブラウザで「遅延」を扱う方法が異なることを知っています。そのため、Googleがそれを使用している理由があります。しかし、彼らの文書は正当な理由を示していません。そして、私の質問は、その理由はまさに何ですか?

だから誰がこれについてもっと知っていますか?それとも、Googleのスクリプトには「遅延」がありますか?

答えて

0

私はそれについて考えてきました。私は自分の質問に答えるためのショットを与えます;)。おそらく、Googleは人々がこのコードをコピー/ペーストすることを考えていると思われます。

<script src="https://maps.googleapis.com/maps/api/js?key=YOUR_API_KEY&callback=initMap" async defer></script> 

...ちょうどページのどこかに追加してください。そのような場合、「延期」は理にかなっています。

実際にドキュメントの最後に1つのスクリプトタグがあり、その上に "async"を使用している場合は意味がありません。しかし、スクリプトタグがドキュメントの最後にない場合は意味があります。

しかし、もし私がGoogleであれば、大企業であれば例をチェックして評価しているので、とにかくメモを追加します。私はウェブマスターを知っていますが、ドキュメントの最後に非同期/遅延をスクリプトタグに追加するだけですが、それは唯一のものです。あなたは考えることができます:しかし何もしていないので、それについて何が問題なのですか?例えば、asyncは、JavaSciptを実行する前に(syncと比較して)少し余分な遅延を加えることができます。したがって、そのような場合は、スクリプトタグの非同期ではなく、ページの速度で同期を使用する方がよい場合があります。

関連する問題