๐ค ์บ์๋ฅผ ๊ตฌํํ๋ ์ด์
ํน์ ๊ฐ์ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํด๋๋ฉด ์ดํ์ ๊ทธ ํน์ ๊ฐ์ ๋ํ ๋ฐ์ดํฐ๊ฐ ํ์ํ ๊ฒฝ์ฐ, ์์ฒญ์ ๋ณด๋ด์ง ์๊ณ ์ ์ฅ๋ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์ ๋ฐ๋ก ์ฌ์ฉํ ์ ์๊ณ ๋ถํ์ํ ์์ฒญ์ ์ค์ผ ์ ์๋ค๋ ์ด์ ์ด ์๋ค.
๐ฑ๏ธ ๊ตฌํ ๋ฐฉ๋ฒ
ํน์ ๊ฐ์ ๋ํ ๋ฐ์ดํฐ๋ฅผ SessionStorage์ ์ ์ฅํ์ฌ ๊ตฌํํ ์ ์๋ค. SessionStorage๋ฅผ ์ฌ์ฉํ๋ ์ด์ ๋ ๋ธ๋ผ์ฐ์ ๊ฐ ๋ซํ๊ธฐ ์ ๊น์ง ๋ฐ์ดํฐ๊ฐ ์ ์ง๋๋ค. ๋ง์ฝ ์๊ตฌ์ ์ผ๋ก ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๊ณ ์ถ๋ค๋ฉด LocalStoage๋ฅผ ์ฌ์ฉํ ์ ์๋ค.
๊ตฌํ์ ์ ๋ง ๊ฐ๋จํ๋ค!!!
import { getItem, setItem } from "./storage.js";
const $root = document.querySelector(".root");
const $input = document.createElement("input");
$root.appendChild($input);
const cache = getItem("cache_dog", {});
$input.addEventListener("input", (e) => {
const breed = e.target.value.trim();
if (breed.length > 1) {
fetchData(breed);
}
});
const fetchData = async (breed) => {
try {
if (cache[breed]) { // cache์ ์ด๋ฏธ breed์ ํด๋น๋๋ ์ ์ฅ๋ ๋ฐ์ดํฐ๊ฐ ์๋ ๊ฒฝ์ฐ
console.log(cache[breed]);
} else { // cache์ breed์ ํด๋น๋๋ ์ ์ฅ๋ ๋ฐ์ดํฐ๊ฐ ์๋ ๊ฒฝ์ฐ
const response = await fetch(
`https://dog.ceo/api/breed/${breed}/images/random`
);
if (!response.ok) {
throw new Error("API ์๋ฌ");
}
const dogData = await response.json();
cache[breed] = dogData.message;
setItem("cache_dog", cache); // sessionStorage์ ์ ์ฅ
console.log(cache[breed]);
}
} catch (e) {
console.error(e);
}
};
1. cache์ ๋ฐ์ดํฐ๊ฐ ์๋ ๊ฒฝ์ฐ๋ cache์์ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์จ๋ค.
์๋ ์ฌ์ง์์ ๋ณผ ์ ์๋ฏ์ด ์ด๋ฏธ mix์ ๋ฐ์ดํฐ๋ cache_dog์ ์ ์ฅ๋์ด ์์ผ๋ฏ๋ก ์์ฒญ์ ๋ณด๋ด์ง ์๋๋ค.
2. ๋ง์ฝ cache์ ์ ์ฅ๋ ๋ฐ์ดํฐ๊ฐ ์๋ ๊ฒฝ์ฐ ํด๋น ๊ฐ์ ๋ํด ์์ฒญ์ ๋ณด๋ด๊ณ ๊ทธ ๋ฐ์ดํฐ๋ฅผ cache์ ์ ์ฅํ๋ค.
ํ์ง๋ง cache_dog์ ์๋ ๋ฐ์ดํฐ์ ๊ฒฝ์ฐ ์์ฒญ์ ๋ณด๋ด๋ ๊ฒ์ ํ์ธํ ์ ์๋ค.
'Javascript' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Vanilla Javascript] ๋ฌดํ ์คํฌ๋กค(infinite scroll) ๊ตฌํํ๊ธฐ (0) | 2022.11.25 |
---|---|
[JS] DocumentFragment, Template tag (0) | 2022.10.26 |
[JS] ํด๋ก์ (Closures) ์ดํดํ๊ธฐ (0) | 2022.10.18 |
spread์ rest ๋น๊ตํ๊ธฐ (0) | 2022.07.28 |
ํ๋กํ ํ์ (Prototype) ์ดํดํ๊ธฐ 2 (0) | 2022.07.17 |