Skip to content

AE扩展主类

概述

AE扩展主类(AE Extension Main Class)是 Eagle2Ae AE 扩展 v2.4.0 的核心管理类,负责协调和管理扩展的所有组件。该类提供了扩展的初始化、生命周期管理、组件注册、事件处理等核心功能,是整个扩展系统的入口点和协调中心。

核心特性

组件生命周期管理

  • 自动初始化 - 自动初始化所有核心组件
  • 依赖管理 - 管理组件间的依赖关系
  • 延迟加载 - 支持组件的按需加载
  • 优雅关闭 - 提供组件清理和资源释放机制

事件驱动架构

  • 统一事件系统 - 提供全局事件总线
  • 组件间通信 - 支持组件间的松耦合通信
  • 事件监听管理 - 统一管理事件监听器
  • 事件过滤 - 支持事件的过滤和处理

扩展性支持

  • 插件架构 - 支持功能插件的动态加载
  • 模块化设计 - 支持功能模块的独立开发
  • API接口 - 提供标准化的外部接口
  • 配置管理 - 支持灵活的配置选项

性能监控

  • 性能指标 - 监控关键性能指标
  • 内存管理 - 管理内存使用和垃圾回收
  • 资源监控 - 监控系统资源使用情况
  • 错误统计 - 统计和分析错误发生情况

技术实现

核心类结构

javascript
/**
 * AE扩展主类
 * 负责管理整个扩展系统,协调各组件工作
 */
class AEExtension {
    /**
     * 构造函数
     */
    constructor() {
        // CEP接口
        this.csInterface = new CSInterface();
        
        // 核心组件实例
        this.components = {
            settingsManager: null,
            logManager: null,
            eagleConnectionManager: null,
            projectStatusChecker: null,
            importManager: null,
            exportManager: null,
            folderOpenerModule: null
        };
        
        // 状态管理
        this.status = {
            initialized: false,
            started: false,
            stopped: false,
            error: null,
            startTime: null
        };
        
        // 事件管理系统
        this.eventSystem = {
            listeners: new Map(),
            channels: new Set(),
            queue: [],
            maxQueueSize: 1000
        };
        
        // 性能监控
        this.performance = {
            metrics: new Map(),
            startTime: Date.now(),
            lastUpdate: Date.now()
        };
        
        // 扩展配置
        this.config = {
            enableDemoMode: false,
            demoModeOptions: {},
            performanceMonitoring: true,
            eventQueueSize: 1000,
            autoInitialize: true,
            autoStart: true
        };
        
        // 插件系统
        this.plugins = new Map();
        this.pluginRegistry = new Set();
        
        // 绑定方法上下文
        this.initialize = this.initialize.bind(this);
        this.start = this.start.bind(this);
        this.stop = this.stop.bind(this);
        this.onAppReady = this.onAppReady.bind(this);
        this.onExtensionLoaded = this.onExtensionLoaded.bind(this);
        this.handleEvent = this.handleEvent.bind(this);
        this.registerComponent = this.registerComponent.bind(this);
        this.getComponent = this.getComponent.bind(this);
        
        this.log('🔌 AE扩展主类已初始化', 'debug');
    }
}

组件初始化

javascript
/**
 * 初始化扩展
 * @returns {Promise<boolean>} 初始化结果
 */
async initialize() {
    try {
        this.log('🚀 开始初始化AE扩展...', 'info');
        
        // 设置初始状态
        this.status.startTime = Date.now();
        this.status.initialized = false;
        
        // 初始化CSInterface事件监听
        this.initializeCSInterface();
        
        // 检查运行环境
        if (!await this.checkEnvironment()) {
            throw new Error('扩展运行环境检查失败');
        }
        
        // 根据是否为Demo模式初始化组件
        if (this.config.enableDemoMode) {
            await this.initializeDemoMode();
        } else {
            await this.initializeNormalMode();
        }
        
        // 初始化核心组件
        await this.initializeCoreComponents();
        
        // 初始化事件系统
        await this.initializeEventSystem();
        
        // 初始化性能监控
        await this.initializePerformanceMonitoring();
        
        // 更新状态
        this.status.initialized = true;
        
        this.log('✅ AE扩展初始化完成', 'success');
        
        // 如果配置为自动启动,则启动扩展
        if (this.config.autoStart) {
            await this.start();
        }
        
        return true;
        
    } catch (error) {
        this.log(`❌ AE扩展初始化失败: ${error.message}`, 'error');
        
        // 更新错误状态
        this.status.error = error.message;
        this.status.initialized = false;
        
        return false;
    }
}

/**
 * 初始化CSInterface
 */
initializeCSInterface() {
    try {
        this.log('🔧 初始化CSInterface...', 'debug');
        
        // 注册应用就绪事件
        this.csInterface.addEventListener('com.adobe.csxs.events.ApplicationReady', this.onAppReady);
        
        // 注册扩展加载完成事件
        this.csInterface.addEventListener('com.adobe.csxs.events.ExtensionLoaded', this.onExtensionLoaded);
        
        // 注册其他必要的事件
        this.csInterface.addEventListener('com.adobe.csxs.events.InvokeCommand', this.handleInvokeCommand);
        
        // 设置调试模式
        if (this.config.enableDemoMode) {
            // 在Demo模式下,创建模拟的CSInterface
            this.initializeDemoCSInterface();
        }
        
        this.log('✅ CSInterface初始化完成', 'debug');
        
    } catch (error) {
        this.log(`❌ CSInterface初始化失败: ${error.message}`, 'error');
        throw error;
    }
}

/**
 * 初始化Demo模式
 */
async initializeDemoMode() {
    try {
        this.log('🎭 初始化Demo模式...', 'debug');
        
        // 创建模拟的全局对象
        window.demoEagle = {
            getConnectionStatus: () => ({
                connected: true,
                version: '2.3.0',
                libraryPath: 'C:/Demo/Eagle/Library',
                error: null
            }),
            addItemToLibrary: (item) => ({
                success: true,
                itemId: `demo_${Date.now()}`,
                message: 'Item added successfully in demo mode'
            })
        };
        
        window.demoProject = {
            getProjectStatus: () => ({
                exists: true,
                projectPath: 'C:/Demo/Project.aep',
                projectName: 'Demo Project.aep'
            }),
            getProjectInfo: () => ({
                projectPath: 'C:/Demo/Project.aep',
                projectName: 'Demo Project.aep',
                projectSaved: true,
                projectModified: false
            }),
            getActiveCompStatus: () => ({
                exists: true,
                compName: 'Demo Composition',
                compWidth: 1920,
                compHeight: 1080,
                compDuration: 10.0
            }),
            getActiveCompInfo: () => ({
                compName: 'Demo Composition',
                compWidth: 1920,
                compHeight: 1080,
                compDuration: 10.0,
                compFps: 29.97
            })
        };
        
        window.demoFileSystem = {
            showFolderPicker: (options) => ({
                success: true,
                folderPath: 'C:/Demo/Selected/Folder'
            }),
            openFolder: (folderPath) => ({
                success: true,
                folderPath: folderPath
            }),
            checkFolderPermissions: (folderPath) => ({
                success: true,
                permissions: {
                    readable: true,
                    writable: true,
                    executable: true
                }
            })
        };
        
        // 设置Demo模式标志
        window.__DEMO_MODE_ACTIVE__ = true;
        
        this.log('✅ Demo模式初始化完成', 'debug');
        
    } catch (error) {
        this.log(`❌ Demo模式初始化失败: ${error.message}`, 'error');
        throw error;
    }
}

