์ด ์žฅ์—์„œ๋Š” HTML5 API์ธ ๋“œ๋ž˜๊ทธ ์•ค ๋“œ๋กญ API, Blob API, File API, Web Workers API๋ฅผ ๋ฐฐ์šฐ๊ณ  ์ด๋ฅผ ํ™œ์šฉํ•˜๋ฉด ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋‹ค.

๋“œ๋ž˜๊ทธ ์•ค ๋“œ๋กญ API๐Ÿ‘Š

HTML ์š”์†Œ ๋“œ๋ž˜๊ทธํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋งŒ๋“ค๊ธฐ

<div draggable="true">๋“œ๋ž˜๊ทธ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.</div>

๋“œ๋ž˜๊ทธ, ๋“œ๋กญ ์ด๋ฒคํŠธ

์ด๋ฒคํŠธ ์ด๋ฆ„์„ค๋ช…
dragstart๋“œ๋ž˜๊ทธ ์‹œ์ž‘ํ•  ๋•Œ ๋ฐœ์ƒ
drag๋“œ๋ž˜๊ทธ ํ•˜๋Š” ๋™์•ˆ ๋ฐœ์ƒ
dragend๋“œ๋ž˜๊ทธ ๋๋‚  ๋•Œ ๋ฐœ์ƒ
dragenter๋งˆ์šฐ์Šค ํฌ์ธํ„ฐ ๋“œ๋กญ ์š”์†Œ ์•ˆ์ชฝ์œผ๋กœ ๋“ค์–ด๊ฐˆ ๋•Œ ๋ฐœ์ƒ
dragover๋งˆ์šฐ์Šค ํฌ์ธํ„ฐ ๋“œ๋กญ ์š”์†Œ ์•ˆ์ชฝ์— ์žˆ์„ ๋•Œ ๋ฐœ์ƒ
dragleave๋งˆ์šฐ์Šค ํฌ์ธํ„ฐ ๋“œ๋กญ ์š”์†Œ ๋ฐ”๊นฅ์œผ๋กœ ๋‚˜๊ฐˆ ๋•Œ ๋ฐœ์ƒ
drop์š”์†Œ์— ๋“œ๋กญํ•  ๋•Œ ๋ฐœ์ƒ

๋ฐ์ดํ„ฐ ์ „๋‹ฌ

๋“œ๋ž˜๊ทธ ์•ค ๋“œ๋กญ ์ด๋ฒคํŠธ๋Š” dataTransfer ํ”„๋กœํผํ‹ฐ๋ฅผ ๊ฐ–๊ณ  ์žˆ๊ณ , dataTransfer์€ DataTransfer ๊ฐ์ฒด์ด๋‹ค.

์ „๋‹ฌ ์ˆœ์„œ

  1. dragstart ์ด๋ฒคํŠธ ์ฒ˜๋ฆฌ๊ธฐ ์•ˆ์—์„œ setData ๋ฉ”์„œ๋“œ์— ๋ฐ์ดํ„ฐ ํƒ€์ž…์„ ์ง€์ •ํ•œ ๋ฐ์ดํ„ฐ ์ถ”๊ฐ€
e.dataTransfer.setData("text/plain", value);
  1. dragover ์ด๋ฒคํŠธ ์ฒ˜๋ฆฌ๊ธฐ ์•ˆ์—์„œ ๋ธŒ๋ผ์šฐ์ €์˜ ๊ธฐ๋ณธ ๋™์ž‘์„ ์ทจ์†Œํ•œ๋‹ค.
e.preventDefault();
  1. getData ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•ด์„œ ๋ฐ์ดํ„ฐ๋ฅผ ์ง€์ •ํ•œ ๋ฐ์ดํ„ฐ ํƒ€์ž…์œผ๋กœ ๊ฐ€์ ธ์˜จ๋‹ค.
var value = e.dataTransfer.getData("text/plain");

19-1 ์˜ˆ์ œ
19-a ์˜ˆ์ œ

Blob๐Ÿ‘Š

์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋กœ ์ด๋ฏธ์ง€, ์Œ์„ฑ, ์˜์ƒ ๋“ฑ์˜ ์ด์ง„ ๋ฐ์ดํ„ฐ๋ฅผ ๋‹ค๋ฃฐ ์ˆ˜ ์žˆ๋‹ค.


๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๊ด€๋ฆฌ ์‹œ์Šคํ…œ์˜ BLOB (Binary Large Object) ์—์„œ ์œ ๋ž˜ํ–ˆ๋‹ค. ์ด๋ฏธ์ง€๋‚˜ ์Œ์„ฑ ๋“ฑ์˜ ๋ฉ€ํ‹ฐ๋ฏธ๋””์–ด ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๋Š” DB์˜ BLOB์ฒ˜๋Ÿผ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์˜ Blob ๊ฐ์ฒด๋Š” ๋ฐ์ดํ„ฐ ๋ฉ์–ด๋ฆฌ๋ฅผ ์ฐธ์กฐํ•˜๋Š” ์šฉ๋„๋กœ ์‚ฌ์šฉํ•œ๋‹ค.

Blob ์ƒ์„ฑ์ž

var blob = new Blob(source, { type: contentType });

Blob์ด ๋ฐ›๋Š” ์ธ์ˆ˜์˜ ์˜๋ฏธ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

  • source: ๋ฒ„ํผ ๋ฐฐ์—ด (ArrayBuffer, TypedArray, String, ๊ธฐํƒ€ ๋ชจ๋“  ๋ฐ์ด+ํ„ฐ ํƒ€์ž…)
  • contentType: ์ƒ์„ฑํ•˜๋Š” ๋ฐ์ดํ„ฐ์˜ MIME ํƒ€์ž…
ํ”„๋กœํผํ‹ฐ ์ด๋ฆ„/ ๋ฉ”์„œ๋“œ ์ด๋ฆ„์„ค๋ช…
sizeBlob ๊ฐ์ฒด๊ฐ€ ์ฐธ์กฐํ•˜๋Š” ๋ฐ์ดํ„ฐ์˜ ํฌ๊ธฐ
typeBlob ๊ฐ์ฒด๊ฐ€ ์ฐธ์กฐํ•˜๋Š” ๋ฐ์ดํ„ฐ์˜ MIME ํƒ€์ž…์„ ๋œปํ•˜๋Š” ๋ฌธ์ž์—ด
slice(start, end, contentType)๋ฒ„ํผ์˜ start ๋ถ€ํ„ฐ end ๊นŒ์ง€์˜ ๋ณต์‚ฌ๋ณธ์„ Blob๊ฐ์ฒด๋กœ ๋ฐ˜ํ™˜

Blob ๊ฐ์ฒด ๊ฐ€์ ธ์˜ค๊ธฐ

  1. Blob ์ƒ์„ฑ์ž๋กœ ์ƒ์„ฑ
    Blob ์ƒ์„ฑ์ž์˜ ์ฒซ ๋ฒˆ์งธ ์ธ์ˆ˜๋กœ ArrayBuffer๋‚˜ ํ˜•์‹ํ™” ๋ฐฐ์—ด ๋“ฑ์ด ์š”์†Œ๋กœ ๋‹ด๊ธด ๋ฐฐ์—ด์„ ๋„˜๊ธฐ๋ฉด Blob ๊ฐ์ฒด๋ฅผ ๊ฐ€์ ธ์˜ฌ ์ˆ˜ ์žˆ๋‹ค.

  2. XMLHttpRequest๋กœ ์›น์˜ ๋ฐ์ดํ„ฐ๋ฅผ HTTP ํ†ต์‹ ์œผ๋กœ ๊ฐ€์ ธ์˜ค๋Š” ๋ฐฉ๋ฒ•

function getBlob(url, callback) {
  var req = new XMLHttpRequest();
  req.onload = function () {
    callback(req.response);
  };
  req.open("GET", url);
  req.responseType = "blob";
  req.send(null);
}
  1. postMessage๋กœ ๋‹ค๋ฅธ ์œˆ๋„์šฐ๋‚˜ ์Šค๋ ˆ๋“œ์—์„œ ๊ฐ€์ ธ์˜ค๋Š” ๋ฐฉ๋ฒ•
    postMessage ํ•จ์ˆ˜ ์‚ฌ์šฉ

  2. ํŒŒ์ผ์—์„œ ๊ฐ€์ ธ์˜ค๋Š” ๋ฐฉ๋ฒ•

<input type="file" />

์š”์†Œ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ํŒŒ์ผ์„ ์ฝ์–ด๋“ค์—ฌ์„œ ๊ทธ๊ฒƒ์„ File ๊ฐ์ฒด๋กœ ๊ฐ€์ ธ์˜ฌ ์ˆ˜ ์žˆ๋‹ค.

