1. function createWorker(f) {
    2. var blob = new Blob(['(' + f.toString() +')()']);
    3. var url = window.URL.createObjectURL(blob);
    4. var worker = new Worker(url);
    5. return worker;
    6. }
    7. var pollingWorker = createWorker(function (e) {
    8. var cache;
    9. function compare(new, old) { ... };
    10. setInterval(function () {
    11. fetch('/my-api-endpoint').then(function (res) {
    12. var data = res.json();
    13. if (!compare(data, cache)) {
    14. cache = data;
    15. self.postMessage(data);
    16. }
    17. })
    18. }, 1000)
    19. });
    20. pollingWorker.onmessage = function () {
    21. // render data
    22. }
    23. pollingWorker.postMessage('init');

    上面代码中,Worker 每秒钟轮询一次数据,然后跟缓存做比较。如果不一致,就说明服务端有了新的变化,因此就要通知主线程。

    https://www.ruanyifeng.com/blog/2018/07/web-worker.html

    https://developer.mozilla.org/zh-CN/docs/Web/API/Worker