/** * 分块对比优化器集成脚本 * 负责将优化器与现有的历史详情页面集成 */ (function() { 'use strict'; // 等待页面和优化器加载完成 function initializeChunkCompareOptimization() { // 避免重复初始化(多次 setTimeout 或脚本重复触发) if (window.__chunkCompareIntegrationInitialized) { return; } if (!window.ChunkCompareOptimizer || !window.ChunkCompareOptimizer.instance) { console.warn('[ChunkIntegration] 优化器未加载,延迟初始化'); setTimeout(initializeChunkCompareOptimization, 100); return; } console.log('[ChunkIntegration] 开始集成分块对比优化器'); // 标记已初始化,防止重复绑定事件 window.__chunkCompareIntegrationInitialized = true; // 保存原有的渲染函数引用(如需使用,可在后续扩展) const originalShowTab = window.showTab; // 增强切换按钮功能 enhanceSwapChunksButton(); // 增强性能监控 enhancePerformanceMonitoring(); // 绑定优化器控制事件 bindOptimizerControls(); console.log('[ChunkIntegration] 分块对比优化器集成完成'); } /** * 增强切换按钮功能 */ function enhanceSwapChunksButton() { // 使用事件委托处理切换按钮 document.addEventListener('click', function(e) { if (e.target.id === 'swap-chunks-btn') { e.preventDefault(); handleChunkSwap(); } // 处理性能模式切换 if (e.target.id === 'performance-toggle-btn' || e.target.closest('#performance-toggle-btn')) { e.preventDefault(); togglePerformanceMode(); } }); } /** * 处理分块位置切换 */ function handleChunkSwap() { const startTime = performance.now(); console.log('[ChunkIntegration] 开始切换分块位置'); // 切换全局标志 window.isOriginalFirstInChunkCompare = !window.isOriginalFirstInChunkCompare; // 保存用户偏好 if (window.docIdForLocalStorage) { localStorage.setItem( `isOriginalFirst_${window.docIdForLocalStorage}`, window.isOriginalFirstInChunkCompare ); } // 更新按钮状态 const swapBtn = document.getElementById('swap-chunks-btn'); if (swapBtn) { swapBtn.style.transform = window.isOriginalFirstInChunkCompare ? 'rotate(0deg)' : 'rotate(180deg)'; swapBtn.title = window.isOriginalFirstInChunkCompare ? '切换原文/译文位置' : '切换译文/原文位置'; } // 如果使用优化器,需要重新渲染 if (window.ChunkCompareOptimizer && window.ChunkCompareOptimizer.instance) { // 清除缓存以重新渲染 window.ChunkCompareOptimizer.instance.renderCache.clear(); // 重新显示当前标签 if (typeof window.showTab === 'function') { window.showTab('chunk-compare'); } } const endTime = performance.now(); console.log(`[ChunkIntegration] 分块位置切换完成,耗时: ${(endTime - startTime).toFixed(2)}ms`); } /** * 切换性能模式 */ function togglePerformanceMode() { const container = document.querySelector('.chunk-compare-container'); const toggleBtn = document.getElementById('performance-toggle-btn'); if (!container || !toggleBtn) return; const isPerformanceMode = container.classList.contains('performance-mode'); if (isPerformanceMode) { // 关闭性能模式 container.classList.remove('performance-mode'); toggleBtn.classList.remove('active'); toggleBtn.title = '启用性能模式'; console.log('[ChunkIntegration] 性能模式已关闭'); } else { // 启用性能模式 container.classList.add('performance-mode'); toggleBtn.classList.add('active'); toggleBtn.title = '关闭性能模式'; console.log('[ChunkIntegration] 性能模式已启用'); } // 保存用户偏好 localStorage.setItem('chunkComparePerformanceMode', !isPerformanceMode); } /** * 增强性能监控 */ function enhancePerformanceMonitoring() { // 监控分块对比的渲染性能 const originalConsoleTime = console.time; const originalConsoleTimeEnd = console.timeEnd; console.time = function(label) { if (label.includes('分块对比') || label.includes('chunk')) { performance.mark(`${label}-start`); } return originalConsoleTime.apply(this, arguments); }; console.timeEnd = function(label) { if (label.includes('分块对比') || label.includes('chunk')) { performance.mark(`${label}-end`); try { performance.measure(label, `${label}-start`, `${label}-end`); const measure = performance.getEntriesByName(label, 'measure')[0]; if (measure) { console.log(`[性能监控] ${label}: ${measure.duration.toFixed(2)}ms`); // 如果渲染时间过长,提示用户 if (measure.duration > 2000) { // 超过2秒 showPerformanceWarning(label, measure.duration); } } } catch (error) { console.warn('性能测量失败:', error); } } return originalConsoleTimeEnd.apply(this, arguments); }; } /** * 显示性能警告 */ function showPerformanceWarning(operation, duration) { const warningEl = document.createElement('div'); warningEl.className = 'performance-warning'; warningEl.innerHTML = `