File ๊ฐ์ฒด

File ๊ฐ์ฒด๋Š” ๋กœ์ปฌ ํŒŒ์ผ์„ ์ฐธ์กฐํ•˜๋Š” Blob ๊ฐ์ฒด์ด๊ณ , ๋กœ์ปฌ ํŒŒ์ผ์„ ์ฝ๊ฑฐ๋‚˜ ์“ธ ์ˆ˜ ์žˆ๋‹ค.

File ๊ฐ์ฒด๋Š” Blob ๊ฐ์ฒด๋ฅผ ์ƒ์†๋ฐ›์€ ๊ฐ์ฒด์ด๋‹ค.

ํ”„๋กœํผํ‹ฐ์„ค๋ช…
lastModifiedFile ๊ฐ์ฒด๊ฐ€ ๋งˆ์ง€๋ง‰์œผ๋กœ ์ˆ˜์ •๋œ ๋‚ ์งœ (๋‹จ์œ„ ๋ฐ€๋ฆฌ์ดˆ)
lastMOdifiedDateFile ๊ฐ์ฒด๊ฐ€ ๋งˆ์ง€๋ง‰์œผ๋กœ ์ˆ˜์ •๋œ ๋‚ ์งœ (Date ๊ฐ์ฒด)
nameFile ๊ฐ์ฒด๊ฐ€ ๊ฐ€๋ฆฌํ‚ค๋Š” ํŒŒ์ผ์˜ ์ด๋ฆ„

๋กœ์ปฌ ํŒŒ์ผ์„ File ๊ฐ์ฒด๋กœ ๋ถˆ๋Ÿฌ๋“ค์ด๋Š” ๋ฐฉ๋ฒ•

  1. type="file" ์†์„ฑ์„ ์ง€์ •ํ•œ input ์š”์†Œ๋กœ ๋ถˆ๋Ÿฌ์˜ค๋Š” ๋ฐฉ๋ฒ•
<!-- ์‚ฌ์šฉ์ž๊ฐ€ input ๋ฒ„ํŠผ์„ ํด๋ฆญํ•ด์„œ ํŒŒ์ผ์„ ๊ฐ€์ ธ์˜ฌ ์ˆ˜ ์žˆ๋‹ค. -->
<input type="file" />

<!-- ์‚ฌ์šฉ์ž๊ฐ€ shift๋ฅผ ๋ˆŒ๋Ÿฌ์„œ ์ค‘๋ณต ์„ ํƒ์„ ํ•  ๋•Œ ์‚ฌ์šฉ -->
<input type="file" multiple />

<!-- ์„ ํƒํ•  ์ˆ˜ ์žˆ๋Š” ํŒŒ์ผ ์œ ํ˜•์„ MIME ํƒ€์ž…์œผ๋กœ ์ง€์ • ๊ฐ€๋Šฅ -->
<input type="file" accept="image/*" />
  1. ๋“œ๋ž˜๊ทธ ์•ค ๋“œ๋กญ์œผ๋กœ ๋ถˆ๋Ÿฌ๋“ค์ด๊ธฐ
    ์•ž์—์„œ ๋ฐฐ์šด ๋“œ๋ž˜๊ทธ ์•ค ๋“œ๋กญ์œผ๋กœ ๋‹ค๋ฅธ ์š”์†Œ๊ฐ€ ๊ฐ€์ง„ ๋ฐ์ดํ„ฐ๋ฅผ ๋‹ค๋ฅธ ์š”์†Œ์— ์ „๋‹ฌํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ๋ฐฐ์› ๋‹ค.

    ๋“œ๋ž˜๊ทธํ•œ ํŒŒ์ผ์˜ File ๊ฐ์ฒด๋Š” ์ด๋ฒคํŠธ ๊ฐ์ฒด์˜ dataTransfer ํ”„๋กœํผํ‹ฐ ์•ˆ์— ์žˆ๋Š” files ํ”„๋กœํผํ‹ฐ์— ์ €์žฅ๋œ๋‹ค.
element.ondrop = function (e) {
  var files = e.dataTransfer.files;
};

FileReader

Blob ๊ฐ์ฒด์—๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ์ฝ์„ ์ˆ˜ ์žˆ๋Š” ๋ฉ”์„œ๋“œ๊ฐ€ ์—†๋‹ค.

