一、H5任务脚本执行架构设计
在移动端H5开发中,任务脚本的执行效率直接影响用户体验。一个完善的任务执行中心需包含容器管理、导航控制、任务队列调度三大核心模块。
1.1 容器化布局管理
采用响应式容器设计是构建任务中心的基础。推荐使用max-width: 414px的固定宽度容器,配合margin: 0 auto实现居中布局。通过box-shadow: 0 0 20px rgba(0,0,0,0.1)添加立体阴影效果,增强视觉层次感。关键CSS代码如下:
.mobile-container {max-width: 414px;margin: 0 auto;background: #fff;min-height: 100vh;position: relative;overflow: hidden;box-shadow: 0 0 20px rgba(0,0,0,0.1);}
1.2 导航状态管理
顶部导航栏需支持多标签页切换,采用Flex布局实现均分空间。通过.active类动态控制激活状态,配合border-bottom实现视觉反馈。实现代码示例:
<div class="top-nav"><a class="top-nav-item active">任务列表</a><a class="top-nav-item">执行日志</a><a class="top-nav-item">设置</a></div>
.top-nav {display: flex;background: #fff;border-bottom: 1px solid #f0f0f0;}.top-nav-item.active {color: #2196f3;border-bottom: 2px solid #2196f3;}
二、任务选择机制实现
任务选择模块需兼顾交互体验与执行效率,采用列表渲染+状态标记的组合方案。
2.1 动态列表渲染
使用margin-bottom: 12px和padding: 12px 16px构建标准列表项,通过border-bottom分隔线增强可读性。示例结构:
<div class="select-list"><div class="select-item">数据清洗任务</div><div class="select-item">图像识别任务</div><div class="select-item">报表生成任务</div></div>
.select-item {padding: 12px 16px;border-bottom: 1px solid #f0f0f0;}.select-item:last-child {border-bottom: none;}
2.2 多任务选择控制
实现多选功能时,建议采用复选框+标签的组合方案。通过JavaScript动态管理选中状态:
const items = document.querySelectorAll('.select-item');items.forEach(item => {item.addEventListener('click', () => {item.classList.toggle('selected');updateTaskQueue();});});
三、任务执行中心核心实现
执行中心需处理任务队列调度、异步执行和结果反馈三大环节。
3.1 任务队列管理
采用先进先出(FIFO)队列模型,通过数组存储待执行任务。关键实现逻辑:
class TaskQueue {constructor() {this.queue = [];this.isExecuting = false;}enqueue(task) {this.queue.push(task);if (!this.isExecuting) this.executeNext();}async executeNext() {if (this.queue.length === 0) {this.isExecuting = false;return;}this.isExecuting = true;const task = this.queue.shift();try {await task.execute();updateExecutionLog(task.id, 'success');} catch (error) {updateExecutionLog(task.id, 'failed');}this.executeNext();}}
3.2 异步执行优化
对于耗时任务,推荐使用Web Worker实现后台执行:
// 主线程代码const worker = new Worker('task-worker.js');worker.postMessage({type: 'start', taskId: 123});worker.onmessage = (e) => {if (e.data.type === 'progress') {updateProgress(e.data.percent);}};// worker线程代码 (task-worker.js)self.onmessage = (e) => {if (e.data.type === 'start') {// 执行耗时任务for (let i=0; i<=100; i++) {self.postMessage({type: 'progress',percent: i});// 模拟耗时操作await new Promise(resolve => setTimeout(resolve, 50));}}};
3.3 执行结果反馈
通过事件总线模式实现执行状态通知:
// 事件总线实现const eventBus = {events: {},on(event, callback) {if (!this.events[event]) this.events[event] = [];this.events[event].push(callback);},emit(event, data) {if (this.events[event]) {this.events[event].forEach(cb => cb(data));}}};// 任务执行时触发eventBus.emit('task-update', {taskId: 123,status: 'running',progress: 30});
四、性能优化策略
4.1 防抖与节流控制
对高频触发事件(如滚动、输入)进行优化:
function debounce(func, delay) {let timeout;return function(...args) {clearTimeout(timeout);timeout = setTimeout(() => func.apply(this, args), delay);};}// 使用示例window.addEventListener('scroll', debounce(() => {updateScrollPosition();}, 200));
4.2 资源预加载
通过<link rel="preload">提前加载关键资源:
<link rel="preload" href="task-worker.js" as="script"><link rel="preload" href="critical-script.js" as="script">
4.3 内存管理
及时释放不再使用的任务对象:
function cleanupTask(task) {if (task.worker) {task.worker.terminate();delete task.worker;}// 清除事件监听task.off('progress', null);}
五、异常处理机制
5.1 执行错误捕获
采用try-catch包裹异步操作:
async function executeTask(task) {try {await task.run();} catch (error) {console.error(`Task ${task.id} failed:`, error);eventBus.emit('task-error', {taskId: task.id,error: error.message});}}
5.2 重试机制实现
对可恢复错误实施自动重试:
async function executeWithRetry(task, maxRetries=3) {let retries = 0;while (retries <= maxRetries) {try {return await task.execute();} catch (error) {retries++;if (retries > maxRetries) throw error;await new Promise(resolve => setTimeout(resolve, 1000 * retries));}}}
六、扩展功能建议
- 任务优先级系统:为任务添加
priority属性,实现加权调度 - 执行依赖管理:通过
dependsOn字段定义任务间依赖关系 - 持久化存储:使用IndexedDB保存未完成任务状态
- 执行分析:记录各任务执行耗时,生成性能报告
通过上述架构设计,开发者可以构建出高效、稳定的H5任务执行中心。实际开发中,建议结合具体业务场景调整队列调度策略,并持续监控执行性能指标进行优化。