标签: web-worker

Web Workers可以使用100%的多核CPU吗?

我一直试图找出Web工作人员分配处理器负载的能力.我还没有找到任何能够让我的四核2600k甚至达到50%的演示,更不用说100%了.

这是一个Web工作者演示,我试图最大化我的CPU:

http://nerget.com/rayjs-mt/rayjs.html

(如果你使用firebug/chrome-inspect-element进入页面的HTML并使画布变大,你可以使它成为一个更大的图像 - 我设置为1920 x 1080)

即使选择了4,8,16名工作人员,我也无法将每个核心的CPU利用率提高到25%左右.

有谁知道你是否可以通过网络工作者使用100%的CPU?

(我正在使用谷歌浏览器.)

html javascript html5 multithreading web-worker

22
推荐指数
2
解决办法
6899
查看次数

执行来自不同来源的Web worker

我正在开发一个我想在CDN上托管的库.该库将用于跨多个服务器的许多不同域.库本身包含一个脚本(现在让我们称之为script.js),它加载一个web worker(worker.js).

加载库本身非常简单:只需将<script type="text/javascript" src="http://cdn.mydomain.com/script.js"></script>标记添加到我想要使用该库的域(www.myotherdomain.com).但是,由于库正在从http://cdn.mydomain.com/worker.js 加载一个worker new Worker('http://cdn.mydomain.com/worker.js'),我得到一个SecurityException.在cdn.mydomain.com上启用CORS.

对于Web worker,不允许在远程域上使用Web worker.使用CORS无济于事:浏览器似乎忽略它,甚至不执行预检检查.

解决这个问题的方法是执行XMLHttpRequest以获取worker的源,然后创建一个BLOB url并使用此url创建一个worker.这适用于Firefox和Chrome.但是,这似乎不适用于Internet Explorer或Opera.

解决方案是将工作人员放在www.myotherdomain.com上或放置一个代理文件(它只是使用XHR或importScripts从cdn加载工作者).我不喜欢这个解决方案:它要求我在服务器上放置其他文件,因为库在多个服务器上使用,所以更新会很困难.

我的问题包括两个解析:

  1. IE 10+的远程来源工作者是否可能?
  2. 如果是1,那么如何最好地处理跨浏览器?

javascript cross-browser cross-domain web-worker

22
推荐指数
3
解决办法
3812
查看次数

为什么转换缓冲区在javascript中被绝育?

Javascript允许将缓冲区从源线程转移到Worker线程.否则,复制ArrayBuffer,然后传递给worker.传输缓冲区在源线程[1]中不可访问("neutered"):

// create data that can be transfered
var arr = new Uint8Array(5);

// outputs: 5
console.log(arr.buffer.byteLength);

var worker = new Worker("some_worker.js");

// transfer the buffer
worker.postMessage({arr: arr}, [arr.buff]);

// the buffer vanishes. is "Neutered"
// outputs: 0
console.log(arr.buffer.byteLength);
Run Code Online (Sandbox Code Playgroud)

我想知道机制是如何工作的.然而,我很好奇它为何被引入.为什么工作线程之间没有共享数据,就像传统的线程模型一样,它允许多个线程访问同一个内存区域?


同一问题的其他措辞澄清:

为什么缓冲区在转移时会被阉割?/这种机制背后的原因是什么?/为什么介绍它?为什么工人之间不能共享内存区域?

我正在寻找可信和/或官方消息来源的答案.


[1] https://developer.mozilla.org/en/docs/Web/API/Worker/postMessage

javascript web-worker

22
推荐指数
2
解决办法
2655
查看次数

Angular 7.0.1中的Web worker设置

我正在尝试在我现有的Angular 7.0.1项目(中等规模项目)中进行Web工作者设置.我在完成以下链接后进行了设置:

以下是我对每个文件的更改:

./src/main.ts

import 'zone.js';
import { enableProdMode } from '@angular/core';
import { bootstrapWorkerUi } from '@angular/platform-webworker';

import { AppModule } from './app/app.module';
import { environment } from './environments/environment';

if (environment.production) {
  enableProdMode();
}

console.log("main.ts file loaded!");
bootstrapWorkerUi('webworker.js');
Run Code Online (Sandbox Code Playgroud)

./src/workerLoader.ts

import 'polyfills.ts';
import '@angular/core';
import '@angular/common';

console.log("workerLoader.ts file loaded!");

import { platformWorkerAppDynamic } from '@angular/platform-webworker-dynamic';
import { AppModule } from './app/app.module';

platformWorkerAppDynamic().bootstrapModule(AppModule);
Run Code Online (Sandbox Code Playgroud)

./angular.json