/**
 * 初始化正常模式
 */
async initializeNormalMode() {
    try {
        this.log('🔧 初始化正常模式...', 'debug');
        
        // 验证CSInterface可用性
        const hostSpecs = this.csInterface.getHostEnvironment();
        if (!hostSpecs) {
            throw new Error('无法获取主机环境信息');
        }
        
        this.log(`🎯 主机环境: ${hostSpecs.appName} ${hostSpecs.appVersion}`, 'debug');
        
        // 检查AE版本兼容性
        if (!this.checkAECompatibility(hostSpecs.appVersion)) {
            throw new Error(`AE版本 ${hostSpecs.appVersion} 不兼容`);
        }
        
        this.log('✅ 正常模式初始化完成', 'debug');
        
    } catch (error) {
        this.log(`❌ 正常模式初始化失败: ${error.message}`, 'error');
        throw error;
    }
}

/**
 * 初始化核心组件
 */
async initializeCoreComponents() {
    try {
        this.log('⚙️ 初始化核心组件...', 'debug');
        
        // 初始化日志管理器
        this.components.logManager = new LogManager(this);
        this.log = this.components.logManager.log.bind(this.components.logManager);
        
        // 初始化设置管理器
        this.components.settingsManager = new SettingsManager(this);
        await this.components.settingsManager.loadSettings();
        
        // 初始化Eagle连接管理器
        this.components.eagleConnectionManager = new EagleConnectionManager(this);
        
        // 初始化项目状态检查器
        this.components.projectStatusChecker = new ProjectStatusChecker(this);
        
        // 初始化导入管理器
        this.components.importManager = new ImportManager(this);
        
        // 初始化导出管理器
        this.components.exportManager = new ExportManager(this);
        
        // 初始化文件夹打开模块
        this.components.folderOpenerModule = new FolderOpenerModule(this);
        
        // 记录组件初始化完成
        for (const [name, component] of Object.entries(this.components)) {
            if (component) {
                this.log(`✅ ${name} 初始化完成`, 'debug');
            }
        }
        
        this.log('✅ 核心组件初始化完成', 'success');
        
    } catch (error) {
        this.log(`❌ 核心组件初始化失败: ${error.message}`, 'error');
        throw error;
    }
}

/**
 * 初始化事件系统
 */
async initializeEventSystem() {
    try {
        this.log('📡 初始化事件系统...', 'debug');
        
        // 初始化事件通道
        this.eventSystem.channels.add('system');
        this.eventSystem.channels.add('ui');
        this.eventSystem.channels.add('data');
        this.eventSystem.channels.add('import');
        this.eventSystem.channels.add('export');
        
        // 注册系统事件监听器
        this.addEventListener('system', 'error', this.handleSystemError);
        this.addEventListener('system', 'warning', this.handleSystemWarning);
        this.addEventListener('data', 'settingsChanged', this.handleSettingsChange);
        
        this.log('✅ 事件系统初始化完成', 'debug');
        
    } catch (error) {
        this.log(`❌ 事件系统初始化失败: ${error.message}`, 'error');
        throw error;
    }
}

/**
 * 初始化性能监控
 */
async initializePerformanceMonitoring() {
    try {
        this.log('📊 初始化性能监控...', 'debug');
        
        // 设置性能监控间隔
        this.performance.updateInterval = setInterval(() => {
            this.updatePerformanceMetrics();
        }, 5000); // 每5秒更新一次
        
        // 初始化性能指标
        this.performance.metrics.set('initTime', Date.now() - this.performance.startTime);
        
        this.log('✅ 性能监控初始化完成', 'debug');
        
    } catch (error) {
        this.log(`❌ 性能监控初始化失败: ${error.message}`, 'error');
        throw error;
    }
}

/**
 * 检查运行环境
 * @returns {Promise<boolean>} 环境是否兼容
 */
async checkEnvironment() {
    try {
        this.log('🔍 检查运行环境...', 'debug');
        
        // 检查浏览器环境
        if (typeof window === 'undefined') {
            throw new Error('扩展必须在浏览器环境中运行');
        }
        
        // 检查CSInterface
        if (!this.csInterface) {
            throw new Error('CSInterface未初始化');
        }
        
        // 检查必要API
        const requiredApis = [
            'fetch',
            'Promise',
            'JSON',
            'localStorage',
            'console'
        ];
        
        for (const api of requiredApis) {
            if (!(api in window)) {
                throw new Error(`缺少必要API: ${api}`);
            }
        }
        
        this.log('✅ 运行环境检查通过', 'debug');
        return true;
        
    } catch (error) {
        this.log(`❌ 运行环境检查失败: ${error.message}`, 'error');
        return false;
    }
}

/**
 * 检查AE兼容性
 * @param {string} version - AE版本
 * @returns {boolean} 是否兼容
 */
checkAECompatibility(version) {
    try {
        // 解析版本号
        const versionParts = version.split('.');
        const majorVersion = parseInt(versionParts[0]);
        
        // 根据扩展要求设置兼容性检查
        if (isNaN(majorVersion)) {
            return false;
        }
        
        // 假设扩展支持AE CC 2019及更高版本
        // 可以根据实际需求调整
        return majorVersion >= 16; // AE CC 2019是版本16
        
    } catch (error) {
        this.log(`检查AE兼容性失败: ${error.message}`, 'error');
        return false;
    }
}

事件处理系统

javascript
/**
 * 处理应用就绪事件
 * @param {Object} event - 事件对象
 */
onAppReady(event) {
    try {
        this.log('🎯 应用就绪事件触发', 'info');
        
        // 发布应用就绪事件
        this.emitEvent('system', 'appReady', {
            timestamp: Date.now(),
            event: event
        });
        
    } catch (error) {
        this.log(`处理应用就绪事件失败: ${error.message}`, 'error');
    }
}

/**
 * 处理扩展加载完成事件
 * @param {Object} event - 事件对象
 */
onExtensionLoaded(event) {
    try {
        this.log('📦 扩展加载完成事件触发', 'info');
        
        // 发布扩展加载完成事件
        this.emitEvent('system', 'extensionLoaded', {
            timestamp: Date.now(),
            event: event
        });
        
    } catch (error) {
        this.log(`处理扩展加载完成事件失败: ${error.message}`, 'error');
    }
}

/**
 * 处理命令调用事件
 * @param {Object} event - 事件对象
 */
handleInvokeCommand(event) {
    try {
        this.log(`📥 命令调用: ${event.data ? event.data.get('command') : 'unknown'}`, 'debug');
        
        // 根据命令类型处理
        const command = event.data ? event.data.get('command') : null;
        
        switch (command) {
            case 'refresh':
                this.handleRefreshCommand(event);
                break;
            case 'settings':
                this.handleSettingsCommand(event);
                break;
            case 'help':
                this.handleHelpCommand(event);
                break;
            default:
                this.log(`未知命令: ${command}`, 'warning');
        }
        
    } catch (error) {
        this.log(`处理命令调用事件失败: ${error.message}`, 'error');
    }
}

/**
 * 处理刷新命令
 * @param {Object} event - 事件对象
 */
handleRefreshCommand(event) {
    try {
        this.log('🔄 处理刷新命令', 'debug');
        
        // 刷新组件状态
        if (this.components.projectStatusChecker) {
            this.components.projectStatusChecker.updateProjectStatus();
        }
        
        if (this.components.eagleConnectionManager) {
            this.components.eagleConnectionManager.checkConnection();
        }
        
        // 发布刷新完成事件
        this.emitEvent('system', 'refreshComplete', {
            timestamp: Date.now(),
            command: 'refresh'
        });
        
    } catch (error) {
        this.log(`处理刷新命令失败: ${error.message}`, 'error');
    }
}