FileReader ๊ฐ์ฒด๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด Blob ๊ฐ์ฒด, File ๊ฐ์ฒด์˜ ๋‚ด์šฉ๋ฌผ์„ ์ฝ์„ ์ˆ˜ ์žˆ๋‹ค.

FileReader ์ธ์Šคํ„ด์Šค ์ƒ์„ฑ

var reader = new FileReader();

์ฝ๊ณ ์ž ํ•˜๋Š” Blob ๊ฐ์ฒด๋ฅผ ์ ์ ˆํ•œ ์ด๋ฒคํŠธ ์ฒ˜๋ฆฌ๊ธฐ ์•ˆ์—์„œ 4๊ฐœ์˜ ๋ฉ”์„œ๋“œ ์ค‘ ํ•˜๋‚˜์— ๋„˜๊ธด๋‹ค.

๋ฉ”์„œ๋“œ์„ค๋ช…
readAsText(blob, [, encoding])ํ…์ŠคํŠธ ํ˜•์‹์œผ๋กœ ์ฝ๊ธฐ
readAsArrayBuffer(blob)ArrayBuffer ํ˜•์‹์œผ๋กœ ์ฝ๊ธฐ
readAsDataURL(blob)data URL์ด ๊ฐ€๋ฆฌํ‚ค๋Š” ๋ฐ์ดํ„ฐ ์ฝ๊ธฐ
readAsBinaryString(blob)์ด์ง„ ๋ฐ์ดํ„ฐ ํ˜•์‹์œผ๋กœ ์ฝ๊ธฐ

Blob URL

Blob์€ Blob์„ ๊ฐ€๋ฆฌํ‚ค๋Š” URL์„ ๊ฐ€์งˆ ์ˆ˜ ์žˆ๋‹ค. ์ด๋ฅผ Blob URL ์ด๋ผ๊ณ  ํ•œ๋‹ค.

Blob URL์„ ๊ฐ€์ ธ์˜ค๋ ค๋ฉด URL.createObjectURL ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค.

var blobURL = URL.createObjectURL(blob);

๊ทธ๋Ÿฌ๋ฉด "blob : "์œผ๋กœ ์‹œ์ž‘ํ•˜๋Š” ๋ฌด์ž‘์œ„ ๋ฌธ์ž์—ด์ด Blob ๊ฐ์ฒด์˜ Blob URL๋กœ ์„ค์ •๋˜๊ณ  ์ด๊ฒƒ์„ ๊ฐ€์ ธ์˜ฌ ์ˆ˜ ์žˆ๋‹ค.

var a = new Uint8Array([1, 2, 3]);
var blob = new Blob([a], { type: "application/octet-binary" });
var blobURL = URL.createObjectURL(blob);
console.log(blobURL); // blob:null/~~~

// revokeURL ํ•จ์ˆ˜๋กœ ๋ฉ”๋ชจ๋ฆฌ์—์„œ ํ•ด์ œํ•  ์ˆ˜ ์žˆ๋‹ค.
URL.revokeURL(blobURL);

Blob URL์˜ ํ™œ์šฉ

  1. ์ด๋ฏธ์ง€์˜ Blob URL์„ img ์š”์†Œ์˜ src ์†์„ฑ ๊ฐ’์œผ๋กœ ์„ค์ •ํ•˜๋ฉด ๊ทธ ๋ฐ์ดํ„ฐ๋ฅผ ์ด๋ฏธ์ง€๋กœ ํ‘œ์‹œํ•  ์ˆ˜ ์žˆ๋‹ค.
var blobURL = URL.createObjectURL(blob);
var img = document.createElement("img");
img.src = blobURL;
  1. Canvas์˜ drawImage ๋ฉ”์„œ๋“œ์— ๊ทธ img ์š”์†Œ ๊ฐ์ฒด๋ฅผ ๋„˜๊ธฐ๋ฉด Canvas์— ์ด๋ฏธ์ง€๋ฅผ ๊ทธ๋ฆด ์ˆ˜ ์žˆ๋‹ค.
var blobURL = URL.createObjectURL(blob);
var img = document.createElement("img");
img.onload = function () {
  ctx.drawImage(img, 0, 0);
  URL.revokeObjectURL(this.src);
};
img.src = blobURL;
  1. XMLHttpRequest๊ฐ€ ์ฝ์–ด๋“ค์ผ URL๋กœ ์„ค์ •ํ•˜๋ฉด ๊ทธ ๋ฐ์ดํ„ฐ๋ฅผ ํ…์ŠคํŠธ๋กœ ์ฝ์–ด ๋“ค์ผ ์ˆ˜ ์žˆ๋‹ค.
