Реализация таймера в JavaScript с помощью веб-работников - PullRequest
0 голосов
/ 08 октября 2019

Я пытаюсь реализовать таймер в JavaScript с помощью веб-работников. Я написал следующий код. Но это не работает. Кто-то может указать, почему это не работает? У меня нет большого опыта работы с JavaScript. Итак, было бы замечательно, если бы кто-то подробно объяснил причину.

Вот что я пытаюсь сделать:

Сначала создайте sharedArrayBuffer и рабочий поток,И создание еще одного массива, над которым я поработаю и хочу посчитать время. Затем отправка sharedArrayBuffer в рабочий поток, который увеличивает первое значение в массиве в цикле for. Наконец, я читаю это значение в файле main.js и каждый раз получаю 0.

main.js

        var buffer = new SharedArrayBuffer(1024);
        var i;
        var uint32 = new Uint32Array(buffer);
        var myWorker = new Worker('worker.js');
        var array = new Uint32Array(8);
        array[0] = 0;
        console.log(Atomics.load(uint32,0),array[0]);

        myWorker.postMessage(buffer);

        for(i=0;i<300000000;i++) {
            array[0] += i;
        }

        console.log(i,Atomics.load(uint32,0),array[0]);

работник. js

        onmessage = function(buffer) {
        console.log('from worker');
        var uint32 = new Uint32Array(buffer.data);

        for(i=0; ;i++) {
            uint32[0] += 1;
        };
        }

1 Ответ

0 голосов
/ 08 октября 2019

Вы не должны использовать подобный код, чтобы попытаться определить, сколько времени занимает выполнение кода. Это бессмысленно, потому что увеличение счетчика в массиве не связано со временем или какой-либо единицей измерения. Вместо этого есть API, которые можно использовать для оценки производительности, такие как console.time():

    onmessage = function(buffer) {
      console.time('TimeSpentInWorker');

      // Your code...

      console.timeEnd('TimeSpentInWorker');
    };

Вы также можете сравнить разницу между вызовами Date.now() дважды или посмотрите в Performance API .

...