Skip to content

javascript_in_depth_9

paul edited this page Apr 20, 2017 · 1 revision

๋””์ž์ธ ํŒจํ„ด ์‹ค์šฉ - Init-time branching ํŒจํ„ด

Init-time branching ํŒจํ„ด์€ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์—์„œ ๋งค์šฐ ์œ ์šฉํ•œ ํŒจํ„ด ์ค‘ ํ•˜๋‚˜์ด๋‹ค. ์ด๋ฆ„ ๊ทธ๋Œ€๋กœ ์ดˆ๊ธฐํ™” ๋‹จ๊ณ„์—์„œ ๋ถ„๊ธฐํ•˜์—ฌ ๊ฐ™์€ ํ•จ์ˆ˜๋ฅผ ํ™˜๊ฒฝ์— ๋”ฐ๋ผ ๋‹ค๋ฅด๊ฒŒ ์ •์˜ํ•˜๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•œ๋‹ค. ๋ณดํ†ต ์›นํŽ˜์ด์ง€๊ฐ€ ์ฒ˜์Œ ์—ด๋ฆด ๋•Œ ์‹คํ–‰๋œ๋‹ค๊ณ  ํ•ด์„œ Init-branching ํŒจํ„ด์ด๋ผ๊ณ ๋„ ํ•˜๋ฉฐ, ํŽ˜์ด์ง€๊ฐ€ ๋กœ๋“œ๋  ๋•Œ ์‹คํ–‰๋˜๊ธฐ ๋•Œ๋ฌธ์— Load-branching ํŒจํ„ด์ด๋ผ๊ณ ๋„ ํ•œ๋‹ค.

ํ™œ์šฉ

์ด ํŒจํ„ด์ด ์œ ์šฉํ•œ ์ด์œ ๋Š” ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๊ฐ€ ๋‹ค์–‘ํ•œ ๋ธŒ๋ผ์šฐ์ € ํ™˜๊ฒฝ์—์„œ ์ œ๊ณต๋˜์–ด์•ผ ํ•˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. ๋”ฐ๋ผ์„œ ์ฃผ์š” ๊ธฐ๋Šฅ์— ๋Œ€ํ•ด์„œ ์ด๋Ÿฌํ•œ ํ˜ธํ™˜์„ฑ์„ ๋ณด์žฅํ•ด์ค„ ๋–„ ์‚ฌ์šฉํ•˜๋ฉด ์ข‹์€ ํŒจํ„ด์ด๋‹ค.

ํŠน์ง•

Init-time branching ํŒจํ„ด์˜ ์žฅ์ ์€ ๋ธŒ๋ผ์šฐ์ € ํ™˜๊ฒฝ์ด๋‚˜ ์ƒํƒœ์— ๋”ฐ๋ผ์„œ ๊ฐ™์€ ๊ธฐ๋Šฅ์„ ๋‹ค์–‘ํ•œ ๋ฐฉ๋ฒ•์œผ๋กœ ์ œ๊ณตํ•  ์ˆ˜ ์žˆ์–ด์„œ ๋งค์šฐ ์œ ์šฉํ•˜๋‹ค. ํ•˜์ง€๋งŒ ์–ด์ฐŒ๋˜์—ˆ๋“  ์ตœ์ดˆ ์ดˆ๊ธฐํ™” ์‹œ์ ์— ๊ทธ๋Ÿฌํ•œ ๋ธŒ๋ผ์šฐ์ € ํ™˜๊ฒฝ๊ณผ ์ƒํƒœ๋ฅผ ํ™•์ธํ•˜๊ธฐ ์œ„ํ•œ ์ถ”๊ฐ€ ์ปดํ“จํŒ… ์ž์›์ด ์†Œ๋ชจ๋˜๋ฏ€๋กœ ์ตœ์ดˆ ์ดˆ๊ธฐํ™” ๋•Œ ์†Œ๋ชจํ•˜๋Š” ๊ฒƒ์ด ๋‚˜์„์ง€, ์•„๋‹ˆ๋ฉด ๋งค๋ฒˆ ์ปดํ“จํŒ… ์ž์›์„ ์†Œ๋ชจํ•˜๋Š” ๊ฒƒ์ด ๋‚˜์„์ง€ ํŒ๋‹จํ•˜์—ฌ ์„ ํƒํ•˜๋ฉด ์ข‹๋‹ค.

์˜ˆ์ œ

// ํ‘œ์ค€ ํ˜ธํ™˜์„ ์œ„ํ•œ ์ด๋ฒคํŠธ ํ•ธ๋“ค๋Ÿฌ ํ•จ์ˆ˜ ์ •์˜ ๋ฐฉ๋ฒ•
// ๋ธŒ๋ผ์šฐ์ € ์ข…๋ฅ˜์™€ ๋ฒ„์ „์— ๋”ฐ๋ผ์„œ ๊ตฌ๋ถ„ํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ
// ํ˜„์žฌ ๋ธŒ๋ผ์šฐ์ €์˜ ๊ธฐ๋Šฅ ์—ฌ๋ถ€๋ฅผ ๊ธฐ์ค€์œผ๋กœ ์ œ๊ณตํ•˜๋Š” ๋ฐฉ๋ฒ•์ด ์ข‹๋‹ค.
(function () {
    if (!Element.prototype.addEventListener) {
        if (Element.prototype.attachEvent) {
            Element.prototype.addEventListener = function (type, fn) {
                this.attachEvent("on" + type, fn);
            }
        } else {
            Element.prototype.addEventListener = function (type, fn) {
                this["on" + type] = fn;
            }
        }
    }

    if (!Element.prototype.removeEventListener) {
        if (Element.prototype.detachEvent) {
            Element.prototype.removeEventListener = function (type, fn) {
                this.detachEvent("on" + type, fn);
            }
        } else {
            Element.prototype.removeEventListener = function (type) {
                this["on" + type] = null;
            }
        }
    }
}());

XMLHttpRequest ๊ฐ์ฒด ํ˜ธํ™˜์„ฑ ์ง€์›

XMLHttpRequest ๊ฐ์ฒด๋Š” ํ˜„์žฌ ๋Œ€๋ถ€๋ถ„ ๋ธŒ๋ผ์šฐ์ €์—์„œ๋Š” ์ง€์›ํ•˜๋‚˜, Internet Explorer ๋‚ฎ์€ ๋ฒ„์ „์—์„œ๋Š” ์‚ฌ์šฉํ•  ์ˆ˜ ์—†์–ด์„œ ์ด๋ฅผ ์œ„ํ•œ ํ˜ธํ™˜์„ฑ ์„ค์ •์ด ํ•„์š”ํ•˜๋‹ค.

// Init-time branching์„ ํ†ตํ•œ getXHR() ํ•จ์ˆ˜ ์ •์˜
var getXHR = (function () {
    var xhr;
    if (window.XMLHttpRequest) {
        return function () {
            return new XMLHttpRequest();
        }
    }
    try {
        xhr = new ActiveXObject("MSXML2.XMLHTTP.6.0");
        return function () {
            return new new ActiveXObject("MSXML2.XMLHTTP.6.0");
        }
    } catch (e) {
        try {
            xhr = new ActiveXObject("MSXML2.XMLHTTP.3.0");
            return function () {
                return new ActiveXObject("MSXML2.XMLHTTP.3.0");
            }
        } catch (e) {
            alert("This browser does not support XMLHttpRequest")
        }
    }
}());

Clone this wiki locally