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:
@@ -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');
|
||||
|
||||
Reference in New Issue
Block a user