var blobURL = URL.createObjectURL(blob);
var req = new XmlhttpRequest();
req.onload = funtion() {
  callback(req.responseText);
};
req.open("GET", blobURL);
req.send(null);

Blob ์‘์šฉ

  1. <'input type="file">๋กœ ์ด๋ฏธ์ง€ ํŒŒ์ผ์„ ์ฝ์–ด๋“ค์ด๋Š” ๊ธฐ๋Šฅ
  2. ๋“œ๋ž˜๊ทธ ์•ค ๋“œ๋กญ์œผ๋กœ ์ด๋ฏธ์ง€ ํŒŒ์ผ์„ ์ฝ์–ด ๋“ค์ด๋Š” ๊ธฐ๋Šฅ
  3. ์ด๋ฏธ์ง€ ํ•„ํ„ฐ๋ง ๊ธฐ๋Šฅ
  4. ์ด๋ฏธ์ง€ ์ €์žฅ ๊ธฐ๋Šฅ

Web Workers๐Ÿ‘Š

ํด๋ผ์ด์–ธํŠธ ์ธก ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋Š” ์‹ฑ๊ธ€ ์Šค๋ ˆ๋“œ์ด๋‹ค. ํ•˜์ง€๋งŒ ๋ธŒ๋ผ์šฐ์ €๋Š” Single Thread๋กœ ๋™์ž‘ํ•˜์ง€ ์•Š๋Š”๋‹ค. Web Workers๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ํŠน์ • ์ž‘์—…์„ ๋ฉ€ํ‹ฐ ์Šค๋ ˆ๋“œ๋กœ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋‹ค. Web Workers์—์„œ ๋ณ‘๋ ฌ๋กœ ์‹คํ–‰๋˜๋Š” ์Šค๋ ˆ๋“œ๋Š” ์›Œ์ปค ๋ผ๊ณ  ํ•œ๋‹ค.

์›Œ์ปค์™€ ๋ฉ”์ธ ์Šค๋ ˆ๋“œ๋Š” ๋‹ค๋ฅธ ์ „์—ญ ๊ฐ์ฒด๋ฅผ ๊ฐ€์ง€๋ฉฐ, ์ƒ๋Œ€๋ฐฉ์˜ ์ „์—ญ ๊ฐ์ฒด๋ฅผ ์ฐธ์กฐํ•  ์ˆ˜ ์—†๋‹ค. ๋˜ํ•œ postMessage๋ฅผ ์‚ฌ์šฉํ•œ ๋น„๋™๊ธฐ ํ†ต์‹ ๋งŒ ๊ฐ€๋Šฅํ•˜๋‹ค.

Web Workers์˜ ๊ธฐ๋ณธ

Web Workers๋กœ ๋ฉ€ํ‹ฐ ์Šค๋ ˆ๋“œ๋ฅผ ์ฒ˜๋ฆฌํ•˜๋Š” ๋ฐฉ๋ฒ•์€ ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.


Worker ๊ฐ์ฒด ์ƒ์„ฑํ•˜๊ธฐ

๋จผ์ € ์›Œ์ปค๋ฅผ ์ •์˜ํ•  ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ํŒŒ์ผ์„ ๋งŒ๋“ ๋‹ค.

var worker = new Worker("worker.js");

์›Œ์ปค์— ๋ฉ”์‹œ์ง€ ๋ณด๋‚ด๊ธฐ / ๋ฐ›๊ธฐ

postMessage๋กœ ์›Œ์ปค์— ๋ฉ”์‹œ์ง€๋ฅผ ๋ณด๋‚ผ ์ˆ˜ ์žˆ๋‹ค.

worker.postMessage("message");

์›Œ์ปค์—์„œ ๋ฉ”์‹œ์ง€๋ฅผ ๋ฐ›๊ธฐ ์œ„ํ•ด์„œ message ์ด๋ฒคํŠธ ์ฒ˜๋ฆฌ๊ธฐ๋ฅผ ๋“ฑ๋กํ•ด์•ผํ•œ๋‹ค.

self.onmessage = function(e) {
  var message = e.data;
  ...
}

์›Œ์ปค์—์„œ ๋ฉ”์ธ ์Šค๋ ˆ๋“œ๋กœ ๋ฉ”์‹œ์ง€ ๋ณด๋‚ด๊ธฐ / ๋ฐ›๊ธฐ