/**
 * 处理设置命令
 * @param {Object} event - 事件对象
 */
handleSettingsCommand(event) {
    try {
        this.log('⚙️ 处理设置命令', 'debug');
        
        // 显示设置面板或执行设置相关操作
        if (this.components.settingsManager) {
            // 这里可以实现打开设置面板的逻辑
            this.emitEvent('ui', 'showSettings', {
                timestamp: Date.now(),
                command: 'settings'
            });
        }
        
    } catch (error) {
        this.log(`处理设置命令失败: ${error.message}`, 'error');
    }
}

/**
 * 处理帮助命令
 * @param {Object} event - 事件对象
 */
handleHelpCommand(event) {
    try {
        this.log('❓ 处理帮助命令', 'debug');
        
        // 显示帮助信息
        this.emitEvent('ui', 'showHelp', {
            timestamp: Date.now(),
            command: 'help',
            helpContent: this.getHelpContent()
        });
        
    } catch (error) {
        this.log(`处理帮助命令失败: ${error.message}`, 'error');
    }
}

/**
 * 获取帮助内容
 * @returns {Object} 帮助内容
 */
getHelpContent() {
    return {
        title: 'Eagle2AE 扩展帮助',
        version: '2.4.0',
        features: [
            '从Eagle导入素材到AE',
            '从AE导出素材到Eagle',
            'AE项目文件夹打开',
            'Eagle资源库文件夹打开',
            '自定义文件夹打开',
            '多种导入模式'
        ],
        commands: {
            'refresh': '刷新扩展状态',
            'settings': '打开设置面板',
            'help': '显示帮助信息'
        },
        support: 'https://eagle.cool/support'
    };
}

/**
 * 发布事件
 * @param {string} channel - 事件通道
 * @param {string} type - 事件类型
 * @param {Object} data - 事件数据
 * @returns {boolean} 是否发布成功
 */
emitEvent(channel, type, data = {}) {
    try {
        const event = {
            id: this.generateEventId(),
            channel: channel,
            type: type,
            data: data,
            timestamp: Date.now(),
            source: 'AEExtension'
        };
        
        // 添加到事件队列
        this.eventSystem.queue.push(event);
        
        // 限制队列大小
        if (this.eventSystem.queue.length > this.eventSystem.maxQueueSize) {
            this.eventSystem.queue.shift(); // 移除最早的时间
        }
        
        // 通知监听器
        const eventTypeKey = `${channel}:${type}`;
        if (this.eventSystem.listeners.has(eventTypeKey)) {
            const listeners = this.eventSystem.listeners.get(eventTypeKey);
            for (const listener of listeners) {
                try {
                    listener(event);
                } catch (listenerError) {
                    this.log(`事件监听器执行失败: ${listenerError.message}`, 'error');
                }
            }
        }
        
        // 通知通配符监听器
        const wildcardListeners = this.eventSystem.listeners.get('*');
        if (wildcardListeners) {
            for (const listener of wildcardListeners) {
                try {
                    listener(event);
                } catch (listenerError) {
                    this.log(`通配符监听器执行失败: ${listenerError.message}`, 'error');
                }
            }
        }
        
        // 记录事件日志
        this.log(`📤 事件发布: ${eventTypeKey}`, 'debug', { event: event });
        
        return true;
        
    } catch (error) {
        this.log(`发布事件失败: ${error.message}`, 'error');
        return false;
    }
}

/**
 * 添加事件监听器
 * @param {string} channel - 事件通道
 * @param {string} type - 事件类型
 * @param {Function} listener - 监听器函数
 * @returns {Function} 移除监听器的函数
 */
addEventListener(channel, type, listener) {
    try {
        if (typeof listener !== 'function') {
            throw new Error('监听器必须是函数');
        }
        
        const eventTypeKey = `${channel}:${type}`;
        
        if (!this.eventSystem.listeners.has(eventTypeKey)) {
            this.eventSystem.listeners.set(eventTypeKey, new Set());
        }
        
        const listeners = this.eventSystem.listeners.get(eventTypeKey);
        listeners.add(listener);
        
        this.log(`👂 添加事件监听器: ${eventTypeKey}`, 'debug');
        
        // 返回移除监听器的函数
        return () => {
            this.removeEventListener(channel, type, listener);
        };
        
    } catch (error) {
        this.log(`添加事件监听器失败: ${error.message}`, 'error');
        return () => {}; // 返回空函数
    }
}

/**
 * 移除事件监听器
 * @param {string} channel - 事件通道
 * @param {string} type - 事件类型
 * @param {Function} listener - 监听器函数
 */
removeEventListener(channel, type, listener) {
    try {
        const eventTypeKey = `${channel}:${type}`;
        
        if (this.eventSystem.listeners.has(eventTypeKey)) {
            const listeners = this.eventSystem.listeners.get(eventTypeKey);
            listeners.delete(listener);
            
            // 如果监听器集合为空,删除键
            if (listeners.size === 0) {
                this.eventSystem.listeners.delete(eventTypeKey);
            }
            
            this.log(`👂 移除事件监听器: ${eventTypeKey}`, 'debug');
        }
        
    } catch (error) {
        this.log(`移除事件监听器失败: ${error.message}`, 'error');
    }
}

/**
 * 添加通配符事件监听器
 * @param {Function} listener - 监听器函数
 * @returns {Function} 移除监听器的函数
 */
addWildcardListener(listener) {
    return this.addEventListener('*', '*', listener);
}

/**
 * 生成事件ID
 * @returns {string} 事件ID
 */
generateEventId() {
    return `event_${Date.now()}_${Math.random().toString(36).substr(2, 9)}`;
}

组件管理

javascript
/**
 * 注册组件
 * @param {string} name - 组件名称
 * @param {Object} component - 组件实例
 * @returns {boolean} 是否注册成功
 */
registerComponent(name, component) {
    try {
        if (!name || typeof name !== 'string') {
            throw new Error('组件名称必须是字符串');
        }
        
        if (!component) {
            throw new Error('组件实例不能为空');
        }
        
        this.components[name] = component;
        
        this.log(`⚙️ 组件注册成功: ${name}`, 'debug');
        
        // 如果组件有初始化方法,调用它
        if (typeof component.initialize === 'function') {
            component.initialize();
        }
        
        // 发布组件注册事件
        this.emitEvent('system', 'componentRegistered', {
            name: name,
            component: component
        });
        
        return true;
        
    } catch (error) {
        this.log(`注册组件失败: ${error.message}`, 'error');
        return false;
    }
}

/**
 * 获取组件
 * @param {string} name - 组件名称
 * @returns {Object|null} 组件实例
 */
getComponent(name) {
    try {
        if (!name || typeof name !== 'string') {
            throw new Error('组件名称必须是字符串');
        }
        
        const component = this.components[name];
        
        if (!component) {
            this.log(`⚠️ 组件不存在: ${name}`, 'warning');
            return null;
        }
        
        this.log(`🔍 获取组件: ${name}`, 'debug');
        return component;
        
    } catch (error) {
        this.log(`获取组件失败: ${error.message}`, 'error');
        return null;
    }
}

/**
 * 检查组件是否已注册
 * @param {string} name - 组件名称
 * @returns {boolean} 是否已注册
 */
