JS에서는 브라우저 유형 감지가 가장 일반적으로 사용되는 기능과 같은 일부 메모리 만 실행하면됩니다. AJAX를 사용할 때 브라우저의 내장 XHR을 감지해야하기 때문입니다. 첫 번째 탐지 중에 유형을 기록 할 수 있으며 향후 AJAX를 사용할 때 더 이상 브라우저 유형을 감지 할 필요가 없습니다. JS에있는 경우 하나만 있더라도 IF가없는 진술보다 항상 더 효율적입니다.
정상적인 ajax 방법
코드 사본은 다음과 같습니다.
/**
* JS 게으른 기능
*/
함수 ajax () {
if (typeof xmlhttprequest! = "undefined") {
새로운 xmlhttprequest ()를 반환합니다.
} else if (typeof activexObject! = "undefined") {
if (typeof arguments.callee.activexstring! = "String") {
var versions = [ "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 = 버전 [i];
부서지다;
} catch (ex) {
ex 던지기;
}
}
}
새로운 ActiveXobject (arguments.callee.activexstring)를 반환합니다.
}또 다른{
"XHR 객체 없음"을 던지십시오.
}
}
ajax () 함수가 호출 될 때마다 브라우저의 내장 XHR 검사는 효율적이지 않습니다.
게으른 방법을 사용하는 방법
코드 사본은 다음과 같습니다.
/**
* JS 게으른 기능
*/
함수 ajax () {
if (typeof xmlhttprequest! = "undefined") {
ajax = function () {
새로운 xmlhttprequest ()를 반환합니다.
};
} else if (typeof activexObject! = "undefined") {
ajax = function () {
if (typeof arguments.callee.activexstring! = "String") {
var versions = [ "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 = 버전 [i];
XHR 리턴;
} catch (ex) {
ex 던지기;
}
}
}
새로운 ActiveXobject (arguments.callee.activexstring)를 반환합니다.
}
}또 다른{
ajax = function () {
"XHR 객체 없음"을 던지십시오.
}
}
반환 ajax ();
}
두 번째 게으른 방법에서 if의 각 분기는 ajax () 변수에 값을 할당하여 원래 함수를 효과적으로 덮어 내며 새 기능이 마지막 단계에서 호출됩니다. 다음에 ajax ()가 호출되면 변수가 직접 호출됩니다.
최적화 초점
특정 코드를 실행하려면 실제 통화 만 실행되며 일부 JS 라이브러리는 처음에 브라우저를 감지하고 사전 설정됩니다.
복잡한 판단으로 인해 첫 번째 런 속도는 느리지 만 후속 멀티 북 달리기는 더 빠릅니다.
때로는 코드를 오랫동안 작성한 후에는 변경되지 않은 상태로 유지할 수 없습니다. 프로그램을 더 빠르고 효율적으로 운영하는 방법에 대해 종종 생각해야합니다. 그러한 생각으로 작성된 프로그램은 하드 커버이며 불필요한 정크 코드를 생성하지 않습니다. 이것은 단순한 OO 크기에 맞는 접근 방식이 아닙니다. 실제로, 코드의 많은 부분이 살고 사람들은 더 많이 산다.