์›Œ์ปค์—์„œ ๋ฉ”์ธ ์Šค๋ ˆ๋“œ๋กœ ๋ฉ”์‹œ์ง€๋ฅผ ๋ณด๋‚ด๊ธฐ ์œ„ํ•ด postMessage ๋ฉ”์„œ๋“œ๋ฅผ ํ˜ธ์ถœํ•œ๋‹ค.

self.postMessage("message");

์›Œ์ปค์—์„œ ๋ฉ”์ธ ์Šค๋ ˆ๋“œ๋กœ ๋ฉ”์‹œ์ง€๋ฅผ ๋ฐ›์œผ๋ ค๋ฉด message ์ด๋ฒคํŠธ ์ฒ˜๋ฆฌ๊ธฐ๋ฅผ ๋“ฑ๋กํ•ด์•ผํ•œ๋‹ค.

worker.onmessage = function(e) {
  var message = e.data;
  ...
}

์›Œ์ปค ์Šค๋ ˆ๋“œ ๊ฐ•์ œ์ข…๋ฃŒ / ์Šค์Šค๋กœ ์ข…๋ฃŒ
๊ฐ•์ œ ์ข…๋ฃŒ

worker.terminate();

์Šค์Šค๋กœ ์ข…๋ฃŒ

close();

์™ธ๋ถ€ ์Šคํฌ๋ฆฝํŠธ ์ฝ์–ด ๋“ค์ด๊ธฐ

importScripts("scripts.js");

importScripts ํ•จ์ˆ˜๋กœ ์™ธ๋ถ€ ์Šคํฌ๋ฆฝํŠธ ํŒŒ์ผ์„ ์ฝ์–ด ๋“ค์ผ ์ˆ˜ ์žˆ๋‹ค.

์›Œ์ปค๋กœ ํ•  ์ˆ˜ ์žˆ๋Š” ์ผ

Web Workers์˜ ์›Œ์ปค๋ฅผ ํ™œ์šฉํ•˜์—ฌ ๋ฌด์Šจ ์ผ์„ ํ•  ์ˆ˜ ์žˆ๋Š”์ง€ ์ •๋ฆฌํ•ด๋ณด์ž. ํŠนํžˆ Blob์„ ์ฝ์–ด ๋“ค์ด๋Š” ์ž‘์—…๊ณผ XMLHttpRequest๋ฅผ ์‚ฌ์šฉํ•œ ํ†ต์‹  ์ž‘์—…์„ ๋™๊ธฐ์ ์œผ๋กœ ์‹คํ–‰ ํ•  ์ˆ˜ ์žˆ๋‹ค.

  1. ์›Œ์ปค์—๋Š” ์ฝ”์–ด ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์˜ ๋ชจ๋“  ์‚ฌ์–‘์ด ํฌํ•จ๋˜์–ด ์žˆ๋‹ค.

    ์›Œ์ปค์˜ ์ „์—ญ ๊ฐ์ฒด๋Š” self, this๋กœ ์ฐธ์กฐ ๊ฐ€๋Šฅ

  2. ํด๋ผ์ด์–ธํŠธ ์ธก ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ๊ฐ์ฒด์— ์ •์˜๋œ ์ผ๋ถ€ ํ”„๋กœํผํ‹ฐ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

    setTimeout(), setInterval() ๋“ฑ

  3. ์ผ๋ถ€ HTML5 API๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

    Blob(), FileAPI() ๋“ฑ

  4. ๊ณต์œ ์›Œ์ปค๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

    ๊ณต์œ  ์›Œ์ปค๋Š” ์—ฌ๋Ÿฌ ์›Œ์ปค์˜ ์ „์—ญ ๊ฐ์ฒด๋ฅผ ๊ณต์œ ํ•  ์ˆ˜ ์žˆ๋Š” ์›Œ์ปค์ด๋‹ค. ShareWorker์ƒ์„ฑ์ž๋กœ ์ƒ์„ฑ ๊ฐ€๋Šฅ

profile
ํ”„๋ก ํŠธ์—”๋“œ ๊ฐœ๋ฐœ์ž๊ฐ€ ๋˜๊ณ  ์‹ถ์–ด์š” ๐Ÿ™†โ€โ™‚๏ธ

0๊ฐœ์˜ ๋Œ“๊ธ€

๊ด€๋ จ ์ฑ„์šฉ ์ •๋ณด