hasComponent(name) {
    return this.components.hasOwnProperty(name) && this.components[name] !== null;
}

/**
 * 移除组件
 * @param {string} name - 组件名称
 * @returns {boolean} 是否移除成功
 */
removeComponent(name) {
    try {
        if (!name || typeof name !== 'string') {
            throw new Error('组件名称必须是字符串');
        }
        
        if (!this.components.hasOwnProperty(name)) {
            return false;
        }
        
        // 如果组件有清理方法,调用它
        const component = this.components[name];
        if (component && typeof component.cleanup === 'function') {
            component.cleanup();
        }
        
        this.components[name] = null;
        delete this.components[name];
        
        this.log(`⚙️ 组件移除成功: ${name}`, 'debug');
        
        // 发布组件移除事件
        this.emitEvent('system', 'componentRemoved', {
            name: name
        });
        
        return true;
        
    } catch (error) {
        this.log(`移除组件失败: ${error.message}`, 'error');
        return false;
    }
}

扩展生命周期管理

javascript
/**
 * 启动扩展
 * @returns {Promise<boolean>} 启动结果
 */
async start() {
    try {
        this.log('🎬 开始启动AE扩展...', 'info');
        
        if (!this.status.initialized) {
            this.log('❌ 扩展未初始化,无法启动', 'error');
            return false;
        }
        
        if (this.status.started) {
            this.log('⚠️ 扩展已在运行中', 'warning');
            return true;
        }
        
        // 更新状态
        this.status.started = true;
        
        // 启动各组件
        await this.startComponents();
        
        // 启动插件系统
        await this.startPlugins();
        
        // 发布启动完成事件
        this.emitEvent('system', 'startupComplete', {
            timestamp: Date.now(),
            startupTime: Date.now() - this.status.startTime
        });
        
        this.log('✅ AE扩展启动完成', 'success');
        return true;
        
    } catch (error) {
        this.log(`❌ AE扩展启动失败: ${error.message}`, 'error');
        
        // 更新错误状态
        this.status.error = error.message;
        this.status.started = false;
        
        return false;
    }
}

/**
 * 启动组件
 */
async startComponents() {
    try {
        this.log('⚙️ 启动核心组件...', 'debug');
        
        // 依次启动各组件
        const componentsToStart = [
            'logManager',
            'settingsManager',
            'eagleConnectionManager',
            'projectStatusChecker',
            'importManager',
            'exportManager',
            'folderOpenerModule'
        ];
        
        for (const componentName of componentsToStart) {
            const component = this.components[componentName];
            if (component && typeof component.start === 'function') {
                try {
                    await component.start();
                    this.log(`✅ ${componentName} 启动完成`, 'debug');
                } catch (startError) {
                    this.log(`⚠️ ${componentName} 启动失败: ${startError.message}`, 'warning');
                    // 继续启动其他组件
                }
            }
        }
        
        this.log('✅ 核心组件启动完成', 'debug');
        
    } catch (error) {
        this.log(`启动组件失败: ${error.message}`, 'error');
        throw error;
    }
}

/**
 * 启动插件
 */
async startPlugins() {
    try {
        this.log('🔌 启动插件...', 'debug');
        
        for (const [pluginId, plugin] of this.plugins) {
            try {
                if (typeof plugin.start === 'function') {
                    await plugin.start();
                    this.log(`✅ 插件启动完成: ${pluginId}`, 'debug');
                }
            } catch (pluginError) {
                this.log(`⚠️ 插件启动失败: ${pluginId} - ${pluginError.message}`, 'warning');
            }
        }
        
        this.log('✅ 插件启动完成', 'debug');
        
    } catch (error) {
        this.log(`启动插件失败: ${error.message}`, 'error');
        throw error;
    }
}

/**
 * 停止扩展
 * @returns {Promise<boolean>} 停止结果
 */
async stop() {
    try {
        this.log('🛑 开始停止AE扩展...', 'info');
        
        if (!this.status.started) {
            this.log('⚠️ 扩展未启动', 'warning');
            return true;
        }
        
        // 发布停止开始事件
        this.emitEvent('system', 'shutdownStart', {
            timestamp: Date.now()
        });
        
        // 停止插件
        await this.stopPlugins();
        
        // 停止组件
        await this.stopComponents();
        
        // 停止事件系统
        await this.stopEventSystem();
        
        // 停止性能监控
        await this.stopPerformanceMonitoring();
        
        // 清理CSInterface事件监听
        this.cleanupCSInterface();
        
        // 更新状态
        this.status.started = false;
        this.status.stopped = true;
        
        // 发布停止完成事件
        this.emitEvent('system', 'shutdownComplete', {
            timestamp: Date.now(),
            shutdownTime: Date.now() - this.status.startTime
        });
        
        this.log('✅ AE扩展停止完成', 'success');
        return true;
        
    } catch (error) {
        this.log(`❌ AE扩展停止失败: ${error.message}`, 'error');
        
        // 更新错误状态
        this.status.error = error.message;
        return false;
    }
}

/**
 * 停止插件
 */
async stopPlugins() {
    try {
        this.log('🔌 停止插件...', 'debug');
        
        for (const [pluginId, plugin] of this.plugins) {
            try {
                if (typeof plugin.stop === 'function') {
                    await plugin.stop();
                    this.log(`✅ 插件停止完成: ${pluginId}`, 'debug');
                }
            } catch (pluginError) {
                this.log(`⚠️ 插件停止失败: ${pluginId} - ${pluginError.message}`, 'warning');
            }
        }
        
        // 清空插件注册表
        this.pluginRegistry.clear();
        
        this.log('✅ 插件停止完成', 'debug');
        
    } catch (error) {
        this.log(`停止插件失败: ${error.message}`, 'error');
        throw error;
    }
}

/**
 * 停止组件
 */
async stopComponents() {
    try {
        this.log('⚙️ 停止核心组件...', 'debug');
        
        // 按相反顺序停止组件(依赖倒置)
        const componentsToStop = [
            'folderOpenerModule',
            'exportManager',
            'importManager',
            'projectStatusChecker',
            'eagleConnectionManager',
            'settingsManager',
            'logManager'
        ];
        
        for (const componentName of componentsToStop) {
            const component = this.components[componentName];
            if (component && typeof component.stop === 'function') {
                try {
                    await component.stop();
                    this.log(`✅ ${componentName} 停止完成`, 'debug');
                } catch (stopError) {
                    this.log(`⚠️ ${componentName} 停止失败: ${stopError.message}`, 'warning');
                }
            }
        }
        
        this.log('✅ 核心组件停止完成', 'debug');
        
    } catch (error) {
        this.log(`停止组件失败: ${error.message}`, 'error');
        throw error;
    }
}

/**
 * 停止事件系统
 */
async stopEventSystem() {
    try {
        this.log('📡 停止事件系统...', 'debug');
        
        // 清空事件监听器
        this.eventSystem.listeners.clear();
        
        // 清空事件队列
        this.eventSystem.queue = [];
        
        // 清空事件通道
        this.eventSystem.channels.clear();
        
        this.log('✅ 事件系统停止完成', 'debug');
        
    } catch (error) {
        this.log(`停止事件系统失败: ${error.message}`, 'error');
        throw error;
    }
}

/**
 * 停止性能监控
 */
async stopPerformanceMonitoring() {
    try {
        this.log('📊 停止性能监控...', 'debug');
        
        // 清除性能监控定时器
        if (this.performance.updateInterval) {
            clearInterval(this.performance.updateInterval);
            this.performance.updateInterval = null;
        }
        
        // 清空性能指标
        this.performance.metrics.clear();
        
        this.log('✅ 性能监控停止完成', 'debug');
        
    } catch (error) {
        this.log(`停止性能监控失败: ${error.message}`, 'error');
        throw error;
    }
}

