H5任务管理:脚本选择与动态执行方案

一、H5任务脚本执行架构设计

在移动端H5开发中,任务脚本的执行效率直接影响用户体验。一个完善的任务执行中心需包含容器管理、导航控制、任务队列调度三大核心模块。

1.1 容器化布局管理

采用响应式容器设计是构建任务中心的基础。推荐使用max-width: 414px的固定宽度容器,配合margin: 0 auto实现居中布局。通过box-shadow: 0 0 20px rgba(0,0,0,0.1)添加立体阴影效果,增强视觉层次感。关键CSS代码如下:

  1. .mobile-container {
  2. max-width: 414px;
  3. margin: 0 auto;
  4. background: #fff;
  5. min-height: 100vh;
  6. position: relative;
  7. overflow: hidden;
  8. box-shadow: 0 0 20px rgba(0,0,0,0.1);
  9. }

1.2 导航状态管理

顶部导航栏需支持多标签页切换,采用Flex布局实现均分空间。通过.active类动态控制激活状态,配合border-bottom实现视觉反馈。实现代码示例:

  1. <div class="top-nav">
  2. <a class="top-nav-item active">任务列表</a>
  3. <a class="top-nav-item">执行日志</a>
  4. <a class="top-nav-item">设置</a>
  5. </div>
  1. .top-nav {
  2. display: flex;
  3. background: #fff;
  4. border-bottom: 1px solid #f0f0f0;
  5. }
  6. .top-nav-item.active {
  7. color: #2196f3;
  8. border-bottom: 2px solid #2196f3;
  9. }

二、任务选择机制实现

任务选择模块需兼顾交互体验与执行效率,采用列表渲染+状态标记的组合方案。

2.1 动态列表渲染

使用margin-bottom: 12pxpadding: 12px 16px构建标准列表项,通过border-bottom分隔线增强可读性。示例结构:

  1. <div class="select-list">
  2. <div class="select-item">数据清洗任务</div>
  3. <div class="select-item">图像识别任务</div>
  4. <div class="select-item">报表生成任务</div>
  5. </div>
  1. .select-item {
  2. padding: 12px 16px;
  3. border-bottom: 1px solid #f0f0f0;
  4. }
  5. .select-item:last-child {
  6. border-bottom: none;
  7. }

2.2 多任务选择控制

实现多选功能时,建议采用复选框+标签的组合方案。通过JavaScript动态管理选中状态:

  1. const items = document.querySelectorAll('.select-item');
  2. items.forEach(item => {
  3. item.addEventListener('click', () => {
  4. item.classList.toggle('selected');
  5. updateTaskQueue();
  6. });
  7. });

三、任务执行中心核心实现

执行中心需处理任务队列调度、异步执行和结果反馈三大环节。

3.1 任务队列管理

采用先进先出(FIFO)队列模型,通过数组存储待执行任务。关键实现逻辑:

  1. class TaskQueue {
  2. constructor() {
  3. this.queue = [];
  4. this.isExecuting = false;
  5. }
  6. enqueue(task) {
  7. this.queue.push(task);
  8. if (!this.isExecuting) this.executeNext();
  9. }
  10. async executeNext() {
  11. if (this.queue.length === 0) {
  12. this.isExecuting = false;
  13. return;
  14. }
  15. this.isExecuting = true;
  16. const task = this.queue.shift();
  17. try {
  18. await task.execute();
  19. updateExecutionLog(task.id, 'success');
  20. } catch (error) {
  21. updateExecutionLog(task.id, 'failed');
  22. }
  23. this.executeNext();
  24. }
  25. }

3.2 异步执行优化

对于耗时任务,推荐使用Web Worker实现后台执行:

  1. // 主线程代码
  2. const worker = new Worker('task-worker.js');
  3. worker.postMessage({type: 'start', taskId: 123});
  4. worker.onmessage = (e) => {
  5. if (e.data.type === 'progress') {
  6. updateProgress(e.data.percent);
  7. }
  8. };
  9. // worker线程代码 (task-worker.js)
  10. self.onmessage = (e) => {
  11. if (e.data.type === 'start') {
  12. // 执行耗时任务
  13. for (let i=0; i<=100; i++) {
  14. self.postMessage({
  15. type: 'progress',
  16. percent: i
  17. });
  18. // 模拟耗时操作
  19. await new Promise(resolve => setTimeout(resolve, 50));
  20. }
  21. }
  22. };

3.3 执行结果反馈

通过事件总线模式实现执行状态通知:

  1. // 事件总线实现
  2. const eventBus = {
  3. events: {},
  4. on(event, callback) {
  5. if (!this.events[event]) this.events[event] = [];
  6. this.events[event].push(callback);
  7. },
  8. emit(event, data) {
  9. if (this.events[event]) {
  10. this.events[event].forEach(cb => cb(data));
  11. }
  12. }
  13. };
  14. // 任务执行时触发
  15. eventBus.emit('task-update', {
  16. taskId: 123,
  17. status: 'running',
  18. progress: 30
  19. });

四、性能优化策略

4.1 防抖与节流控制

对高频触发事件(如滚动、输入)进行优化:

  1. function debounce(func, delay) {
  2. let timeout;
  3. return function(...args) {
  4. clearTimeout(timeout);
  5. timeout = setTimeout(() => func.apply(this, args), delay);
  6. };
  7. }
  8. // 使用示例
  9. window.addEventListener('scroll', debounce(() => {
  10. updateScrollPosition();
  11. }, 200));

4.2 资源预加载

通过<link rel="preload">提前加载关键资源:

  1. <link rel="preload" href="task-worker.js" as="script">
  2. <link rel="preload" href="critical-script.js" as="script">

4.3 内存管理

及时释放不再使用的任务对象:

  1. function cleanupTask(task) {
  2. if (task.worker) {
  3. task.worker.terminate();
  4. delete task.worker;
  5. }
  6. // 清除事件监听
  7. task.off('progress', null);
  8. }

五、异常处理机制

5.1 执行错误捕获

采用try-catch包裹异步操作:

  1. async function executeTask(task) {
  2. try {
  3. await task.run();
  4. } catch (error) {
  5. console.error(`Task ${task.id} failed:`, error);
  6. eventBus.emit('task-error', {
  7. taskId: task.id,
  8. error: error.message
  9. });
  10. }
  11. }

5.2 重试机制实现

对可恢复错误实施自动重试:

  1. async function executeWithRetry(task, maxRetries=3) {
  2. let retries = 0;
  3. while (retries <= maxRetries) {
  4. try {
  5. return await task.execute();
  6. } catch (error) {
  7. retries++;
  8. if (retries > maxRetries) throw error;
  9. await new Promise(resolve => setTimeout(resolve, 1000 * retries));
  10. }
  11. }
  12. }

六、扩展功能建议

  1. 任务优先级系统:为任务添加priority属性,实现加权调度
  2. 执行依赖管理:通过dependsOn字段定义任务间依赖关系
  3. 持久化存储:使用IndexedDB保存未完成任务状态
  4. 执行分析:记录各任务执行耗时,生成性能报告

通过上述架构设计,开发者可以构建出高效、稳定的H5任务执行中心。实际开发中,建议结合具体业务场景调整队列调度策略,并持续监控执行性能指标进行优化。