我正在考虑在用户浏览我的网站时使用Web Workers来提供一些后台功能(这是Web Workers的用途,对吧?)。但是,我不想冒着通过导致滞后滚动,无响应的控制等来损害用户体验的风险.Web Worker被映射到操作系统线程,因此,我期望对这些线程的优先级进行一些控制,但是到目前为止据我所知,目前的API中没有这样的东西。你知道如何做到这一点?即使有黑客?有没有办法将Web Worker设置为低优先级?
17
A
回答
11
那么,没有API调用来控制像这样的低级细节。不过,我认为你应该首先实现你想要做的事情,然后测试一下用户体验中的性能影响是否太大。我假设由于他们没有对线程的执行方式进行良好控制,他们可能很好地被底层实现管理。
9
即使有黑客? [...] 用户上传的照片和工作人员将一个Photoshop样 过滤器给它,这是非常CPU密集型,那么工人提醒 主线程
这里是一个黑客。
减慢你的代码。像这样的东西是什么,我现在使用的粒子模拟:
var TIME_STEP = 10,
paused = false,
state; // set by commands.start()
function main_loop() {
if (paused) {
return;
}
// update state incrementally. Break your process into chunks
// for example pixels or rows of pixels
state = ____________;
// send state or progress to main thread
if (finished) {
self.postMessage(state);
} else {
self.postMessage(progress);
}
setTimeout(main_loop, TIME_STEP);
}
var commands = {
//...functions that can be called from main thread (pause/start/cancel/etc)...
};
function message_handler (event) {
var data = event.data;
var command = commands[data.command];
command.apply(this, data.args);
}
self.addEventListener('message', message_handler, false);
TIME_STEP
是计算之间的时间,将需要不同取决于你在做什么,多长时间你能负担得起,以增加它的时间。这样做的一个好处是你可以在迭代之间接受暂停和取消请求。
相关问题
- 1. 有没有办法设置图片在网站上的加载优先级?
- 2. 有没有办法设置SwingWorker使用的后台线程的优先级?
- 3. Android有没有办法在adb中显示进程优先级?
- 4. 将优先级设置为NSOperationQueue
- 5. 为什么在Perl中没有相当于//的低优先级?
- 6. 设置优先级
- 7. 具有优先级设置的线程
- 8. 使exe优先级低
- 9. 低优先级Express.js app.get('/ route');
- 10. 有没有办法为RadioGroup设置BackgroundColor?
- 11. 设置低优先级为长mongodb查询
- 12. 为Parallel.For循环设置优先级
- 13. AsyncTask设置优先级
- 14. 有没有办法在WebStorm中设置项目级配置?
- 15. Firebase iOS设置优先级没有更新查询
- 16. 设置intent的优先级
- 17. 有没有办法以给定的优先级执行系统命令?
- 18. 有没有办法强制gcc/g ++中的函数解析优先级?
- 19. Flex iframe设置优先级?
- 20. 设置优先级导致
- 21. 设置库的优先级
- 22. 在HTML事件中设置优先级
- 23. 有没有办法在Android中将Drawable设置为int
- 24. 有没有办法以编程方式将ApartmentState设置为STA?
- 25. 有没有办法将heroku应用设置为私密?
- 26. cbind:有没有办法将缺失值设置为NA?
- 27. 有没有办法将Keyboard.FocusedElement设置为特定的元素?
- 28. 有没有办法将GridViewColumn的宽度设置为Auto?
- 29. 有没有办法将System.Windows.Controls.SplashScreen设置为System.Windows.Window
- 30. 有没有办法将stdout设置为二进制模式?
什么平台和语言? – rene 2012-01-01 17:41:03
你打算使用网络工作者进行什么样的任务?定期活动?一次性执行任务? – Tudor 2012-01-01 18:31:20
@Tudor我会说一次性执行(例如,用户上传一张照片,工作人员使用类似Photoshop的过滤器,这非常耗费CPU时间,然后工作人员会提醒主线程)。 – tunnuz 2012-01-02 07:46:06