/**
 * 清理CSInterface
 */
cleanupCSInterface() {
    try {
        this.log('🔧 清理CSInterface...', 'debug');
        
        // 移除事件监听器
        this.csInterface.removeEventListener('com.adobe.csxs.events.ApplicationReady', this.onAppReady);
        this.csInterface.removeEventListener('com.adobe.csxs.events.ExtensionLoaded', this.onExtensionLoaded);
        this.csInterface.removeEventListener('com.adobe.csxs.events.InvokeCommand', this.handleInvokeCommand);
        
        this.log('✅ CSInterface清理完成', 'debug');
        
    } catch (error) {
        this.log(`清理CSInterface失败: ${error.message}`, 'error');
    }
}

性能监控

javascript
/**
 * 更新性能指标
 */
updatePerformanceMetrics() {
    try {
        const now = Date.now();
        const elapsed = now - this.performance.lastUpdate;
        
        // 更新基本指标
        this.performance.metrics.set('uptime', now - this.performance.startTime);
        this.performance.metrics.set('lastUpdate', now);
        this.performance.metrics.set('updateInterval', elapsed);
        
        // 内存使用情况(如果可用)
        if (performance.memory) {
            this.performance.metrics.set('memoryUsed', performance.memory.usedJSHeapSize);
            this.performance.metrics.set('memoryTotal', performance.memory.totalJSHeapSize);
            this.performance.metrics.set('memoryLimit', performance.memory.jsHeapSizeLimit);
        }
        
        // 事件队列大小
        this.performance.metrics.set('eventQueueSize', this.eventSystem.queue.length);
        
        // 组件状态
        const componentStatus = {};
        for (const [name, component] of Object.entries(this.components)) {
            componentStatus[name] = component !== null;
        }
        this.performance.metrics.set('components', componentStatus);
        
        // 插件状态
        this.performance.metrics.set('pluginCount', this.plugins.size);
        
        this.performance.lastUpdate = now;
        
        // 检查是否需要记录性能日志
        if (this.config.performanceMonitoring) {
            this.logPerformanceMetrics();
        }
        
    } catch (error) {
        this.log(`更新性能指标失败: ${error.message}`, 'error');
    }
}

/**
 * 记录性能指标日志
 */
logPerformanceMetrics() {
    try {
        const memoryUsed = this.performance.metrics.get('memoryUsed');
        const memoryLimit = this.performance.metrics.get('memoryLimit');
        
        if (memoryUsed && memoryLimit) {
            const memoryPercentage = (memoryUsed / memoryLimit * 100).toFixed(2);
            
            if (memoryPercentage > 80) {
                this.log(`⚠️ 内存使用率过高: ${memoryPercentage}%`, 'warning', {
                    used: memoryUsed,
                    limit: memoryLimit
                });
            }
        }
        
        // 记录其他重要指标
        const uptime = this.performance.metrics.get('uptime');
        const eventQueueSize = this.performance.metrics.get('eventQueueSize');
        
        if (eventQueueSize > this.eventSystem.maxQueueSize * 0.8) {
            this.log(`⚠️ 事件队列接近满载: ${eventQueueSize}/${this.eventSystem.maxQueueSize}`, 'warning');
        }
        
    } catch (error) {
        this.log(`记录性能指标日志失败: ${error.message}`, 'error');
    }
}

/**
 * 获取性能报告
 * @returns {Object} 性能报告
 */
getPerformanceReport() {
    const report = {
        timestamp: Date.now(),
        uptime: this.performance.metrics.get('uptime'),
        memory: {
            used: this.performance.metrics.get('memoryUsed'),
            total: this.performance.metrics.get('memoryTotal'),
            limit: this.performance.metrics.get('memoryLimit')
        },
        eventQueue: {
            size: this.eventSystem.queue.length,
            maxSize: this.eventSystem.maxQueueSize
        },
        components: Object.keys(this.components).filter(name => this.components[name] !== null),
        plugins: Array.from(this.plugins.keys()),
        metrics: Object.fromEntries(this.performance.metrics)
    };
    
    return report;
}

/**
 * 获取系统状态
 * @returns {Object} 系统状态
 */
getSystemStatus() {
    return {
        status: {
            initialized: this.status.initialized,
            started: this.status.started,
            stopped: this.status.stopped,
            error: this.status.error
        },
        components: this.getComponentStatus(),
        performance: this.getPerformanceReport(),
        events: {
            queueSize: this.eventSystem.queue.length,
            channels: Array.from(this.eventSystem.channels)
        }
    };
}

/**
 * 获取组件状态
 * @returns {Object} 组件状态
 */
getComponentStatus() {
    const status = {};
    
    for (const [name, component] of Object.entries(this.components)) {
        status[name] = {
            registered: component !== null,
            ready: component && typeof component.ready === 'function' ? component.ready() : true
        };
    }
    
    return status;
}

插件系统

javascript
/**
 * 注册插件
 * @param {string} pluginId - 插件ID
 * @param {Object} plugin - 插件对象
 * @returns {boolean} 是否注册成功
 */
registerPlugin(pluginId, plugin) {
    try {
        if (!pluginId || typeof pluginId !== 'string') {
            throw new Error('插件ID必须是字符串');
        }
        
        if (!plugin || typeof plugin !== 'object') {
            throw new Error('插件必须是对象');
        }
        
        if (this.plugins.has(pluginId)) {
            throw new Error(`插件已存在: ${pluginId}`);
        }
        
        // 验证插件接口
        if (!this.validatePluginInterface(plugin)) {
            throw new Error(`插件接口验证失败: ${pluginId}`);
        }
        
        this.plugins.set(pluginId, plugin);
        this.pluginRegistry.add(pluginId);
        
        this.log(`🔌 插件注册成功: ${pluginId}`, 'debug');
        
        // 如果扩展已启动且插件有start方法,立即启动插件
        if (this.status.started && typeof plugin.start === 'function') {
            plugin.start();
        }
        
        // 发布插件注册事件
        this.emitEvent('system', 'pluginRegistered', {
            pluginId: pluginId,
            plugin: plugin
        });
        
        return true;
        
    } catch (error) {
        this.log(`注册插件失败: ${error.message}`, 'error');
        return false;
    }
}

/**
 * 验证插件接口
 * @param {Object} plugin - 插件对象
 * @returns {boolean} 是否验证通过
 */
validatePluginInterface(plugin) {
    try {
        // 检查必需的方法
        const requiredMethods = ['initialize', 'start', 'stop'];
        
        for (const method of requiredMethods) {
            if (typeof plugin[method] !== 'function') {
                this.log(`插件缺少必需方法: ${method}`, 'error');
                return false;
            }
        }
        
        // 检查可选方法
        const optionalMethods = ['onExtensionReady', 'onSettingsChange', 'onProjectChange'];
        
        for (const method of optionalMethods) {
            if (plugin[method] && typeof plugin[method] !== 'function') {
                this.log(`插件可选方法类型错误: ${method}`, 'warning');
            }
        }
        
        return true;
        
    } catch (error) {
        this.log(`验证插件接口失败: ${error.message}`, 'error');
        return false;
    }
}

/**
 * 移除插件
 * @param {string} pluginId - 插件ID
 * @returns {boolean} 是否移除成功
 */
