2011-07-21 28 views

cevap

24

Çok temel bir ayrım: bir Worker yalnızca onu oluşturan komut dosyasından erişilebilir, bir SharedWorker aynı etki alanından gelen herhangi bir komut dosyası tarafından erişilebilir.

+4

Umm, yani “SharedWorker” penceresi ile açılan bir pencerede window.open ile aynı kaynaktan bulundukları varsayılarak başkalarına erişebilirler mi? Ya tamamen yeni bir sekmede bulunuyorlarsa, sanırım hayır mı? – Tower

+3

@Tower "Aynı kaynak", başka bir sayfa oluşturan sayfa ile ilgisi yok. Komut dosyasının çağrıldığı alan adını (kabaca) ifade eder. [Bu tabloya bakın] (https: //developer.mozilla.org/en-US/docs/Web/JavaScript/Same_origin_policy_for_JavaScript # Definition_of_an_origin). Bu nedenle, her iki "example.com" da iki komut dosyası, farklı sekmelerde bile aynı "Paylaşılan İşçi" ye erişebilir. – rvighne

+0

Yani, sıradan bir WebWorker, kullanıcı aynı sekme kullanarak aynı komut dosyasını çalıştıran sekmelerini çoğaltırsa bile yalnızca bir bağlantıya sahip olabileceği anlamına mı geliyor? Yoksa tarayıcı tarafından hala aynı senaryoyu mu ele alıyor? Başka bir deyişle, app.js worker.js'ye bağlanır, ardından kullanıcı kendi sekmelerini çoğaltır: can sekmesi 2 hala worker.js öğesine bağlanabilir mi? Worker.js, tab1'in app.js ve tab2's app.js. arasında hala aynı bellek havuzunu koruyacak mı? Ben ilgileniyorum çünkü bir arka plan işlemi/daemon bir Kuyruk yapısı korumak ve aynı uygulama içinde herhangi bir açık sekmesinden olayları bu tür bir artalan için. – Cody

9

SharedWorker'in daha sonra İşçi'ye göre daha fazla işlevi var gibi görünüyor. Bu işlevsellik arasında

geçerli:

  • küresel kapsamını paylaştı. Tüm SharedWorker örnekleri, tek bir genel kapsamı paylaşır.

W3C Spektroskopisi:

WHATWG Spektroskopisi:

+0

'a bakmaya değer mi? SharedWorker'ın daha fazla "işlem gücü" var mı? – Pacerier

6

Bir paylaşılan çalışan birden çok bağlantıyla çalışabilir. Çeşitli komut dosyaları arasında iletişimi sağlamak için iletileri portlara gönderir. Öte yandan, özel bir işçi ana bağlantısına bağlanır ve diğer yazılara (çalışanlara) mesaj gönderemez.

+0

Yani, sıradan bir WebWorker, kullanıcı aynı sekme kullanarak aynı komut dosyasını çalıştıran sekmelerini çoğaltırsa bile yalnızca bir bağlantıya sahip olabileceği anlamına mı geliyor? Yoksa tarayıcı tarafından hala aynı senaryoyu mu ele alıyor? Başka bir deyişle, app.js worker.js'ye bağlanır, ardından kullanıcı kendi sekmelerini çoğaltır: can sekmesi 2 hala worker.js öğesine bağlanabilir mi? Worker.js, tab1'in app.js ve tab2's app.js. arasında hala aynı bellek havuzunu koruyacak mı? Ben ilgileniyorum çünkü bir arka plan işlemi/daemon bir Kuyruk yapısı korumak ve aynı uygulama içinde herhangi bir açık sekmesinden olayları bu tür bir artalan için. – Cody

5

SharedWorker kullanmayı düşünen herkese - Apple, WebKit'ten 2015'te SharedWorker desteğini kaldırdı. Yeniden yapılandırma için herhangi bir plan yoktur. Service Workers desteği WebKit için geliştirilmekte ve benzer özellikler sunmaktadır (see here for comparisons).

ServiceWorkers in WebKit here'un gelişimini (Safari desteği) takip edebilirsiniz.

+0

Bu ne anlama geliyor? Apple, paylaşılan çalışanları desteklemiyor mu? – Pacerier

+0

Bu, Apple WebKit'in [Changeset 178310] (https://trac.webkit.org/changeset/178310/webkit) itibariyle SharedWorkers desteğini kaldırdığı ve desteklerini yeniden planlamayı planladığı anlamına gelir. – charliebeckwith

İlgili konular