View on GitHub

programming-study

허원철의 개발 블로그

DOM 객체에 append 하는 다양한 방법

1. 가장 쉽게 생각할 수 있는 방법

for (let item of list) {
	$('#tbl').append(createElement(item));
}

1. [개선] 보다 개선된 방법

const welTbl = $('#tbl'); // 전역

for (let item of list) {
	welTbl.append(createElement(item));
}

하지만,

리플 로우 가 자주 발생하므로 보다 개선된 방법을 찾아야한다.

※ 리플 로우(Reflow): 문서의 일부 또는 전부를 다시 렌더링 할 목적으로 문서의 요소 위치와 형상을 다시 계산하기위한 웹 브라우저 프로세스의 이름 (≒ Repaint)

2. 마지막에 한번에 넣는 방법

const welTbl = $('#tbl'); // 전역

let welBody = $('<table-body/>').addClass('tbl-body');
for (let item of list) {
	welBody.append(createElement(item));
}
welTbl.append(welBody);

2-1. 문자열을 이용하여 한번에 넣는 방법

const welTbl = $('#tbl'); // 전역

let element = '';
for (let item of list) {
	element += createElement(item);
}
welTbl.append(element);

2-1. [개선1] 배열을 활용한 개선 방법

const welTbl = $('#tbl'); // 전역

let array = [];
for (let item of list) {
	array.push(createElement(item));
}
welTbl.append(array.join(''));

2-1. [개선2] StringBuilder 객체를 활용한 개선 방법

class StringBuilder {

	constructor() {
		this.array = [];
	}

	append(value) {
		if (value) {
			this.array.push(value);
		}
	}

	clear() {
		this.array.length = 1;
	}

	toString() {
		return this.array.join('');
	}
}

// ...

const welTbl = $('#tbl'); // 전역

let sb = new StringBuilder();
for (let item of list) {
	sb.append(createElement(item));
}
welTbl.append(sb.toString());

하지만,

결국에는 JQuery 객체를 만들어내는 비용이 들기 때문에 Vanilla js 로 활용하는 것이 가장 빠르다.