removePlugin(pluginId) {
    try {
        if (!pluginId || typeof pluginId !== 'string') {
            throw new Error('插件ID必须是字符串');
        }
        
        if (!this.plugins.has(pluginId)) {
            return false;
        }
        
        const plugin = this.plugins.get(pluginId);
        
        // 如果插件正在运行,先停止它
        if (this.status.started && typeof plugin.stop === 'function') {
            plugin.stop();
        }
        
        this.plugins.delete(pluginId);
        this.pluginRegistry.delete(pluginId);
        
        this.log(`🔌 插件移除成功: ${pluginId}`, 'debug');
        
        // 发布插件移除事件
        this.emitEvent('system', 'pluginRemoved', {
            pluginId: pluginId
        });
        
        return true;
        
    } catch (error) {
        this.log(`移除插件失败: ${error.message}`, 'error');
        return false;
    }
}

/**
 * 获取插件
 * @param {string} pluginId - 插件ID
 * @returns {Object|null} 插件对象
 */
getPlugin(pluginId) {
    try {
        if (!pluginId || typeof pluginId !== 'string') {
            throw new Error('插件ID必须是字符串');
        }
        
        return this.plugins.get(pluginId) || null;
        
    } catch (error) {
        this.log(`获取插件失败: ${error.message}`, 'error');
        return null;
    }
}

/**
 * 获取所有插件ID
 * @returns {Array} 插件ID数组
 */
getPluginIds() {
    return Array.from(this.plugins.keys());
}

API参考

核心方法

AEExtension

AE扩展主类

javascript
/**
 * AE扩展主类
 * 负责管理整个扩展系统,协调各组件工作
 */
class AEExtension

constructor()

构造函数

javascript
/**
 * 构造函数
 */
constructor()

initialize()

初始化扩展

javascript
/**
 * 初始化扩展
 * @returns {Promise<boolean>} 初始化结果
 */
async initialize()

start()

启动扩展

javascript
/**
 * 启动扩展
 * @returns {Promise<boolean>} 启动结果
 */
async start()

stop()

停止扩展

javascript
/**
 * 停止扩展
 * @returns {Promise<boolean>} 停止结果
 */
async stop()

emitEvent()

发布事件

javascript
/**
 * 发布事件
 * @param {string} channel - 事件通道
 * @param {string} type - 事件类型
 * @param {Object} data - 事件数据
 * @returns {boolean} 是否发布成功
 */
emitEvent(channel, type, data = {})

addEventListener()

添加事件监听器

javascript
/**
 * 添加事件监听器
 * @param {string} channel - 事件通道
 * @param {string} type - 事件类型
 * @param {Function} listener - 监听器函数
 * @returns {Function} 移除监听器的函数
 */
addEventListener(channel, type, listener)

removeEventListener()

移除事件监听器

javascript
/**
 * 移除事件监听器
 * @param {string} channel - 事件通道
 * @param {string} type - 事件类型
 * @param {Function} listener - 监听器函数
 */
removeEventListener(channel, type, listener)

addWildcardListener()

添加通配符事件监听器

javascript
/**
 * 添加通配符事件监听器
 * @param {Function} listener - 监听器函数
 * @returns {Function} 移除监听器的函数
 */
addWildcardListener(listener)

registerComponent()

注册组件

javascript
/**
 * 注册组件
 * @param {string} name - 组件名称
 * @param {Object} component - 组件实例
 * @returns {boolean} 是否注册成功
 */
registerComponent(name, component)

getComponent()

获取组件

javascript
/**
 * 获取组件
 * @param {string} name - 组件名称
 * @returns {Object|null} 组件实例
 */
getComponent(name)

hasComponent()

检查组件是否已注册

javascript
/**
 * 检查组件是否已注册
 * @param {string} name - 组件名称
 * @returns {boolean} 是否已注册
 */
hasComponent(name)

removeComponent()

移除组件

javascript
/**
 * 移除组件
 * @param {string} name - 组件名称
 * @returns {boolean} 是否移除成功
 */
removeComponent(name)

registerPlugin()

注册插件

javascript
/**
 * 注册插件
 * @param {string} pluginId - 插件ID
 * @param {Object} plugin - 插件对象
 * @returns {boolean} 是否注册成功
 */
registerPlugin(pluginId, plugin)

removePlugin()

移除插件

javascript
/**
 * 移除插件
 * @param {string} pluginId - 插件ID
 * @returns {boolean} 是否移除成功
 */
removePlugin(pluginId)

getPlugin()

获取插件

javascript
/**
 * 获取插件
 * @param {string} pluginId - 插件ID
 * @returns {Object|null} 插件对象
 */
getPlugin(pluginId)

getPerformanceReport()

获取性能报告

javascript
/**
 * 获取性能报告
 * @returns {Object} 性能报告
 */
getPerformanceReport()

getSystemStatus()

获取系统状态

javascript
/**
 * 获取系统状态
 * @returns {Object} 系统状态
 */
getSystemStatus()

组件接口

javascript
/**
 * 标准组件接口
 * @typedef {Object} ComponentInterface
 * @property {Function} initialize - 初始化方法
 * @property {Function} start - 启动方法
 * @property {Function} stop - 停止方法
 * @property {Function} cleanup - 清理方法
 * @property {Function} ready - 就绪状态检查方法
 */

插件接口

javascript
/**
 * 标准插件接口
 * @typedef {Object} PluginInterface
 * @property {Function} initialize - 初始化方法
 * @property {Function} start - 启动方法
 * @property {Function} stop - 停止方法
 * @property {Function} [onExtensionReady] - 扩展就绪时调用
 * @property {Function} [onSettingsChange] - 设置变更时调用
 * @property {Function} [onProjectChange] - 项目变更时调用
 */

使用示例

基本使用

扩展初始化和启动

javascript
// 创建扩展实例
const aeExtension = new AEExtension();

// 配置扩展(可选)
aeExtension.config.enableDemoMode = true; // 开启Demo模式
aeExtension.config.performanceMonitoring = true; // 启用性能监控

// 初始化扩展
const initResult = await aeExtension.initialize();
if (initResult) {
    console.log('✅ 扩展初始化成功');
} else {
    console.error('❌ 扩展初始化失败');
}

// 启动扩展(如果autoStart为false)
const startResult = await aeExtension.start();
if (startResult) {
    console.log('✅ 扩展启动成功');
} else {
    console.error('❌ 扩展启动失败');
}

// 获取系统状态
const status = aeExtension.getSystemStatus();
console.log('系统状态:', status);

组件管理

javascript
// 获取组件
const logManager = aeExtension.getComponent('logManager');
const settingsManager = aeExtension.getComponent('settingsManager');

// 使用组件
logManager.info('Extension is running');
const currentSettings = settingsManager.getSettings();

// 检查组件状态
console.log('Log manager ready:', aeExtension.hasComponent('logManager'));
console.log('Settings manager ready:', aeExtension.hasComponent('settingsManager'));

// 注册自定义组件
class CustomComponent {
    constructor() {
        this.name = 'CustomComponent';
        this.initialized = false;
    }
    
    async initialize() {
        console.log('Custom component initializing...');
        this.initialized = true;
    }
    
    async start() {
        console.log('Custom component starting...');
    }
    
    async stop() {
        console.log('Custom component stopping...');
    }
    
    cleanup() {
        console.log('Custom component cleaning up...');
        this.initialized = false;
    }
    
    ready() {
        return this.initialized;
    }
}

