๐ Vue์ Lazy Loading: ์ฑ๋ฅ ์ต์ ํ ๋น๋ฒ ๋๊ณต๊ฐ! ๐
Vue.js๋ ์ฑ๋ฅ ์ต์ ํ๋ฅผ ์ํ ๋ค์ํ ๊ธฐ๋ฅ์ ์ ๊ณตํ๋ฉฐ, ๊ทธ์ค **Lazy Loading(์ง์ฐ ๋ก๋ฉ)**์ ๊ฐ์ฅ ํจ๊ณผ์ ์ธ ๊ธฐ์ ์ค ํ๋์์. ํนํ Vue ์ ํ๋ฆฌ์ผ์ด์ ์ด ์ปค์ง๋ฉด์ ๋ฒ๋ค ํฌ๊ธฐ๊ฐ ๋์ด๋ ๋, Lazy Loading์ ์ด๊ธฐ ๋ก๋ฉ ์๊ฐ์ ์ค์ด๊ณ ์ฌ์ฉ์ ๊ฒฝํ(UX)์ ๋ํญ ํฅ์์ํฌ ์ ์์ต๋๋ค. ์ค๋์ Vue์์ Lazy Loading์ ์ด๋ป๊ฒ ์ฌ์ฉํ๋์ง, ์ ์ค์ํ์ง, ๊ทธ๋ฆฌ๊ณ ์ค๋ฌด์์์ ํ๊น์ง ํ๋์ ์ ๋ฆฌํด ๋ณด๊ฒ ์ต๋๋ค. ๐
๐ Lazy Loading์ด๋?
Lazy Loading์ ํ์ํ ๋ฆฌ์์ค๋ฅผ ๋์ค์, ์ฆ ์ฌ์ฉ์๊ฐ ์์ฒญํ ๋๋ง ๋ก๋ํ๋ ๊ธฐ๋ฒ์ ๋๋ค.
โข ๊ธฐ๋ณธ ๊ฐ๋ :
์ด๊ธฐ ํ๋ฉด์ ํ์ํ ํ์ผ๋ง ๋ก๋ํ๊ณ , ๋๋จธ์ง ํ์ผ์ ์ฌ์ฉ์๊ฐ ์์ฒญํ ๋ ๋ก๋ํ๋ค๋ ๋ป์ด์์.
โข ์ฅ์ :
โข ์ด๊ธฐ ๋ก๋ฉ ์๋๊ฐ ๋นจ๋ผ์ง๋๋ค.
โข ๋ฒ๋ค ํฌ๊ธฐ๊ฐ ์์์ง๋๋ค.
โข ๋คํธ์ํฌ ๋ถํ๋ฅผ ์ค์ ๋๋ค.
๐ก Vue์์ Lazy Loading์ ์ ์จ์ผ ํ ๊น?
Vue ํ๋ก์ ํธ๊ฐ ์ปค์ง์๋ก ์ ํ๋ฆฌ์ผ์ด์ ์ ํฌํจ๋ ์ปดํฌ๋ํธ์ ํ์ผ์ ํฌ๊ธฐ๊ฐ ์ ์ ์ปค์ง๊ฒ ๋ฉ๋๋ค. ๋ชจ๋ ํ์ผ์ ํ๊บผ๋ฒ์ ๋ก๋ํ๋ฉด ๋ค์๊ณผ ๊ฐ์ ๋ฌธ์ ๊ฐ ๋ฐ์ํ ์ ์์ด์:
1. ์ด๊ธฐ ๋ก๋ฉ ์๋ ์ ํ
ํ ๋ฒ์ ๋ง์ ๋ฆฌ์์ค๋ฅผ ๋ก๋ํ๋ฉด ์ฌ์ฉ์๊ฐ ๊ธฐ๋ค๋ฆฌ๋ ์๊ฐ์ด ๊ธธ์ด์ ธ์.
2. ๋ถํ์ํ ๋ฆฌ์์ค ๋ก๋
์ฌ์ฉ์๊ฐ ๋ฐฉ๋ฌธํ์ง ์๋ ํ์ด์ง์ ๋ฆฌ์์ค๋ฅผ ๋ฏธ๋ฆฌ ๋ก๋ํ๋ ๊ฑด ๋นํจ์จ์ ์ ๋๋ค.
3. ์ฌ์ฉ์ ๊ฒฝํ(UX) ์ ํ
ํ๋ฉด์ด ๋๋ฆฌ๊ฒ ๋ก๋๋๋ฉด ์ฌ์ฉ์ ์ดํ๋ฅ ์ด ๋์์ง ์ ์์ต๋๋ค.
๐ ๏ธ Vue์์ Lazy Loading ๊ตฌํ ๋ฐฉ๋ฒ
Vue์์๋ ์ปดํฌ๋ํธ๋ฅผ ๋์ ์ผ๋ก ๋ก๋ํ์ฌ Lazy Loading์ ๊ตฌํํ ์ ์์ต๋๋ค. ์ด๋ฅผ ํตํด **์ฝ๋ ์คํ๋ฆฌํ (Code Splitting)**์ ์๋์ผ๋ก ์ฒ๋ฆฌํ๋ฉฐ, ํ์ํ ๋๋ง ์ปดํฌ๋ํธ๋ฅผ ๋ก๋ํฉ๋๋ค.
1๏ธโฃ Vue Router์ ํจ๊ป Lazy Loading
Vue Router์ ๊ฒฐํฉํ๋ฉด ํ์ด์ง ๋จ์์ Lazy Loading์ ์ฝ๊ฒ ๊ตฌํํ ์ ์์ด์.
๊ธฐ๋ณธ ์ฌ์ฉ๋ฒ
import { createRouter, createWebHistory } from 'vue-router';
const routes = [
{
path: '/',
name: 'Home',
component: () => import('./views/Home.vue') // ๋์ import
},
{
path: '/about',
name: 'About',
component: () => import('./views/About.vue') // Lazy Loading
}
];
const router = createRouter({
history: createWebHistory(),
routes
});
export default router;
โข () => import('./views/About.vue'):
์ปดํฌ๋ํธ๋ฅผ ๋์ ์ผ๋ก ๊ฐ์ ธ์ค๋ ๋ฐฉ์์ผ๋ก, ๋ฒ๋ค๋ฌ(Webpack, Vite)๊ฐ ์ฝ๋ ์คํ๋ฆฌํ ์ ์๋์ผ๋ก ์ํํฉ๋๋ค.
2๏ธโฃ Vue ์ปดํฌ๋ํธ์์ Lazy Loading
Vue ์ปดํฌ๋ํธ์์ ์ง์ Lazy Loading์ ๊ตฌํํ ์๋ ์์ต๋๋ค. ์ด ๋ฐฉ์์ ํฐ ์ปดํฌ๋ํธ๋ ํน์ ํ๋ฉด์์๋ง ํ์ํ ์ปดํฌ๋ํธ์ ์ ์ฉํฉ๋๋ค.
์์ : ๋์ ์ปดํฌ๋ํธ ๋ก๋
<template>
<div>
<h1>Welcome to Vue Lazy Loading</h1>
<Suspense>
<template #default>
<LazyComponent />
</template>
<template #fallback>
<div>Loading Component...</div>
</template>
</Suspense>
</div>
</template>
<script>
const LazyComponent = defineAsyncComponent(() =>
import('./components/LazyComponent.vue')
);
export default {
components: {
LazyComponent
}
};
</script>
โข defineAsyncComponent:
Vue์์ ์ปดํฌ๋ํธ๋ฅผ ๋น๋๊ธฐ๋ก ๋ก๋ํ๊ธฐ ์ํด ์ฌ์ฉํ๋ ํจ์์ ๋๋ค.
โข Suspense์ fallback:
๋ก๋ ์ค์๋ fallback์ ์ ์๋ ๋ก๋ฉ UI๋ฅผ ํ์ํฉ๋๋ค.
3๏ธโฃ ์ด๋ฏธ์ง Lazy Loading
Vue์์๋ v-lazy directive๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ํ์ฉํด ์ด๋ฏธ์ง๋ Lazy Loadingํ ์ ์์ด์.
๊ธฐ๋ณธ ์ฌ์ฉ๋ฒ
<template>
<div>
<img v-lazy="imageSrc" alt="Lazy Loaded Image" />
</div>
</template>
<script>
import { defineComponent } from 'vue';
import VueLazyload from 'vue-lazyload';
export default defineComponent({
data() {
return {
imageSrc: 'https://example.com/image.jpg'
};
}
});
</script>
Vue Lazyload ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ค์น
npm install vue-lazyload
์ค์
import { createApp } from 'vue';
import App from './App.vue';
import VueLazyload from 'vue-lazyload';
const app = createApp(App);
app.use(VueLazyload);
app.mount('#app');
๐ ์ค๋ฌด์์์ Lazy Loading ํ
1. ํ์ํ ๊ณณ์๋ง ์ ์ฉํ์ธ์:
โข ๋ชจ๋ ์ปดํฌ๋ํธ๋ฅผ Lazy Loadingํ๋ฉด ์ฑ๋ฅ ์ ํ๋ ์ฌ์ฉ์ ๊ฒฝํ์ ์ ์ํฅ์ ๋ฏธ์น ์ ์์ด์.
โข ์ด๊ธฐ ํ๋ฉด์ ์ค์ํ ์ปดํฌ๋ํธ๋ Lazy Loadingํ์ง ์๋ ๊ฒ์ด ์ข์ต๋๋ค.
2. ๋ก๋ฉ ์ค UI๋ฅผ ์ ๊ณตํ์ธ์:
โข Lazy Loading ์ค ๋ก๋ฉ ์ํ๋ฅผ ๋ช ํํ ๋ณด์ฌ์ฃผ๋ ๊ฒ์ด ์ค์ํฉ๋๋ค.
3. ๋ฒ๋ค ํฌ๊ธฐ๋ฅผ ์ ๊ธฐ์ ์ผ๋ก ๋ถ์ํ์ธ์:
โข Webpack, Vite์ ๋ฒ๋ค ๋ถ์ ๋๊ตฌ๋ฅผ ์ฌ์ฉํด ๊ฐ Lazy Loaded ํ์ผ์ ํฌ๊ธฐ๋ฅผ ์ ๊ฒํ์ธ์.
4. ์บ์ฑ๊ณผ ํจ๊ป ์ฌ์ฉํ์ธ์:
โข Lazy Loading๋ ํ์ผ์ ๋ธ๋ผ์ฐ์ ์บ์ฑ์ ํ์ฉํด ๋คํธ์ํฌ ๋ถํ๋ฅผ ์ต์ํํ ์ ์์ต๋๋ค.
๐ฏ Lazy Loading์ ์ฅ์ ์์ฝ
โข ์ด๊ธฐ ๋ก๋ฉ ์๋ ๊ฐ์ โฉ
โข ๋ฒ๋ค ํฌ๊ธฐ ๊ฐ์ ๐
โข ๋คํธ์ํฌ ํจ์จ์ฑ ํฅ์ ๐
โข ์ฌ์ฉ์ ๊ฒฝํ(UX) ๊ฐ์ ๐
๐ท์ ์ค์ ๊ฐ๋ฐ์๊ฐ ๋์ด๋ด ์๋น!๐ท
'Front-end > Vue' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
Vue.js์์ watch ํบ์๋ณด๊ธฐ! (0) | 2024.08.12 |
---|