This translation is incomplete. Please help translate this article from English.

Ένας Service worker βασικά δρα ως ένας εξυπηρετητής proxy που κάθετε μεταξύ μιας διαδικτυακής εφαρμογής, του περιηγητή διαδικτύου και του δικτύου (όταν είναι διαθέσιμο). Προορίζεται (μεταξύ άλλων) για την δημιουργία αποτελεσματικής εμπειρίας χωρίς σύνδεση, να παρακολουθεί τα αιτήματα δικτύου και να λαμβάνουν κατάλληλα μέτρα βάση του κατά πόσο το δίκτυο είναι διαθέσιμο και κατά πόσο είναι ενημερωμένα τα στοιχεία που βρίσκονται στην πλευρά του εξυπηρετητή. Θα επιτρέπει επίσης πρόσβαση στα push notifications και στην background sync APIs.

Έννοιες και χρήση του Service worker

Ένας service worker είναι ένας worker οδηγούμενος από συμβάντα καταχωρημένος σε μια προέλευση και μια διαδρομή. Έχει την μορφή ενός αρχείου JavaScritp που μπορεί να ελέγξει την ιστοσελίδα / ιστότοπο με την / τον οποίο σχετίζετε, παρακολουθώντας και τροποποιώντας τα αιτήματα πηγών και πλοήγησης, και αποθηκεύοντας προσωρινά πηγές με πολύ λεπτομερή τρόπο για να σας δώσει τον πλήρη έλεγχο σχετικά με τον τρόπο συμπεριφοράς της σε συγκεκριμένες καταστάσεις (ο ποιο προφανής είναι όταν το η σύνδεση στο δίκτυο δεν είναι δυνατή.)

Ένας service worker τρέχει το γενικό πλαίσιο ενός worker: ως εκ τούτου δεν έχει πρόσβαση στο DOM, και τρέχει σε διαφορετικό νήμα από αυτό που τρέχει η JavaScript της ιστοσελίδας, οπότε δεν εμποδίζει. Είναι σχεδιασμένοι να είναι πλήρως ασύγχρονοι, και ως συνέπεια, σύγχρονες APIs όπως η σύγχρονη XHR και localStorage δεν μπορούν να χρησιμοποιηθούν μέσα σε ένα service worker.

Οι Service workers λειτουργούν μόνο πάνω σε HTTPS, για λόγους ασφάλειας. Έχοντας τροποποιημένα αιτήματα δικτύου εντελώς ανοιχτά σε επιθέσεις τύπου man in the middle θα μπορούσαν να είναι πραγματικά πολύ κακές. Στον Firefox, η Service Worker APIs είναι επίσης κριμένη και δεν μπορεί να χρησιμοποιηθεί όταν ο χρήστης είναι σε private browsing mode.

Σημείωση: Οι Service Workers κερδίζουν τις προηγούμενες προσπάθειες σε αυτή την περιοχή όπως η AppCache επειδή δεν κάνουν υποθέσεις σχετικά με το τι προσπαθείτε να κάνετε και στην συνέχεια να σπάει επειδή αυτές οι υποθέσεις δεν ήταν εντελώς σωστές, έχετε λεπτομερή έλεγχο για τα πάντα.

Σημείωση: Οι Service workers κάνουν εκτεταμένη χρήση των promises, καθώς γενικότερα θα περιμένουν για αποκρίσεις να επιστρέψουν, οι οποίες μπορεί να είναι επιτυχής ή αποτυχημένες. Η αρχιτεκτονική των promises αποτελεί την ιδανική λύση.

Καταχώρηση

Ένας service worker αρχικά καταχωρείται χρησιμοποιώντας την μέθοδο ServiceWorkerContainer.register(). Αν είναι επιτυχής, ο service worker θα κατέβει στον πελάτη και θα προσπαθήσει να εγκατασταθεί/ενεργοποιηθεί (δείτε παρακάτω) για τα URLs που θα επισκεφτεί ο χρήστης μέσα σε ολόκληρη την προέλευση, ή μέσα σε ένα υποσύνολο που έχει καθοριστεί από εσάς.

Κατέβασμα, εγκατάσταση και ενεργοποίηση

Σε αυτό το σημείο, ο service worker θα τηρήσει τον ακόλουθο κύκλο εργασιών:

  1. Κατέβασμα
  2. Εγκατάσταση
  3. Ενεργοποίηση

