perf(frontend): 프로젝트 분석 페이지 성능 최적화
- 백엔드 집계 API(/api/analysis)를 연동하여 프론트엔드 데이터 처리 로직 제거 - 불필요해진 project-analysis-data.js 파일 삭제 - 페이지 로딩 및 데이터 분석 속도를 획기적으로 개선
This commit is contained in:
@@ -1,6 +1,5 @@
|
||||
// /js/project-analysis.js
|
||||
import { getMasterData, getWorkReports } from './project-analysis-api.js';
|
||||
import { processRawData, applyFilters, getAnalysis } from './project-analysis-data.js';
|
||||
import { getMasterData, getAnalysisReport } from './project-analysis-api.js';
|
||||
import {
|
||||
setDefaultDates,
|
||||
setUIState,
|
||||
@@ -9,16 +8,8 @@ import {
|
||||
renderAnalysisTables,
|
||||
renderDetailTable,
|
||||
switchTab,
|
||||
getCurrentFilters,
|
||||
} from './project-analysis-ui.js';
|
||||
|
||||
// 애플리케이션 상태 (전역 변수 최소화)
|
||||
const state = {
|
||||
masterData: null,
|
||||
processedData: [],
|
||||
filteredData: [],
|
||||
};
|
||||
|
||||
// DOM 요소 참조 (이벤트 리스너 설정용)
|
||||
const DOM = {
|
||||
startDate: document.getElementById('startDate'),
|
||||
@@ -26,7 +17,8 @@ const DOM = {
|
||||
analyzeBtn: document.getElementById('analyzeBtn'),
|
||||
quickMonthBtn: document.getElementById('quickMonth'),
|
||||
quickLastMonthBtn: document.getElementById('quickLastMonth'),
|
||||
applyFilterBtn: document.getElementById('applyFilter'),
|
||||
// 필터 버튼은 현재 아무 기능도 하지 않으므로 주석 처리 또는 제거 가능
|
||||
// applyFilterBtn: document.getElementById('applyFilter'),
|
||||
tabButtons: document.querySelectorAll('.tab-button'),
|
||||
};
|
||||
|
||||
@@ -44,17 +36,16 @@ async function handleAnalysis() {
|
||||
|
||||
setUIState('loading');
|
||||
try {
|
||||
const rawReports = await getWorkReports(startDate, endDate);
|
||||
state.processedData = processRawData(rawReports, state.masterData);
|
||||
const analysisResult = await getAnalysisReport(startDate, endDate);
|
||||
|
||||
if (state.processedData.length === 0) {
|
||||
if (!analysisResult.summary.totalHours) {
|
||||
setUIState('no-data');
|
||||
updateFilterOptions([]);
|
||||
return;
|
||||
}
|
||||
|
||||
updateFilterOptions(state.processedData);
|
||||
handleFilterChange(); // 필터 적용 및 렌더링
|
||||
renderSummary(analysisResult.summary);
|
||||
renderAnalysisTables(analysisResult);
|
||||
renderDetailTable(analysisResult.details);
|
||||
setUIState('data');
|
||||
|
||||
} catch (error) {
|
||||
@@ -64,23 +55,8 @@ async function handleAnalysis() {
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 필터 적용 버튼 클릭 또는 분석 후 자동 실행되는 핸들러
|
||||
*/
|
||||
function handleFilterChange() {
|
||||
const filters = getCurrentFilters();
|
||||
state.filteredData = applyFilters(state.processedData, filters);
|
||||
|
||||
const analysisResult = getAnalysis(state.filteredData);
|
||||
|
||||
renderSummary(analysisResult.summary);
|
||||
renderAnalysisTables(analysisResult);
|
||||
renderDetailTable(state.filteredData);
|
||||
}
|
||||
|
||||
/**
|
||||
* 빠른 날짜 설정 버튼 핸들러
|
||||
* @param {'this' | 'last'} monthType - 이번 달 또는 지난 달
|
||||
*/
|
||||
function handleQuickDate(monthType) {
|
||||
const now = new Date();
|
||||
@@ -98,13 +74,15 @@ function handleQuickDate(monthType) {
|
||||
*/
|
||||
function setupEventListeners() {
|
||||
DOM.analyzeBtn.addEventListener('click', handleAnalysis);
|
||||
DOM.applyFilterBtn.addEventListener('click', handleFilterChange);
|
||||
DOM.quickMonthBtn.addEventListener('click', () => handleQuickDate('this'));
|
||||
DOM.quickLastMonthBtn.addEventListener('click', () => handleQuickDate('last'));
|
||||
|
||||
DOM.tabButtons.forEach(btn => {
|
||||
btn.addEventListener('click', () => switchTab(btn.dataset.tab));
|
||||
});
|
||||
|
||||
// 프론트엔드 필터링은 제거되었으므로 관련 이벤트 리스너는 주석 처리합니다.
|
||||
// DOM.applyFilterBtn.addEventListener('click', ...);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -115,8 +93,8 @@ async function initialize() {
|
||||
setupEventListeners();
|
||||
|
||||
try {
|
||||
state.masterData = await getMasterData();
|
||||
// 페이지 로드 시 바로 분석 실행
|
||||
const masterData = await getMasterData();
|
||||
updateFilterOptions(masterData);
|
||||
await handleAnalysis();
|
||||
} catch (error) {
|
||||
alert(error.message);
|
||||
|
||||
Reference in New Issue
Block a user