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
相关产品推荐
相关产品推荐