// 注册自定义组件
const customComponent = new CustomComponent();
const registerResult = aeExtension.registerComponent('customComponent', customComponent);
if (registerResult) {
    console.log('✅ 自定义组件注册成功');
    
    // 获取并使用自定义组件
    const retrievedComponent = aeExtension.getComponent('customComponent');
    console.log('Retrieved component:', retrievedComponent.name);
}

事件处理

javascript
// 监听系统事件
const removeSystemListener = aeExtension.addEventListener('system', 'appReady', (event) => {
    console.log('📱 应用就绪:', event.data);
    
    // 可以在这里执行应用就绪后的初始化逻辑
    onAppReady(event.data);
});

// 监听数据事件
const removeDataListener = aeExtension.addEventListener('data', 'settingsChanged', (event) => {
    console.log('⚙️ 设置变更:', event.data);
    
    // 处理设置变更
    handleSettingsChange(event.data);
});

// 监听UI事件
const removeUIListener = aeExtension.addEventListener('ui', 'userAction', (event) => {
    console.log('👤 用户操作:', event.data);
    
    // 处理用户操作
    handleUserAction(event.data);
});

// 监听通配符事件(监听所有事件)
const removeWildcardListener = aeExtension.addWildcardListener((event) => {
    console.log('📡 收到事件:', event.channel, event.type, event.data);
});

// 发布自定义事件
aeExtension.emitEvent('ui', 'showNotification', {
    message: 'Hello from extension!',
    type: 'info',
    duration: 3000
});

// 发布数据事件
aeExtension.emitEvent('data', 'importComplete', {
    importedFiles: ['file1.png', 'file2.jpg'],
    importTime: 2500,
    success: true
});

// 使用完成后移除监听器
// removeSystemListener();
// removeDataListener();
// removeUIListener();
// removeWildcardListener();

高级使用

插件开发

javascript
// 创建插件类
class SamplePlugin {
    constructor() {
        this.id = 'sample-plugin';
        this.name = 'Sample Plugin';
        this.version = '1.0.0';
        this.initialized = false;
    }
    
    async initialize() {
        console.log('🔌 插件初始化:', this.name);
        
        // 插件初始化逻辑
        this.initialized = true;
        
        // 注册插件特定的事件监听器
        this.setupEventListeners();
        
        return true;
    }
    
    async start() {
        console.log('🔌 插件启动:', this.name);
        
        // 插件启动逻辑
        this.setupUI();
        this.startBackgroundTasks();
        
        return true;
    }
    
    async stop() {
        console.log('🔌 插件停止:', this.name);
        
        // 插件停止逻辑
        this.cleanupUI();
        this.stopBackgroundTasks();
        
        return true;
    }
    
    setupEventListeners() {
        // 设置插件特定的事件监听
        console.log('🔌 设置插件事件监听');
    }
    
    setupUI() {
        // 设置插件UI
        console.log('🔌 设置插件UI');
    }
    
    startBackgroundTasks() {
        // 启动后台任务
        console.log('🔌 启动后台任务');
    }
    
    cleanupUI() {
        // 清理插件UI
        console.log('🔌 清理插件UI');
    }
    
    stopBackgroundTasks() {
        // 停止后台任务
        console.log('🔌 停止后台任务');
    }
    
    onExtensionReady() {
        console.log('🔌 插件:扩展就绪');
    }
    
    onSettingsChange(settings) {
        console.log('🔌 插件:设置变更', settings);
    }
    
    onProjectChange(project) {
        console.log('🔌 插件:项目变更', project);
    }
}

// 使用插件
const aeExtension = new AEExtension();

// 创建插件实例
const samplePlugin = new SamplePlugin();

// 注册插件
const registerPluginResult = aeExtension.registerPlugin(samplePlugin.id, samplePlugin);
if (registerPluginResult) {
    console.log('✅ 插件注册成功');
}

// 获取插件
const retrievedPlugin = aeExtension.getPlugin(samplePlugin.id);
console.log('获取的插件:', retrievedPlugin);

// 获取所有插件ID
const pluginIds = aeExtension.getPluginIds();
console.log('所有插件ID:', pluginIds);

// 启动扩展(会自动启动已注册的插件)
await aeExtension.start();

性能监控和优化

javascript
// 创建性能监控助手
class PerformanceMonitor {
    constructor(aeExtension) {
        this.aeExtension = aeExtension;
        this.monitorInterval = null;
        this.metricsHistory = [];
        this.maxHistory = 100;
    }
    
    /**
     * 开始性能监控
     */
    startMonitoring() {
        if (this.monitorInterval) {
            console.log('📊 性能监控已在运行');
            return;
        }
        
        this.monitorInterval = setInterval(() => {
            this.collectMetrics();
        }, 5000); // 每5秒收集一次
        
        console.log('📊 开始性能监控');
    }
    
    /**
     * 停止性能监控
     */
    stopMonitoring() {
        if (this.monitorInterval) {
            clearInterval(this.monitorInterval);
            this.monitorInterval = null;
            console.log('📊 停止性能监控');
        }
    }
    
    /**
     * 收集性能指标
     */
    collectMetrics() {
        const report = this.aeExtension.getPerformanceReport();
        
        // 添加到历史记录
        this.metricsHistory.push({
            timestamp: report.timestamp,
            metrics: report
        });
        
        // 限制历史记录大小
        if (this.metricsHistory.length > this.maxHistory) {
            this.metricsHistory.shift();
        }
        
        // 检查性能指标
        this.checkPerformanceMetrics(report);
        
        console.log('📊 性能指标:', {
            uptime: report.uptime,
            memoryUsed: report.memory.used,
            eventQueueSize: report.eventQueue.size
        });
    }
    
    /**
     * 检查性能指标
     */
    checkPerformanceMetrics(report) {
        // 检查内存使用
        if (report.memory.used && report.memory.limit) {
            const memoryUsage = report.memory.used / report.memory.limit * 100;
            if (memoryUsage > 80) {
                console.warn(`⚠️ 内存使用率过高: ${memoryUsage.toFixed(2)}%`);
                
                // 可以在这里执行内存优化操作
                this.performMemoryOptimization();
            }
        }
        
        // 检查事件队列
        if (report.eventQueue.size > report.eventQueue.maxSize * 0.8) {
            console.warn(`⚠️ 事件队列使用率过高: ${report.eventQueue.size}/${report.eventQueue.maxSize}`);
            
            // 清理旧事件
            this.cleanupOldEvents();
        }
    }
    
    /**
     * 执行内存优化
     */
    performMemoryOptimization() {
        console.log('🧹 执行内存优化...');
        
        // 清理不必要的缓存和临时数据
        // 由于JavaScript的垃圾回收机制,这里主要是建议性的操作
        
        // 强制垃圾回收(如果可用)
        if (window.gc) {
            window.gc();
            console.log('🧹 手动垃圾回收完成');
        }
    }
    
    /**
     * 清理旧事件
     */
    cleanupOldEvents() {
        // 在实际实现中,可以清理事件队列中的旧事件
        console.log('🧹 清理旧事件...');
    }
    
    /**
     * 获取性能趋势
     */
    getPerformanceTrend() {
        if (this.metricsHistory.length === 0) {
            return null;
        }
        
        const latest = this.metricsHistory[this.metricsHistory.length - 1];
        const earliest = this.metricsHistory[0];
        
        return {
            duration: latest.timestamp - earliest.timestamp,
            memoryChange: latest.metrics.memory.used - earliest.metrics.memory.used,
            avgMemoryUsage: this.metricsHistory.reduce((sum, item) => sum + item.metrics.memory.used, 0) / this.metricsHistory.length
        };
    }
    
