相关疑难解决方法(0)

有没有办法在Web Worker中创建DOM元素?

上下文: 我有一个处理和显示大量日志文件的Web应用程序.它们通常只有大约10万行,但它可以达到400万行或更多.为了能够滚动浏览该日志文件(用户启动和通过JavaScript)并过滤具有良好性能的行,我会在数据到达时为每一行创建一个DOM元素(通过ajax以JSON形式).我发现这对性能更好,然后在后端构建HTML.然后我将元素保存在一个数组中,我只显示可见的行.

对于最大100k行,这只需要几秒钟,但对于500k行(不包括下载),任何更多需要花费一分钟.我想进一步提高性能,所以我尝试使用HTML5 Web Workers.现在的问题是我无法在Web Worker中创建元素,甚至不能在DOM之外创建元素.所以我最终只在Web Workers中进行了json到HTML的转换,并将结果发送到主线程.它在那里创建并存储在一个数组中.不幸的是,这使性能恶化,现在需要至少30秒.

问题:在Web工作者中,在DOM树之外创建DOM元素是否有任何我不知道的方法?如果没有,为什么不呢?在我看来,这不会产生并发问题,因为创建元素可以并行发生而没有问题.

javascript jquery html5 web-worker

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

反应错误:Firefox 中的“SharedArrayBuffer 未定义”

我有一个 React 应用程序,它是用“create-react-app”创建的(我也使用 jsdom NPM 包),出于某种原因,该应用程序仅在 Firefox 中在加载时引发错误(在 Chrome 和 Edge 中工作正常)。
这是错误:

ReferenceError: SharedArrayBuffer is not defined
./node_modules/jsdom/node_modules/webidl-conversions/lib/index.js
C:/Or/Web/WorldCovid/WorldCovid/node_modules/jsdom/node_modules/webidl-conversions/lib/index.js:347

  344 | 
  345 | const abByteLengthGetter =
  346 |     Object.getOwnPropertyDescriptor(ArrayBuffer.prototype, "byteLength").get;
> 347 | const sabByteLengthGetter =
  348 |     Object.getOwnPropertyDescriptor(SharedArrayBuffer.prototype, "byteLength").get;
  349 | 
  350 | function isNonSharedArrayBuffer(V) {
Run Code Online (Sandbox Code Playgroud)

经过一番谷歌搜索,我发现:
“为了使SharedArrayBuffer在Firefox中,去about:config中和javascript.options.shared_memory偏好设置为true”(https://github.com/ggerganov/kbd-audio/issues/9
的问题是它已经启用为true。

以前有人遇到过这个问题吗?谢谢。

更新:

尝试转换为:

const shared = new SharedArrayBuffer(1024);

const abByteLengthGetter =
    Object.getOwnPropertyDescriptor(ArrayBuffer.prototype, "byteLength").get;
const sabByteLengthGetter =
    Object.getOwnPropertyDescriptor(shared.prototype, "byteLength").get;
Run Code Online (Sandbox Code Playgroud)

仍然得到相同的错误(与 SharedArrayBuffer 对象不同的行)。

javascript firefox reactjs cross-origin-embedder-policy cross-origin-opener-policy

5
推荐指数
2
解决办法
6218
查看次数