You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android版Firefox中Javascript脚本运行30秒即终止的解决方案咨询

Android版Firefox中JS脚本30秒停止的解决办法

一、修改Firefox配置

  • 常规设置调整
    打开Firefox设置,进入「隐私与安全」:
    • 把「增强型跟踪保护」从严格模式改成标准模式,严格规则可能会中断长时间运行的脚本
    • 检查「权限」里的「后台网站」,确保当前站点被允许后台运行
  • 高级配置修改
    在地址栏输入about:config,确认风险提示后,修改两项配置:
    • 将dom.max_script_run_time的默认值30(秒)调高,比如设为300(对应5分钟),这是浏览器限制主线程同步脚本运行时长的核心参数
    • 若dom.timeout.enable_budget_timer为true,改成false,关闭预算计时器的额外运行限制

二、脚本优化方案

  • 拆分长同步任务为异步执行
    浏览器会终止主线程上长时间运行的同步脚本,用setTimeout把大任务拆成多个小片段,让浏览器有时间处理其他事件:
    // 示例:拆分循环类长任务
    function runTask(progress = 0, total = 1000) {
      // 每次只处理100个单位的任务
      for (let i = 0; i < 100 && progress < total; i++) {
        // 这里写入具体的任务逻辑
        progress++;
      }
      if (progress < total) {
        setTimeout(() => runTask(progress, total), 0);
      } else {
        console.log('任务执行完成');
      }
    }
    
  • 用Web Workers移走计算密集型任务
    把耗时任务放到Web Worker线程中执行,完全不占用主线程,避开浏览器的主线程超时限制:
    // 主线程代码
    const taskWorker = new Worker('./task-worker.js');
    // 向worker传递任务数据
    taskWorker.postMessage({ data: yourLargeDataset });
    // 接收worker返回的进度或结果
    taskWorker.onmessage = (e) => {
      console.log('当前执行进度:', e.data.progress);
      if (e.data.complete) {
        taskWorker.terminate();
      }
    };
    
    // task-worker.js 代码
    self.onmessage = (e) => {
      const { data } = e;
      let progress = 0;
      const total = data.length;
      // 执行耗时计算逻辑
      while (progress < total) {
        // 处理单条数据的逻辑
        progress++;
        // 每处理100条就向主线程同步进度
        if (progress % 100 === 0) {
          self.postMessage({ progress, complete: false });
        }
      }
      self.postMessage({ progress: total, complete: true });
    };
    

内容的提问来源于stack exchange,提问作者Arthur Vause

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.25 09:57:22