    /**
     * 生成性能报告
     */
    generatePerformanceReport() {
        const trend = this.getPerformanceTrend();
        const latest = this.metricsHistory[this.metricsHistory.length - 1];
        
        return {
            timestamp: Date.now(),
            trend: trend,
            currentMetrics: latest.metrics,
            historySize: this.metricsHistory.length
        };
    }
}

// 使用性能监控
const aeExtension = new AEExtension();
await aeExtension.initialize();
await aeExtension.start();

const performanceMonitor = new PerformanceMonitor(aeExtension);
performanceMonitor.startMonitoring();

// 定期输出性能报告
setInterval(() => {
    const report = performanceMonitor.generatePerformanceReport();
    console.log('📈 性能报告:', report);
}, 30000); // 每30秒输出一次

高级事件处理

javascript
// 创建事件处理器
class AdvancedEventHandler {
    constructor(aeExtension) {
        this.aeExtension = aeExtension;
        this.handlers = new Map();
        this.middleware = [];
        this.setupDefaultHandlers();
    }
    
    /**
     * 设置默认处理器
     */
    setupDefaultHandlers() {
        // 系统事件处理器
        this.addHandler('system', 'error', this.handleSystemError.bind(this));
        this.addHandler('system', 'warning', this.handleSystemWarning.bind(this));
        this.addHandler('system', 'info', this.handleSystemInfo.bind(this));
        
        // 数据事件处理器
        this.addHandler('data', 'settingsChanged', this.handleSettingsChanged.bind(this));
        this.addHandler('data', 'importComplete', this.handleImportComplete.bind(this));
        this.addHandler('data', 'exportComplete', this.handleExportComplete.bind(this));
        
        // UI事件处理器
        this.addHandler('ui', 'userAction', this.handleUserAction.bind(this));
        this.addHandler('ui', 'showNotification', this.handleShowNotification.bind(this));
    }
    
    /**
     * 添加事件处理器
     */
    addHandler(channel, eventType, handler) {
        const key = `${channel}:${eventType}`;
        
        if (!this.handlers.has(key)) {
            this.handlers.set(key, []);
        }
        
        this.handlers.get(key).push(handler);
        
        // 同时注册到扩展的事件系统
        return this.aeExtension.addEventListener(channel, eventType, (event) => {
            this.processEvent(event, handler);
        });
    }
    
    /**
     * 添加中间件
     */
    addMiddleware(middleware) {
        this.middleware.push(middleware);
    }
    
    /**
     * 处理系统错误
     */
    handleSystemError(event) {
        console.error('❌ 系统错误:', event.data);
        
        // 错误处理逻辑
        this.logError(event.data);
        this.reportError(event.data);
    }
    
    /**
     * 处理系统警告
     */
    handleSystemWarning(event) {
        console.warn('⚠️ 系统警告:', event.data);
        
        // 警告处理逻辑
        this.logWarning(event.data);
    }
    
    /**
     * 处理系统信息
     */
    handleSystemInfo(event) {
        console.info('ℹ️ 系统信息:', event.data);
        
        // 信息处理逻辑
        this.logInfo(event.data);
    }
    
    /**
     * 处理设置变更
     */
    handleSettingsChanged(event) {
        console.log('⚙️ 设置变更:', event.data);
        
        // 设置变更处理逻辑
        this.updateSettings(event.data);
    }
    
    /**
     * 处理导入完成
     */
    handleImportComplete(event) {
        console.log('📥 导入完成:', event.data);
        
        // 导入完成处理逻辑
        this.importComplete(event.data);
    }
    
    /**
     * 处理导出完成
     */
    handleExportComplete(event) {
        console.log('📤 导出完成:', event.data);
        
        // 导出完成处理逻辑
        this.exportComplete(event.data);
    }
    
    /**
     * 处理用户操作
     */
    handleUserAction(event) {
        console.log('👤 用户操作:', event.data);
        
        // 用户操作处理逻辑
        this.processUserAction(event.data);
    }
    
    /**
     * 处理显示通知
     */
    handleShowNotification(event) {
        console.log('🔔 显示通知:', event.data);
        
        // 显示通知逻辑
        this.showNotification(event.data);
    }
    
    /**
     * 处理事件(应用中间件)
     */
    async processEvent(event, handler) {
        try {
            // 应用中间件
            let processedEvent = { ...event };
            
            for (const middleware of this.middleware) {
                processedEvent = await middleware(processedEvent);
                if (!processedEvent) {
                    // 中间件决定不继续处理
                    return;
                }
            }
            
            // 执行处理器
            await handler(processedEvent);
            
        } catch (error) {
            console.error('处理事件时发生错误:', error);
        }
    }
    
    /**
     * 记录错误
     */
    logError(errorData) {
        if (this.aeExtension.components.logManager) {
            this.aeExtension.components.logManager.error('系统错误', { error: errorData });
        }
    }
    
    /**
     * 记录警告
     */
    logWarning(warningData) {
        if (this.aeExtension.components.logManager) {
            this.aeExtension.components.logManager.warning('系统警告', { warning: warningData });
        }
    }
    
    /**
     * 记录信息
     */
    logInfo(infoData) {
        if (this.aeExtension.components.logManager) {
            this.aeExtension.components.logManager.info('系统信息', { info: infoData });
        }
    }
    
    /**
     * 更新设置
     */
    updateSettings(settings) {
        if (this.aeExtension.components.settingsManager) {
            // 可以在这里处理设置更新逻辑
            console.log('设置已更新:', settings);
        }
    }
    
    /**
     * 导入完成处理
     */
    importComplete(importData) {
        // 导入完成后的处理逻辑
        if (importData.success) {
            console.log('导入成功完成');
        } else {
            console.log('导入失败:', importData.error);
        }
    }
    
    /**
     * 导出完成处理
     */
    exportComplete(exportData) {
        // 导出完成后的处理逻辑
        if (exportData.success) {
            console.log('导出成功完成');
        } else {
            console.log('导出失败:', exportData.error);
        }
    }
    
    /**
     * 处理用户操作
     */
    processUserAction(actionData) {
        // 用户操作处理逻辑
        console.log('处理用户操作:', actionData);
    }
    
    /**
     * 显示通知
     */
    showNotification(notificationData) {
        // 显示通知的逻辑
        console.log('显示通知:', notificationData);
        
        // 这里可以实现实际的通知显示逻辑
        if (window.Notification && Notification.permission === 'granted') {
            new Notification(notificationData.message || '通知', {
                body: notificationData.body || '',
                icon: notificationData.icon || ''
            });
        }
    }
    
    /**
     * 报告错误
     */
    reportError(errorData) {
        // 错误报告逻辑
        console.log('报告错误:', errorData);
    }
}

// 使用高级事件处理器
const aeExtension = new AEExtension();
await aeExtension.initialize();
await aeExtension.start();

const eventHandler = new AdvancedEventHandler(aeExtension);

// 添加自定义中间件
eventHandler.addMiddleware(async (event) => {
    // 记录事件处理时间
    event.processedAt = Date.now();
    return event;
});

// 添加自定义处理器
eventHandler.addHandler('custom', 'myEvent', (event) => {
    console.log('处理自定义事件:', event);
});

// 发布测试事件
aeExtension.emitEvent('system', 'error', { message: 'Test error', code: 500 });
aeExtension.emitEvent('data', 'settingsChanged', { changedSettings: ['theme', 'language'] });

Released under the MIT License.