Ο service worker κατεβαίνει άμεσα όταν ο χρήστης επισκέπτεται μια ιστοσελίδα που ελέγχετε από service worker.

Μετά το πρώτο κατέβασμα κατεβαίνει ξανά περίπου κάθε 24 ώρες. Μπορεί να κατέβει και ποιο σύντομα, αλλά πρέπει να κατεβαίνει κάθε 24 ώρες για αποτρέπει κακά σενάρια να ενοχλούν για πάρα πολύ καιρό.

Η εγκατάσταση επιχειρείται όταν το αρχείο που έχει κατέβει φαίνεται πως είναι καινούργιο — είτε και διαφορετικό σε ένα υφιστάμενο service worker (byte-wise σύγκριση), ή όταν συναντάτε ο πρώτος service worker για αυτή την/τον σελίδα/ιστότοπο.

Αν αυτή είναι η πρώτη φορά που ο service worker γίνετε διαθέσιμος, επιχειρείτε εγκατάσταση, στην συνέχεια μετά από μια επιτυχή εγκατάσταση ενεργοποιείτε.

Αν υπάρχει ένας υφιστάμενος service worker διαθέσιμος, η νέα έκδοση εγκαθιστάτε στο παρασκήνιο, αλλά δεν ενεργοποιείτε ακόμα — σε αυτό το σημείο αποκαλείτε ο εργάτης σε αναμονή. Ενεργοποιείτε μόνο όταν δεν υπάρχει καμία σελίδα που να χρησιμοποιεί τον προηγούμενο service worker. Μόλις σταματήσουν να υπάρχουν τέτοιες σελίδες ( έχουν κλείσει όλες δηλαδή ), ο νέος service worker ενεργοποιείτε (γίνενε ο ενεργός εργάτης).  Η ενεργοποίηση μπορεί να γίνει γρηγορότερα χρησιμοποιώντας την μέθοδο ServiceWorkerGlobalScope.skipWaiting() και οι τρέχουσες σελίδες μπορούν να διεκδικήσουν τον νέο ενεργό εργάτη χρησιμοποιώντας την μέθοδο Clients.claim().

You can listen out for the InstallEvent; a standard action is to prepare your service worker for usage when this fires, for example by creating a cache using the built in storage API, and placing assets inside it that you'll want for running your app offline.

There is also an activate event. The point where this event fires is generally a good time to clean up old caches and other things associated with the previous version of your service worker.

Your service worker can respond to requests using the FetchEvent event. You can modify the response to these requests in any way you want, using the FetchEvent.respondWith method.

Note: Because oninstall/onactivate could take a while to complete, the service worker spec provides a waitUntil method that, when called oninstall or onactivate, passes a promise. Functional events are not dispatched to the service worker until the promise successfully resolves.

For a complete tutorial to show how to build up your first basic example, read Using Service Workers.

Other use case ideas

Service workers are also intended to be used for such things as:

  • Background data synchronization
  • Responding to resource requests from other origins
  • Receiving centralized updates to expensive-to-calculate data such as geolocation or gyroscope, so multiple pages can make use of one set of data
  • Client-side compiling and dependency management of CoffeeScript, less, CJS/AMD modules, etc. for dev purposes
  • Hooks for background services
  • Custom templating based on certain URL patterns
  • Performance enhancements, for example pre-fetching resources that the user is likely to need in the near future, such as the next few pictures in a photo album.

In the future, service workers will be able to do a number of other useful things for the web platform that will bring it closer towards native app viability. Interestingly, other specifications can and will start to make use of the service worker context, for example:

  • Background synchronization: Start up a service worker even when no users are at the site, so caches can be updated, etc.
  • Reacting to push messages: Start up a service worker to send users a message to tell them new content is available.
  • Reacting to a particular time & date
  • Entering a geo-fence

Interfaces

