高性能Javascript【一】ロードと実行
最近『高性能Javascript』という本を読んで、以前はばらばらな知識がここでつながっていたことに気づきました.恨みを感じさせるものがあって、記録しようとしました.書き続けたいと思っています.Laserの小さな図書館とkaiyeの本に感謝します:).
Javascriptコードには、ページがJavascriptコードをロードまたは実行している場合(埋め込みまたは外部チェーンにかかわらず
1、スクリプトはページの位置:
すべての
ラベルに近づけます.これにより、スクリプトの実行前にページがレンダリングされたことを確認できます.スクリプトを
ラベルにできるだけ置かないでください.コンテンツがロードされない前に、ページがスクリプトにブロックされ、ページが一定の時間内に空白になることを避けます.
2、組織スクリプト
ファイルをマージして、面の中の
3、ブロックスクリプトなし:
a)遅延スクリプト実行
b)動的作成<script type="text/javascript" src="a.js" defer="defer"></script>
https://developer.mozilla.org/En/HTML/Element/Script
このように追加したスクリプトはロードプレイ後すぐに自動的に実行され,コールバック関数を追加し,必要に応じてスクリプトを実行することができ,ieのコールバックにおけるreadyStateの判断と処理に注意する必要がある.
c)XMLHttpRequestスクリプト注入(ajax)function loadScript(url, callback){
var script = document.createElement("script")
script.type = "text/javascript";
if (script.readyState){ //IE
script.onreadystatechange = function(){
//ie下readyState的状态的值loaded和complete可能只会出现一个
if (script.readyState == "loaded" || script.readyState == "complete"){
//避免loaded和complete重复处理
script.onreadystatechange = null;
callback();
}
};
} else { //Others
script.onload = function(){
callback();
};
}
script.src = url;
document.getElementsByTagName("head")[0].appendChild(script);
}
ダウンロード後はすぐに自動的に実行されませんが、ドメイン間では実行できません.
推奨事項:
YUI 3、Lazyload、LABjsの作り方も参考にできます.
YUI3:http://developer.yahoo.com/yui/3/yui/
ユーザーによる定義済みファイルの動的ロード
Lazyload:https://github.com/rgrove/lazyload YUI().use('animation', function(Y) {
// Y.Anim is available
});
複数を同時にロードし、順番に実行できます.
//Load a CSS file and pass an argument to the callback function. LazyLoad.js(['foo.js', 'bar.js', 'baz.js'], function () {
alert('all files have been loaded');
});
LABjs:http://labjs.com/LazyLoad.css('foo.css', function (arg) {
alert(arg);
}, 'foo.css has been loaded');
チェーン操作をサポートし、wait処理は依存または前後関係を実行します.
tips<script>
$LAB
.script("framework.js").wait()
.script("plugin.framework.js")
.script("myplugin.framework.js").wait()
.script("init.js").wait();
</script>
埋め込まれたスクリプトをlinkから入ってきたスタイルファイルの後に置かないでください.そうすると、スクリプトはスタイルファイルのダウンロードが終わった後、ページが正確なスタイル情報を取得してからスクリプトを実行します.
bodyセクションにscriptを追加すると、scriptのスクリプトがbodyを操作する可能性があり、bodyがロードされていない場合、「操作が終了しました」というエラーが発生するため、headに
本ではLazyloadがCssファイルをロードするのにあまり意味がないと言っていますが、その中のコールバック関数は、cssファイルのロードが完了した後にいくつかの操作を行う必要がある場合があります.