
Service Workers - andRyanMiller
https://frontendian.co/service-workers
======
dannyw
I like service workers, but I don't like the lack of control I have.

For example, I want Messenger to send me notifications if I have the tab open,
but I don't want the service worker to maintain a persistent connection and
send me notifications with the tab closed.

Unfortunately, I am not able to block service workers. My only option is to
block notifications entirely, which doesn't even stop the service worker.

~~~
ahsanejaz
The service worker does not maintain a persistent connection. Some
websites/pwa's allow you to configure that.

~~~
bryanrasmussen
but then you're depending on the website/pwa to be a good citizen and allow
you to configure that

~~~
sleepychu
That's ok, I'm sure the EU will sort out some kind of service worker popup in
due course!

------
sbr464
Great write up. I’ve been exploring SWs recently to help with downloading and
caching data in the background for faster UI.

Question, I’d like to avoid doing large downloads or possibly cap the transfer
rate to avoid any potential jank. Is there a best practice or is it possible
to monitor the current browser interaction to determine how strategically best
to pull data with a SW?

Depending on what a user chooses to cache, it’s JSON data (1-10MB) going to a
mix of localstorage and indexedDB.

~~~
pmlnr
May I ask the justification to download 1-10MB JSON on the user's system
without the user being aware?

~~~
ahsanejaz
You also cache regular web resources like images. It is for the user's benefit
since next visit to the site can be faster.

~~~
pmlnr
You misunderstand. Service worker traffic is invisible, unlike loading an
image and generally speaking can't be governed, unlike visible elements.

Loading 1-10MB JSON might drain a significant portion of mobile data. It could
take a long time, meaning it may need to re-start it a couple of times, due
to, say, a flaky 3G connection.

I'm curious on the why - unless this is an announced feature, I don't think
this should be an automatic process and should only be done on user demand
explicitly.

~~~
sbr464
I agree with you, there are several settings avail to control what is
optimized, it’s typically enabled on faster devices/connections at work. I
would be upset as well if a site naively used up a connection in the
background.

------
michaelmrose
"Imagine being able to respond to push notifications, intercept resource
requests, and schedule background syncronization, all without the need for a
user to actively have your website open in front of them."

".. by authoring special-purpose JavaScript which you register with the
browser."

Why does this seem like something useful for malware and generally annoying
me.

~~~
Brakenshire
Push requests only exists on Chrome and is behind a permission, intercepting
resource requests within the domain of a website could cause some annoyances,
can’t see the malware effect immediately. Scheduling a download for a stable
connection, again, could be an annoyance, but what’s the malware implication?

~~~
chrismorgan
The malware angle is basically service-worker-powered cache poisoning: if you
can get the server to serve your code once, users can get a service worker
installed, and intercept resource requests under that path. It’s limited in
practical value because you have to be able to serve a full JS file as the
service worker, rather than just injecting a snippet of JS as the most common
technique is, but it _is_ a genuine attack vector.

~~~
johncolanduoni
Service workers automatically reload after 24 hours, regardless of caching
headers (though I believe they’ll respect a 304). I believe this was done
partially to limit the duration of such a compromise.

~~~
michaelmrose
I don't want to be compromised at all and it seems like a great way keep it
that way is to force web pages to live in you know pages which I can close and
know they aren't effecting my browser.

It also breaks my mental model of how the browser works in a way that will be
incomprehensible to users.

Instead of my computer is acting funny I need to reboot we will have my
browser is acting funny I need to restart it or we can combine the 2.

My browser is acting funny lets power cycle again. Coming soon to a windows PC
near you.

~~~
johncolanduoni
Unless there’s a sandbox escape, the worst it could do is use some extra CPU
cycles and RAM. It’s not good at doing stuff like bitcoin mining because it’s
event driven (much more like a page than a web worker). All the browsers are
also very aggressive at killing them unless a page is open or you get a push
notification.

------
pmlnr
Firefox:

    
    
        about:config 
        dom.serviceWorkers.enabled;false
    

Why:

They bite. The generic idea may even be reasonable (offline working web app),
but every single time I encounter service workers they make things worse.

If you load a React frontend, it'll, by default, deploy a service worker. Good
luck trying to load anything non-react from that resource/server.

I never asked for a web app to work in the background once I closed a site.
Nobody should be trained to expect websites work in the background - that is
not how they are. If there is no tab open, there should be no notification, no
nothing. That is how the web works.

~~~
htor
> That is how the web works.

good luck trying to convince google of that. they are shaping the web just the
way they want it. push notifications? nobody ever except the marketing
apartment thought that was a good idea to add to anything. if we try making
everything on the web like mobile apps we're gonna get garbage features like
this and false expectations on what the web should be like.

~~~
bryanrasmussen
I'm pretty sure that everyone who ever used some sort of messaging application
thinks that push notifications are a good idea.

~~~
ForHackernews
Nobody wanted their "messaging application" to run in a web browser before
Google. AIM, ICQ, IRC, and Yahoo Messenger all used local clients.

~~~
untog
No actual user cares how their messaging application is made. If it's a
progressive webapp or a native app, and the actual experience can be the same,
then it really doesn't matter.

> AIM, ICQ, IRC, and Yahoo Messenger all used local clients.

A webapp with a service worker _is_ a local client. And a lot of people use
Whatsapp Web, or Facebook Messenger's web site. I know I do.

~~~
ForHackernews
I think users do care. I care that I can't close my browser without missing
messages. I dislike that Electron apps use half my RAM.

If by "don't care" you mean "don't care enough to abandon a platform their
friends are on" then I guess I agree. But all you've proven is that network
effects matter.

------
c0brac0bra
_" Imagine being able to respond to push notifications"_

Yes, wouldn't it be wonderful if we could do this in all major browsers today?
_sigh_

------
eletious
Maybe I'm out of touch, but for messaging apps wouldn't it be desirable to
have an actual service from a native app that you can enable/disable in your
OS?

~~~
Ajedi32
On some platforms, progressive web apps effectively _are_ native:
[https://developers.google.com/web/fundamentals/integration/w...](https://developers.google.com/web/fundamentals/integration/webapks)

------
werdnapk
Note to Author: Irregardless is not a word.

~~~
bluntfang
Yes, it is.

[https://www.merriam-webster.com/dictionary/irregardless](https://www.merriam-
webster.com/dictionary/irregardless)

~~~
camflan
Webster’s is a descriptive dictionary, which will include nonstandard words so
that it can _describe_ them, and provide guidance on what should be used
instead. Just like in that link - it suggests the use of “regardless”

------
baybal2
I'm very glad about existence of this wonderful extension:
[https://chrome.google.com/webstore/detail/manage-web-
workers...](https://chrome.google.com/webstore/detail/manage-web-
workers/mcojhlgdkpgablplpcfgledhplllmnih)

~~~
mellett68
Web workers and service workers do different things

