Araçlar ve kitaplıklar: web çalışanlarıyla iletişim



  1. Araçlar ve kitaplıklar: web çalışanlarıyla iletişim

Web çalışanları, bir web uygulamasının ana iş parçacığından karmaşık hesaplamaları boşaltmak ve böylece bir uygulamanın performansını artırmak için idealdir. Çalışan iş parçacığı ile ana iş parçacığı arasındaki iletişimi kolaylaştıran ilginç bir kitaplık Comlink’tir.


Çalışan iş parçacıkları ile ana iş parçacığı arasındaki iletişimin, yöntem kullanılarak mesaj tabanlı olduğu bilinmektedir. mesaj sonrası() (gönderen tarafında) ve bunun için olay dinleyicileri İleti-Olay (alıcı tarafında). RPC tarzı ana iş parçacığından bir çalışan içindeki işlevleri çağırmak istiyorsanız, yanıt mesajlarının yine de karşılık gelen istek mesajlarına, genellikle bir istek kimliğini yanlarında sürükleyerek atanması gerekebilir.

iletişim


Comlink kitaplığı, ana iş parçacığı ile çalışan iş parçacıkları arasındaki bu iletişimi ek bir soyutlama düzeyiyle basitleştirir: bir işçi içinde tanımlanan sınıflar, nesneler ve işlevler, Comlink kullanılarak doğrudan ana iş parçacığına alınabilir ve her zamanki gibi kullanılabilir. Örneğin, nesne örnekleri doğrudan içe aktarılan sınıftan oluşturulabilir ve nesne yöntemleri, geliştiricilerin çalışan iletişim ayrıntılarına dokunmasına gerek kalmadan doğrudan çağrılabilir. Teknik olarak, Comlink bunu proxy modelini kullanarak gerçekleştirir: çalışan kodu içinde tanımlanan ilgili nesne (veya sınıf/işlev) için Comlink, çağıran kodda bir proxy örneği oluşturur.

Comlink bunun için üç yöntem sunar:

  • Comlink.expose() harici olarak kullanılabilir hale getirilecek bir çalışan içindeki nesneyi tanımlamak için kullanılır.
  • Comlink.proxy() türlerin bir nesne örneği için oluşturuldu işçiler, pencere veya Mesaj Bağlantı Noktası önceden çalışandaki tüm mesaj iletişimini ve API’yi gizleyen bir proxy nesnesi Comlink.expose() eşzamansız bir API olarak tanımlanan nesne.
  • Comlink.proxyValue() tam olarak gibi çalışır Comlink.proxy()ancak küçük bir farkla: Sırasında Comlink.proxy() orijinal nesnenin bir kopyasını yapmak çalışır Comlink.proxyValue() gerçekten bir proxy olarak – ana iş parçacığındaki proxy nesnesini değiştirmek, çalışan iş parçacığındaki orijinal nesneyi de değiştirir.
Kurulum ve örnek


Comlink doğrudan proje web sitesinden indirilebilir veya npm aracılığıyla kurulabilir:


npm install comlinkjs

Herhangi bir nesne (sınıflar, işlevler, vb.) daha sonra, sınıf için aşağıdaki listede olduğu gibi, işçi için kod içinde tanımlanır. hesap makinesi (elbette pratikte, sadece iki sayı eklemekten daha yoğun bellek gerektiren bir şey hesaplar) ve bunu yönteme iletir Comlink.expose(). Bu, birden çok nesne tanımlandığında, Comlink’in daha sonra hangi proxy nesnesi için oluşturulacağını dahili olarak bilmesi için gereklidir.

importScripts("/node_modules/comlinkjs/comlink.global.min.js");
class Calculator {
sum(x = 0, y = 0) {
return x + y;
}
}
Comlink.expose(Calculator, self);

Ana iş parçacığı tarafında, her zamanki gibi bir örnek oluşturursunuz. işçilerancak daha sonra yönteme iletir Comlink.proxy(). Böylece, aşağıdaki örnek, işçide tanımlanan sınıf için bir proxy oluşturur. hesap makinesi oluşturuldu. Öyleyse bırak gitsin yeni hesaplayıcıyı bekleyin() yeni nesne örnekleri oluşturun. O Bekle ana iş parçacığı ile çalışan iş parçacığı arasındaki iletişim eşzamansız olduğu için gereklidir. Bu, örnekteki çağrı gibi diğer proxy API çağrıları için de geçerlidir. toplam().

<!doctype html>
<script src="/node_modules/comlinkjs/comlink.global.min.js"></script>
<script>
async function init() {
const worker = new Worker('worker.js');
const Calculator = Comlink.proxy(worker);
const calculator = await new Calculator();
const result = await calculator.sum(80, 90);
console.log(result);
};
init();
</script>
Çözüm


Comlink, web çalışanlarıyla mesaj iletişiminin teknik ayrıntılarını basitleştirmeye çalışır ve proxy modelinin kullanımına ilginç bir örnektir. Comlink yalnızca web çalışanlarıyla iletişim kurarken değil, aynı zamanda diğer tarayıcı pencereleri, çerçeveleri ve genel olarak her şeyle iletişim kurarken de kullanılabilir. Mesaj Bağlantı Noktası-Kanal Mesajlaşma API arayüzü uygulandı.


()



Haberin Sonu
 
Üst