"projects": {
  "[project name]": {
    "architect": {
      "build": { …
Run Code Online (Sandbox Code Playgroud)

web-worker typescript webpack angular angular7

22
推荐指数
1
解决办法
4310
查看次数

从Web Worker执行AJAX请求是否可行?

我似乎无法在我的webworker中使用jQuery,我知道必须有一种方法可以实现它XMLHttpRequest,但是当我读到这个答案时,似乎这可能不是一个好的选择.

javascript ajax jquery web-worker

21
推荐指数
1
解决办法
2万
查看次数

如何将函数传递给JavaScript Web Worker

我想通过一个函数(或函数)传递postMessage()给一个web worker,因为我不能引用常规文件.

为了关闭Web工作者,我将对象URL(从Blob创建)传递给Worker构造函数.然后我传递了一条消息,但到目前为止没有运气在消息中添加功能.

(JSON)消息不能直接包含函数(如此处所述),虽然理论上允许使用importScripts,但到目前为止我还没有在Chrome或Firefox中使用过它.

html文件的正文:

<div id="divText">1234</div>
<script>
    var greeter = function greet(name) {
        return "hello " + name;
    };
    function webWorkerWorker() {
        self.postMessage("started1");
        self.onmessage = function(event) {
            importScripts(event.data.content);
            self.postMessage("importScripts success");
            var result = greeter("john");
            self.postMessage(result);
        };
    }
    var functionBody = mylib.extractFunctionBody(webWorkerWorker);
    var functionBlob = mylib.createBlob([functionBody]);
    var functionUrl = mylib.createObjectURL(functionBlob);

    var functionBody2 = mylib.extractFunctionBody(greeter);
    var functionBlob2 = mylib.createBlob([greeter]);
    var functionUrl2 = mylib.createObjectURL(functionBlob2);

    var worker = new Worker(functionUrl);
    worker.onmessage = function(event) {
        document.getElementById("divText").innerHTML = event.data; …
Run Code Online (Sandbox Code Playgroud)

javascript web-worker

20
推荐指数
2
解决办法
2万
查看次数

WebCore中的EXC_BAD_ACCESS(SIGSEGV):: UserGestureIndicator :: processingUserGesture

我有一个使用UIWebView和HTML5 websockets构建的iOS应用程序.该应用程序经历看似随机的崩溃.它发生在用户与其进行交互时以及在长寿测试期间,用户和应用程序之间不会发生交互.

崩溃日志都具有以下内容:

Exception Type:  EXC_BAD_ACCESS (SIGSEGV)
Exception Subtype: KERN_INVALID_ADDRESS at 0x00000000
Run Code Online (Sandbox Code Playgroud)

并且线程日志包含:

Thread XX name:  WebCore: Worker
Thread XX Crashed:
0   WebCore                         0x36c8c7a0 WebCore::UserGestureIndicator::processingUserGesture() + 20
1   WebCore                         0x36d7070a WebCore::DOMTimer::DOMTimer(WebCore::ScriptExecutionContext*, WTF::PassOwnPtr<WebCore::ScheduledAction>, int, bool) + 74
2   WebCore                         0x36d70616 WebCore::DOMTimer::install(WebCore::ScriptExecutionContext*, WTF::PassOwnPtr<WebCore::ScheduledAction>, int, bool) + 46
3   WebCore                         0x3753ae7e WebCore::WorkerContext::setTimeout(WTF::PassOwnPtr<WebCore::ScheduledAction>, int) + 30
4   WebCore                         0x3731ac02 WebCore::JSWorkerContext::setTimeout(JSC::ExecState*) + 194
5   WebCore                         0x37318ff6 WebCore::jsWorkerContextPrototypeFunctionSetTimeout(JSC::ExecState*) + 110
6   JavaScriptCore                  0x2fa9a1d8 llint_native_call_trampoline + 62
7   JavaScriptCore                  0x2faa355a JSC::call(JSC::ExecState*, JSC::JSValue, JSC::CallType, JSC::CallData const&, JSC::JSValue, JSC::ArgList …
Run Code Online (Sandbox Code Playgroud)

html5 segmentation-fault web-worker websocket ios

20
推荐指数
1
解决办法
1485
查看次数

网络工作者与承诺

为了使Web应用程序响应,您使用异步非阻塞请求.我可以设想两种方法来实现这一点.一种是使用延迟/承诺.另一个是网络工作者.对于Web工作者,我们最终会引入另一个进程,并且我们不得不来回传输数据.我正在寻找某种性能指标来帮助理解何时选择简单的非阻塞回调而不是Web worker.

是否有某种方法可以使用哪种方法而无需对这两种方法进行原型设计?我在网上看到很多关于网络工作者的教程,但我没有看到很多成功/失败的故事.我所知道的是我想要一个响应式应用程序.我正在考虑使用Web worker作为内存数据结构的接口,该数据结构可以是0.5-15MB(本质上是数据库),用户可以查询和更新.

据我了解javascript处理,可以执行单个长时间运行的任务并对其进行切片,以便定期进行控制,从而允许其他任务处理一段时间.这会是使用网络工作者的标志吗?

javascript asynchronous web-worker promise jquery-deferred

20
推荐指数
1
解决办法
1万
查看次数

使用Web Workers优雅地降级

所以我开始越来越多地听到Web Workers的消息.我认为这绝对是太棒了,但到目前为止我还没有看到任何人真正解决的问题是如何支持那些尚未支持新技术的旧浏览器.

到目前为止,我能够提出的唯一解决方案是围绕Web工作人员功能制作某种包装,这种功能可以回归到一些模拟多线程执行的基于疯狂计时器的解决方案.

但即使在这种情况下,如何检测Web worker是否是当前执行javascript的浏览器的受支持功能?

谢谢!

javascript multithreading web-worker

19
推荐指数
1
解决办法
5818
查看次数

如何在HTML 5 Web worker中访问jQuery

我无法在HTML5 Web工作者中访问jQuery .有没有办法可以做到这一点?

javascript jquery html5 web-worker

19
推荐指数
3
解决办法
2万
查看次数