Cache
Represents the storage for Request / Response object pairs that are cached as part of the ServiceWorker life cycle.
CacheStorage
Represents the storage for Cache objects. It provides a master directory of all the named caches that a ServiceWorker can access and maintains a mapping of string names to corresponding Cache objects.
Client
Represents the scope of a service worker client. A service worker client is either a document in a browser context or a SharedWorker, which is controlled by an active worker.
Clients
Represents a container for a list of Client objects; the main way to access the active service worker clients at the current origin.
ExtendableEvent
Extends the lifetime of the install and activate events dispatched on the ServiceWorkerGlobalScope as part of the service worker lifecycle. This ensures that any functional events (like FetchEvent ) are not dispatched to the ServiceWorker until it upgrades database schemas, deletes outdated cache entries, etc.
ExtendableMessageEvent
The event object of a message event fired on a service worker (when a channel message is received on the ServiceWorkerGlobalScope from another context) — extends the lifetime of such events.
FetchEvent
The parameter passed into the ServiceWorkerGlobalScope.onfetch handler, FetchEvent represents a fetch action that is dispatched on the ServiceWorkerGlobalScope of a ServiceWorker. It contains information about the request and resulting response, and provides the FetchEvent.respondWith() method, which allows us to provide an arbitrary response back to the controlled page.
InstallEvent
The parameter passed into the oninstall handler, the InstallEvent interface represents an install action that is dispatched on the ServiceWorkerGlobalScope of a ServiceWorker. As a child of ExtendableEvent, it ensures that functional events such as FetchEvent are not dispatched during installation. 
NavigationPreloadManager
Provides methods for managing the preloading of resources with a service worker. 
Navigator.serviceWorker
Returns a ServiceWorkerContainer object, which provides access to registration, removal, upgrade, and communication with the ServiceWorker objects for the associated document.
NotificationEvent
The parameter passed into the onnotificationclick handler, the NotificationEvent interface represents a notification click event that is dispatched on the ServiceWorkerGlobalScope of a ServiceWorker.
ServiceWorker
Represents a service worker. Multiple browsing contexts (e.g. pages, workers, etc.) can be associated with the same ServiceWorker object.
ServiceWorkerContainer
Provides an object representing the service worker as an overall unit in the network ecosystem, including facilities to register, unregister and update service workers, and access the state of service workers and their registrations.
ServiceWorkerGlobalScope
Represents the global execution context of a service worker.
ServiceWorkerMessageEvent
Represents a message sent to a ServiceWorkerGlobalScope. Note that this interface is deprecated in modern browsers. Service worker messages will now use the MessageEvent interface, for consistency with other web messaging features.
ServiceWorkerRegistration
Represents a service worker registration.
ServiceWorkerState
Associated with its ServiceWorker's state.
SyncEvent

The SyncEvent interface represents a sync action that is dispatched on the ServiceWorkerGlobalScope of a ServiceWorker. 

SyncManager
Provides an interface for registering and listing sync registrations.
WindowClient
Represents the scope of a service worker client that is a document in a browser context, controlled by an active worker. This is a special type of Client object, with some additional methods and properties available.

Specifications

Specification Status Comment
Service Workers Editor's Draft Initial definition.

Browser compatibility

Feature Chrome Edge Firefox (Gecko) Internet Explorer Opera Safari (WebKit)
Basic support 40 No support[1] 44.0 (44.0)[2] No support 24 No support[3]
install/activate events 40 No support[1] 44.0 (44.0)[2] No support (Yes) No support
fetch event/request/
respondWith()
40 No support[1] 44.0 (44.0)[2] No support No support No support
caches/cache

42

No support[1] 39.0 (39.0)[2] No support No support No support
ServiceWorkerMessageEvent deprecated in favour of MessageEvent

57

No support 55.0 (55.0)[2] No support No support No support
NavigationPreloadManager 59 No support   No support 46 No support
Feature Android Webview Chrome for Android Edge Firefox Mobile (Gecko) IE Phone Opera Mobile Safari Mobile
Basic support No support 40 No support[1] 44.0 (44.0) No support (Yes) No support[3]
 install/activate events No support 40 No support[1] 44.0 (44.0) No support (Yes) No support
fetch event/request/
respondWith()
No support 40 No support[1] 44.0 (44.0) No support No support No support
caches/cache No support 40 No support[1] 39.0 (39.0) No support No support No support
ServiceWorkerMessageEvent deprecated in favour of MessageEvent No support

57

No support 55.0 (55.0) No support No support No support
NavigationPreloadManager No support 59 No support No support No support 46 No support

[1] This feature is not supported yet, though it's already in development.

[2] Service workers (and Push) have been disabled in the Firefox 45 & 52 Extended Support Releases (ESR.)

[3] This feature is not supported yet, though it's currently in development.

See also

Εθελοντές και ετικέτες εγγράφου

 Συνεισφέροντες σε αυτή τη σελίδα: merianos
 Τελευταία ενημέρωση από: merianos,