gpt4 book ai didi

javascript - 在后台运行持久的 Web Worker 而不会受到限制

转载 作者:行者123 更新时间:2023-12-04 15:01:56 26 4
gpt4 key购买 nike

我想在后台运行一个网络 worker (在移动设备上,它在桌面上工作),它通过发送 HTTP 请求每分钟执行一次操作。不幸的是,网站在后台运行了大约 5 分钟后,将不再发送任何 HTTP 请求……一旦您返回网站,所有网络请求都会恢复。
似乎不允许网络 worker 在后台运行,至少不能在移动设备上运行,因为它在桌面上运行良好。我找不到任何说明为什么它被限制的来源,以及可以做些什么。我发现了一个类似的 issue从 2017 年开始,那是 4 年前,并没有按照我想要的方式得到回答,也可能已经过时了。
我想到了以下解决方案:

  • 通常在 native Android 中,您可以显示一个通知,以确保您的应用程序继续在后台运行,我想知道这是否也可以在网络上与网络 worker 结合使用。
  • 如果你在你的网络 worker 中打开一个网络套接字,它会让你的网络 worker 在后台保持活跃吗?
  • 渐进式网络应用程序。不幸的是,它似乎没有保持活跃..

  • 有什么我可以做的吗?

    最佳答案

    所有现代浏览器都限制后台使用。原因很简单:后台任务需要资源,用户不希望后台有一百万个网站吃掉你所有的内存。恶意网站可能只是使用用户的 CPU 进行比特币挖掘等。
    但是有一种方法可以在后台做一些事情。您已经在问题中提到它:您需要发送推送通知。您可以只包含 fetch()在您的推送通知处理程序中。
    但问题是:每次您希望网站获取某些内容时,您都必须发送通知,否则您的请求将始终/有时会被阻止,具体取决于您的浏览器。 From MDN :

    Activating a service worker to deliver a push message can result in increased resource usage, particularly of the battery. Different browsers have different schemes for handling this, there is currently no standard mechanism. Firefox allows a limited number (quota) of push messages to be sent to an application, although Push messages that generate notifications are exempt from this limit. The limit is refreshed each time the site is visited. In comparison, Chrome applies no limit, but requires that every push message causes a notification to be displayed.


    您只需要设置推送通知。有 a great guide from Google如果您不知道如何设置推送通知,您可以关注。
    Service Worker 中的实现如下所示:
    self.addEventListener('push', function(event) {
    if (!(self.Notification && self.Notification.permission === 'granted')) {
    return;
    }

    // The HTTP request
    fetch("...");

    var data = {};
    if (event.data) {
    data = event.data.json();
    }
    var title = data.title || "Background activity";
    var message = data.message || "You can ignore this";
    var icon = "images/new-notification.png";

    var notification = new Notification(title, {
    body: message,
    tag: 'simple-push-demo-notification',
    icon: icon
    });

    notification.addEventListener('click', function() {
    if (clients.openWindow) {
    clients.openWindow('https://example.blog.com/2015/03/04/something-new.html');
    }
    });
    });
    (复制代码 from MDN )

    关于javascript - 在后台运行持久的 Web Worker 而不会受到限制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66822611/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com