perf: 공통 헤더 표시 타이밍 대폭 개선 - 한박자 늦음 해결

🎯 Issue: 헤더가 한박자 늦게 나오는 문제
- 기존: API 스크립트 로드 → 인증 체크 → 헤더 초기화 (느림)
- 개선: DOM 로드 즉시 → 캐시된 사용자로 헤더 표시 (빠름)

 Performance Improvements:
1. DOM 로드 시점에서 즉시 헤더 표시 시도
2. AuthManager 캐시된 사용자 정보 활용
3. 공통 헤더 초기화 함수 분리 및 중복 방지
4. 3단계 헤더 초기화 전략

🔧 3-Tier Header Loading Strategy:
Tier 1: DOM 로드 시점 (가장 빠름)
  - AuthManager 캐시 확인
  - 사용자 정보 있으면 즉시 헤더 표시

Tier 2: API 스크립트 로드 후 (보조)
  - 캐시된 사용자로 즉시 헤더 초기화
  - 이미 초기화되었으면 스킵

Tier 3: 인증 체크 후 (최종 확인)
  - 이미 초기화되었으면 스킵
  - 중복 초기화 방지

🎨 Enhanced UX:
- 헤더 표시 지연 최소화 (거의 즉시)
- 중복 초기화 방지로 깜빡임 없음
- 로그인된 사용자 경험 대폭 개선

🔧 Code Improvements:
- initializeCommonHeader() 함수 분리
- window.commonHeaderInitialized 플래그
- 공통 헤더 모듈 로드 대기 로직
- 중복 방지 및 에러 처리

Expected Result:
 헤더 즉시 표시 (한박자 늦음 해결)
 매끄러운 페이지 로딩
 중복 초기화 방지
 안정적인 헤더 표시
This commit is contained in:
Hyungi Ahn
2025-10-25 12:39:09 +09:00
parent ccbd5fb103
commit 71e99fed1a

View File

@@ -489,6 +489,27 @@
let currentPhotos = [];
let issues = [];
// 공통 헤더 초기화 함수 (중복 방지)
async function initializeCommonHeader(user) {
console.log('🔧 공통 헤더 초기화 시작:', user.username);
if (window.commonHeader && typeof window.commonHeader.init === 'function') {
await window.commonHeader.init(user, 'issues_create');
window.commonHeaderInitialized = true;
console.log('✅ 공통 헤더 초기화 완료');
} else {
console.error('❌ 공통 헤더 모듈이 로드되지 않음');
// 지연 재시도
setTimeout(async () => {
if (window.commonHeader && typeof window.commonHeader.init === 'function') {
console.log('🔄 지연된 공통 헤더 초기화');
await window.commonHeader.init(user, 'issues_create');
window.commonHeaderInitialized = true;
}
}, 200);
}
}
// 수동 초기화 함수 (initializeApp 함수가 로드되지 않을 때 사용)
async function manualInitialize() {
console.log('🔧 수동 초기화 시작');
@@ -549,6 +570,13 @@
async function initializeApp() {
console.log('🚀 앱 초기화 시작 (AuthManager 사용)');
// AuthManager가 이미 사용자 정보를 가지고 있다면 즉시 헤더 표시
if (window.authManager.isLoggedIn()) {
const cachedUser = window.authManager.getCurrentUser();
console.log('⚡ 캐시된 사용자로 즉시 헤더 초기화:', cachedUser.username);
await initializeCommonHeader(cachedUser);
}
try {
// AuthManager를 통한 인증 체크 (캐시 우선, 필요시에만 API 호출)
const user = await window.authManager.checkAuth();
@@ -557,20 +585,11 @@
currentUser = user;
console.log('✅ currentUser 전역 변수 업데이트:', currentUser.username);
// 공통 헤더 초기화
console.log('🔧 공통 헤더 초기화 시작:', user.username);
if (window.commonHeader && typeof window.commonHeader.init === 'function') {
await window.commonHeader.init(user, 'issues_create');
console.log('✅ 공통 헤더 초기화 완료');
// 공통 헤더 초기화 (이미 초기화되었다면 스킵)
if (!window.commonHeaderInitialized) {
await initializeCommonHeader(user);
} else {
console.error(' 공통 헤더 모듈이 로드되지 않음');
setTimeout(() => {
if (window.commonHeader && typeof window.commonHeader.init === 'function') {
console.log('🔄 지연된 공통 헤더 초기화');
window.commonHeader.init(user, 'issues_create');
}
}, 200);
console.log(' 공통 헤더 이미 초기화됨 - 스킵');
}
// 페이지 접근 권한 체크
@@ -605,9 +624,26 @@
}
}
// DOM 로드 완료 시 대기 (API 스크립트가 로드되면 initializeApp 호출됨)
window.addEventListener('DOMContentLoaded', () => {
console.log('📄 DOM 로드 완료 - API 스크립트 로딩 대기 중...');
// DOM 로드 완료 시 즉시 헤더 표시 시도
window.addEventListener('DOMContentLoaded', async () => {
console.log('📄 DOM 로드 완료 - 즉시 헤더 표시 시도');
// AuthManager가 이미 로드되었고 사용자 정보가 있다면 즉시 헤더 표시
if (window.authManager && window.authManager.isLoggedIn()) {
const cachedUser = window.authManager.getCurrentUser();
console.log('⚡ DOM 로드 시점에서 즉시 헤더 표시:', cachedUser.username);
// 공통 헤더 모듈이 로드될 때까지 잠시 대기
let attempts = 0;
while (!window.commonHeader && attempts < 10) {
await new Promise(resolve => setTimeout(resolve, 50));
attempts++;
}
if (window.commonHeader) {
await initializeCommonHeader(cachedUser);
}
}
});
// 로그인 (AuthManager 사용)
@@ -624,9 +660,7 @@
console.log('✅ 로그인 성공 - 메인 화면 초기화');
// 공통 헤더 초기화
if (window.commonHeader && typeof window.commonHeader.init === 'function') {
await window.commonHeader.init(currentUser, 'issues_create');
}
await initializeCommonHeader(currentUser);
// 로그인 성공 후 메인 화면 표시
document.getElementById('loginScreen').classList.add('hidden');