Sobes.tech
Middle

Τι είναι οι web workers και ποιος είναι ο σκοπός τους;

sobes.tech AI

Απάντηση από AI

Οι web workers είναι ένας τρόπος εκτέλεσης κώδικα JavaScript σε ένα φόντο, ξεχωριστό από το κύριο νήμα διεπαφής χρήστη του προγράμματος περιήγησης.

Σκοπός:

  • Εκτέλεση υπολογισμών που απαιτούν πόρους χωρίς να μπλοκάρει το κύριο νήμα, αποτρέποντας το πάγωμα της διεπαφής.
  • Επεξεργασία μεγάλων δεδομένων ή εκτέλεση μακροχρόνιων λειτουργιών (π.χ. parsing, συμπίεση, αιτήματα δικτύου σε ορισμένες περιπτώσεις) στο παρασκήνιο.
  • Βελτίωση της απόδοσης και της ανταπόκρισης των web εφαρμογών.

Τύποι web workers:

  1. Dedicated Worker: Συνδέεται με το σενάριο που τον δημιούργησε.
  2. Shared Worker: Μπορεί να μοιραστεί μεταξύ πολλών σεναρίων που εκτελούνται σε διαφορετικά παράθυρα ή καρτέλες του ίδιου τομέα.
  3. Service Worker: Παρεμβαίνει στις αιτήσεις δικτύου, διαχειρίζεται την προσωρινή μνήμη, παρέχει offline πρόσβαση, υποστηρίζει ειδοποιήσεις push.

Παράδειγμα δημιουργίας και χρήσης ενός Dedicated Worker:

// main.js (κύριο νήμα)
const worker = new Worker('worker.js');

// Αποστολή μηνύματος στον worker
worker.postMessage('Ξεκίνα βαριά υπολογισμούς');

// Λήψη μηνυμάτων από τον worker
worker.onmessage = function(event) {
  console.log('Λήφθηκε από τον worker:', event.data);
};

// worker.js (κώδικας worker)
self.onmessage = function(event) {
  console.log('Λήφθηκε στον worker:', event.data);

  // Προσομοίωση βαρέων υπολογισμών
  let result = 0;
  for (let i = 0; i < 1000000000; i++) {
    result += i;
  }

  // Αποστολή μηνύματος πίσω στον κύριο νήμα
  self.postMessage('Ο υπολογισμός ολοκληρώθηκε, αποτέλεσμα: ' + result);
};

Περιορισμοί:

  • Δεν υπάρχει άμεση πρόσβαση στο DOM.
  • Δεν μπορούν να χρησιμοποιηθούν ορισμένες παγκόσμιες μεταβλητές του κύριου νήματος (π.χ. window, document).
  • Η επικοινωνία γίνεται μέσω ασύγχρονης ανταλλαγής μηνυμάτων (postMessage και onmessage/addEventListener('message')).
  • Τα δεδομένα μεταφέρονται μεταξύ νημάτων μέσω αντιγραφής (structured clone algorithm), αλλά για μεγάλα δεδομένα μπορούν να χρησιμοποιηθούν Transferable Objects για μεταφορά μέσω αναφοράς (με απώλεια πρόσβασης στο αρχικό νήμα).