worker在Typescript的使用

业务需求是在前端显示报表,但是sharepoint online无法直接用数据库,只能调REST API在前端显示

一、内嵌worker

       此方法优点是浏览器不用每次去加载你所写的worker.js

 this.domElement.innerHTML=`<p>Worker 花费时间: <output id="result"></output></p>
    <button >开始 Worker</button> 
<button >开始主线程</button>
<p>原花费时间: <output id="result1"></output></p>
<canvas id="mychart"></canvas>
//插入的worker
<script id='worker1'  type="javascript/worker">

var a;
function groupBy(array, f) {
    const groups = {};
    array.forEach(function (o) {
        const group = JSON.stringify(f(o));
        groups[group] = groups[group] || [];
        groups[group].push(o);
    });
    return Object.keys(groups).map(function (group) {
        return groups[group];
    });
  }
addEventListener('message', (message) => {
    var status;
    var st = new Date();
    var xLabel=[],ylabel=[];
        groupBy(message.data,(t)=>{
            return t.country
        }).forEach(function(e){
           xLabel.push(e[0].country);
           var sum=0;
           e.forEach(element => {
               sum+=element.cost;
           });
           ylabel.push(sum);
        })
       
    status = (new Date().getTime() - st.getTime()) + ' ms';
  
 
    postMessage("time :"+status) ;
});
</script>`;

下面通过新建worker来调用,

var blob = new Blob([document.querySelector('#worker1').textContent]);
    const worker = new Worker(window.URL.createObjectURL(blob));
    worker.addEventListener('message', message => {
        document.getElementById('result').innerHTML=message.data;
    });
    this.domElement.getElementsByTagName('button').item(0).addEventListener('click',function(){
      worker.postMessage(c);
    })

二、调用外部worker.js文件

编写js文件


var a;
function groupBy(array, f) {
    debugger;
    const groups = {};
    array.forEach(function (o) {
        const group = JSON.stringify(f(o));
        groups[group] = groups[group] || [];
        groups[group].push(o);
    });
    return Object.keys(groups).map(function (group) {
        return groups[group];
    });
  }
addEventListener('message', (message) => {
    var status;
    var st = new Date();
    var xLabel=[],ylabel=[];
        groupBy(message.data,(t)=>{
            return t.country
        }).forEach(function(e){
           xLabel.push(e[0].country);
           var sum=0;
           e.forEach(element => {
               sum+=element.cost;
           });
           ylabel.push(sum);
        })
       
    status = (new Date().getTime() - st.getTime()) + ' ms';
  
 
    postMessage("time :"+status) ;
});

声明file-loaderfile-loader把js加载到服务器此文件为file-loader.d.ts文件,typescript会进行编译根据此js加载

declare module "file-loader?name=[name].js!*" {
    const value: string;
    export = value;
}

声明创建worker

import * as workerPath from "file-loader?name=[name].js!./test.worker";
const worker = new Worker(workerPath);

console.log(workerPath, worker);
worker.addEventListener('message', message => {
    console.log(message);
});
worker.postMessage('this is a test message to the worker');

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要在 Vite 中使用 Web Worker,需要进行以下配置: 1. 在 Vite 项目的根目录下创建一个 `web-workers` 目录,用于存放 Web Worker 的 JavaScript 文件。 2. 在 `web-workers` 目录中创建一个名为 `vite-env.d.ts` 的 TypeScript 定义文件,用于声明 Web Worker 文件的模块类型,内容如下: ```typescript declare module 'worker:*.js' { const workerConstructor: { new (): Worker }; export default workerConstructor; } ``` 该文件的作用是告诉 TypeScript,导入以 `worker:` 开头的模块时,其实际上是导入了一个 `Worker` 类型的构造函数。 3. 在 `vite.config.js` 文件中配置 `rollupInputOptions` 和 `rollupOutputOptions`,以便正确地打包 Web Worker 文件并将其输出到合适的目录中。示例代码如下: ```javascript import { defineConfig } from 'vite'; export default defineConfig({ build: { rollupOptions: { input: { main: './index.html', worker: './web-workers/worker-script.js', }, output: { dir: 'dist', entryFileNames: '[name].[hash].js', chunkFileNames: '[name].[hash].js', assetFileNames: '[name].[hash].[ext]', format: 'es', }, }, }, }); ``` 其中,`rollupOptions.input.worker` 属性指定了 Web Worker 文件的入口路径,`rollupOptions.output.dir` 属性指定了 Web Worker 文件的输出目录。 4. 在代码中使用 Web Worker,可以通过 `new Worker('worker:./web-workers/worker-script.js')` 的方式创建一个 Web Worker 实例。其中,`worker:` 是前缀,`./web-workers/worker-script.js` 是实际的 JavaScript 文件路径,注意路径需要相对于项目根目录。 这样,就可以在 Vite 中使用 Web Worker 了。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值