JSでは、ブラウザタイプ検出が最も一般的に使用される機能であるなど、一部のメモリを実行する必要があります。AJAXを使用する場合、ブラウザの内蔵XHRを検出する必要があるためです。最初の検出中にタイプを記録でき、将来的には、AJAXを使用するときにブラウザのタイプを検出する必要がなくなりました。 JSに1つしかない場合でも、IFなしでは常にステートメントよりも効率的です。
通常のajaxメソッド
コードコピーは次のとおりです。
/**
* JSレイジー関数
*/
function ajax(){
if(typeof xmlhttprequest!= "undefined"){
new xmlhttprequest()を返します。
} else if(typeof activexobject!= "undefined"){
if(typeof arguments.callee.activexstring!= "string"){
varバージョン= ["msxml2.xmlhttp.6.0"、 "msxml2.xmlhttp.3.0"、 "msxml2.xmlhttp"];
for(var i = 0、k = version.length; i <k; i ++){
試す{
new ActiveXObject(バージョン[i]);
arguments.callee.activexstring = versions [i];
壊す;
} catch(ex){
Exを投げる;
}
}
}
new ActiveXObject(arguments.callee.activexstring)を返します。
}それ以外{
「xhrオブジェクトなし」を投げます。
}
}
ajax()関数が呼び出されるたびに、ブラウザの内蔵XHRチェックは効率的ではありません。
怠zyな方法の使用方法
コードコピーは次のとおりです。
/**
* JSレイジー関数
*/
function ajax(){
if(typeof xmlhttprequest!= "undefined"){
ajax = function(){
new xmlhttprequest()を返します。
};
} else if(typeof activexobject!= "undefined"){
ajax = function(){
if(typeof arguments.callee.activexstring!= "string"){
varバージョン= ["msxml2.xmlhttp.6.0"、 "msxml2.xmlhttp.3.0"、 "msxml2.xmlhttp"];
for(var i = 0、k = version.length; i <k; i ++){
試す{
var xhr = new ActiveXObject(バージョン[i]);
arguments.callee.activexstring = versions [i];
xhrを返します。
} catch(ex){
Exを投げる;
}
}
}
new ActiveXObject(arguments.callee.activexstring)を返します。
}
}それ以外{
ajax = function(){
「xhrオブジェクトなし」を投げます。
}
}
ajax()を返します。
}
2番目のレイジーメソッドでは、IFの各ブランチはAjax()変数に値を割り当て、元の関数を効果的に上書きし、新しい関数が最後のステップで呼び出されます。次にajax()が呼ばれるとき、変数は直接呼び出されます。
最適化フォーカス
特定のコードを実行するには、実際のコールのみが実行されますが、一部のJSライブラリは最初にブラウザを検出し、事前に設定されます。
複雑な判断により、最初の実行速度は遅くなりますが、その後のマルチブックの実行は高速になります。
時々、長い間コードを書いた後、変更されないままにすることはできません。プログラムをより速く、より効率的に実行する方法についてよく考えなければなりません。そのような考えの下で書かれたプログラムはハードカバーであり、不必要なジャンクコードを作成しません。これは、単純なOO-Size-Fits-Allアプローチではありません。実際、コードの多くの部分がライブであり、人々はさらに生きています。