|
1 | | -import dynamic from "next/dynamic"; |
2 | | -import { Suspense } from "react"; |
3 | | - |
4 | 1 | import PopularUniversityCard from "./_ui/PopularUniversityCard"; |
5 | 2 |
|
6 | 3 | import { ListUniversity } from "@/types/university"; |
7 | 4 |
|
8 | | -// PopularUniversityCard를 동적 임포트 |
9 | | -const PopularUniversityCardDynamic = dynamic(() => import("./_ui/PopularUniversityCard"), { |
10 | | - ssr: false, |
11 | | - loading: () => ( |
12 | | - <div className="relative w-[153px]"> |
13 | | - <div className="h-[120px] w-[153px] animate-pulse rounded-lg bg-gray-200" /> |
14 | | - </div> |
15 | | - ), |
16 | | -}); |
17 | | - |
18 | 5 | type PopularUniversitySectionProps = { |
19 | 6 | universities: ListUniversity[]; |
20 | 7 | }; |
21 | 8 |
|
22 | 9 | const PopularUniversitySection = ({ universities }: PopularUniversitySectionProps) => { |
23 | | - const aboveFold = universities.slice(0, 3); |
24 | | - const belowFold = universities.slice(3); |
25 | | - |
26 | 10 | return ( |
27 | 11 | <div className="overflow-x-auto"> |
28 | 12 | <div className="flex gap-2"> |
29 | | - {/* 첫 3장은 즉시 전송 – LCP 후보 */} |
30 | | - {aboveFold.map((university, index) => ( |
| 13 | + {universities.map((university, index) => ( |
31 | 14 | <PopularUniversityCard |
32 | | - priority={index === 0} // 첫 번째만 priority |
33 | | - loading="eager" // 즉시 로딩 |
34 | | - fetchPriority="high" // 높은 우선순위 |
35 | | - quality={index === 0 ? 60 : 55} // LCP는 60, 나머지는 55로 최적화 |
36 | 15 | key={university.id} |
37 | 16 | university={university} |
| 17 | + priority={index === 0} // 첫 번째만 priority로 LCP 최적화 |
| 18 | + loading={index < 3 ? "eager" : "lazy"} // 첫 3개는 즉시, 나머지는 지연 로딩 |
| 19 | + fetchPriority={index === 0 ? "high" : "low"} // 첫 번째만 높은 우선순위 |
| 20 | + quality={index === 0 ? 60 : 50} // 첫 번째는 고품질, 나머지는 압축 |
38 | 21 | /> |
39 | 22 | ))} |
40 | | - |
41 | | - {/* 나머지는 동적 렌더링으로 위임 */} |
42 | | - {belowFold.map((university) => ( |
43 | | - <Suspense |
44 | | - key={university.id} |
45 | | - fallback={ |
46 | | - <div className="relative w-[153px]"> |
47 | | - <div className="h-[120px] w-[153px] animate-pulse rounded-lg bg-gray-200" /> |
48 | | - </div> |
49 | | - } |
50 | | - > |
51 | | - <PopularUniversityCardDynamic |
52 | | - university={university} |
53 | | - priority={false} |
54 | | - loading="lazy" |
55 | | - fetchPriority="low" |
56 | | - quality={50} // 동적 로딩 이미지는 50으로 최대 압축 |
57 | | - /> |
58 | | - </Suspense> |
59 | | - ))} |
60 | 23 | </div> |
61 | 24 | </div> |
62 | 25 | ); |
|
0 commit comments