Web Çalışanları için Kullanım Durumları Nelerdir? [kapalı]


174

Web Workers API'sını kullanmak için gerçek dünyaya özgü bir manzara arıyorum .


Mobil / webkit platformları tarafından destekleniyor mu?
dmp

Emin bilmiyorum, ama tahmin ediyorum.
Sergey Ilinsky

6
@danp Tarayıcı desteği: caniuse.com/webworkers
Dheeraj Vepakomma

1
İlk önce bir web çalışanı kullandığımız, daha sonra onsuz daha iyi olduğumuzu belirlediğim bir dava yazdım - windward.net/blogs/web-workers-abandon/#.Vl3QdXarQ-U
David Thielen

Yanıtlar:


143
  • John Resig (jQuery şöhretinden) burada web işçileri kullanmanın ilginç örnekleri var - oyunlar, grafikler, kripto.

  • Başka bir kullanım Web G / Ç - başka bir deyişle, arka planda URL'leri yoklamaktır. Bu şekilde sorgulama sonuçlarını bekleyen kullanıcı arayüzünü engellemezsiniz.

  • Başka bir pratik kullanım: Bespin içinde, onlar dizim, yapmak Web İşçilere kullandığınız olmaz Uygulamayı kullandığınız ederken düzenleme kodunuzu engellemek istiyor.

  • Gönderen Mozilla : Tek yönlü işçiler yararlı isimli kodunuzu kullanıcı arayüzü iplik engellemeden işlemciyi yoğun hesaplamalar için izin vardır.

    Pratik bir örnek olarak, #s büyük bir tablo olan bir uygulamayı düşünün (bu gerçek dünya, BTW - ~ 2 yıl önce programladığım bir uygulamadan alınmıştır). Tablodaki bir # değerini giriş alanı aracılığıyla değiştirebilirsiniz ve farklı sütunlardaki diğer sayıların bir kısmı oldukça yoğun bir işlemle yeniden hesaplanır.

    Eski iş akışı şuydu: # değerini değiştirin. JavaScript diğer numaralardaki değişikliklerden geçerken ve cehennem ve geri dönüş için optimize ettikten sonra web sayfası 3 dakika boyunca yanıt vermiyorken kahve alın. Kahve ile geri dön. İkinci bir numarayı değiştirin. Birçok kez tekrarlayın. KAYDET düğmesine tıklayın.

    İşçilerle yeni iş akışı şu olabilir: # değerini değiştirin. Bir şeyin yeniden hesaplandığını ancak diğer # numaralarını değiştirebileceğiniz bir durum mesajı alın. Daha fazla # değiştir. Değişiklik tamamlandığında, durum "tüm hesaplamalar tamamlandı, şimdi son #'ları inceleyip kaydedebilirsiniz" olarak değişene kadar bekleyin.


5
Harika bağlantılar! İşçileri hiç duymamıştım ... aaa, İşçiler. (Gitmek için uzun, sıcak bir duş al ...)
Peter Rowell

51
Bunun iki yaşında bir cevap olduğunu biliyorum, ancak sadece 2. madde (yoklama URL'leri) için Web Çalışanlarına ihtiyacınız olmaması gerektiğini belirtmek istedim. XHR zaman uyumsuz olarak gerçekleşir ve engellemez; XHR isteklerini ayrı bir iş parçacığında çalıştırmaya gerek yoktur. (Tabii ki, modern bir uygulamada yoklama yerine WebSockets kullanmak istersiniz.)
josh3736

6
Haklısın ama şimdi birçok paralel XHR aync isteği yapmanın bir şekilde tarayıcıyı mutsuz edip edemeyeceğini merak ediyorum? Ayrıca, işçilerin yararlı olabileceği XHR yanıtlarını işlemek için yerel kaynaklara ihtiyacınız vardır.
DVK

Tüm paralel istekler aynı sunucuya aitse, ana bilgisayar başına ad sınırını 2 ile 9 eşzamanlı bağlantı arasında bir yere vuracaksınız. (Sınırın ana iş parçacığından veya bir çalışandan başlatılan tüm bağlantılar için geçerli olduğunu varsayabilirim .) Elbette, aynı anda çalışan 10 eşzamanlı isteğiniz varsa, muhtemelen uygulamanızın tasarımını yeniden düşünmeniz gerekir.
josh3736

2
Basit sorumu özür dilerim, ancak yukarıdaki örnekte "#" olarak neyi kastediyorsunuz?
shrewdbeans

35

Bunları tarayıcıdan sunucuya daha fazla miktarda veri göndermek için kullandım. Açıkçası, bunu düzenli AJAX çağrılarıyla yapabilirsiniz, ancak bu her ana bilgisayar adı için değerli bağlantılardan birini alırsa. Ayrıca, kullanıcı bu işlem sırasında bir sayfa geçişi yaparsa (örneğin, bir bağlantıyı tıklarsa), önceki sayfadaki JavaScript nesneleriniz kaybolur ve geri çağrıları işleyemezsiniz. Bir web çalışanı kullanıldığında, bu etkinlik bant dışında gerçekleşir, böylece tamamlanacağına dair daha iyi bir garantiniz olur.


2
Ancak iletiyi web çalışanıyla değiştirmelisiniz. Bu operasyonun maliyeti ne zaman hak etmeyi hak ediyor?
Danielo515

6

Başka bir Kullanım örneği:

Sıkıştırılmış biçimde sunucudan değiştirilen çok sayıda görüntü ve diğer medya dosyalarınız varsa, arka planda dosyaları sıkıştırma / sıkıştırmayı kaldırma.


39
Bu JavaScript'te olmamalı. Görüntüler, görüntü verilerini verimli bir şekilde sıkıştırmak için tasarlanmış algoritmalar kullanılarak zaten sıkıştırılmıştır (PNG, JPEG). Üstüne başka bir sıkıştırma katmanı atmak aslında verilerin boyutunu artırabilir . Diğer veri türleri için (örneğin büyük bir JSON dosyası), sıkıştırma standart HTTP gzipping kullanılarak tarayıcı tarafından gerçekleştirilmelidir. JavaScript'te sıkıştırma yapıyorsanız, muhtemelen yanlış yapıyorsunuzdur .
josh3736

11
Bazı kullanıcıların kullanım durumunu diskalifiye ettiğini görüyorum, ancak söylemek istediğim şey şu. MS word gibi bir uygulamayı, görüntüleri, müzik dosyalarını, verileri, excel sayfalarını vb. tek bir dosyaya gömebileceğiniz güçlü bir belge editörü gibi düşünün. web tabanlı bir istemciniz ve bir masaüstü istemciniz ve bir IOS / Android istemciniz olduğunu düşünün. Bu tür bir kullanım durumu için, tüm dosya içeriğini bir zip dosyasında saklayabilir ve ardından her istemcide sıkıştırmayı açabilirsiniz.
sbr

3
Instapaper yer işareti, kaydedilen sayfayı sunucuya göndermeden önce sıkıştırır. Zamandan ve bant genişliğinden tasarruf sağlar.
stevendaniels

12
@ josh3736 Bir tarayıcının yapabileceği tek şey, bir web sunucusundan (veya tarayıcı önbelleğinden) bir dosyayı açmaktır. Verileri yerel depolamadan veya web soketinden çıkaramaz ve hiç sıkıştırmaz. Web uygulamaları akış yukarı gittikçe artan miktarda veri gönderiyor ve bunun için sıkıştırma son derece yararlı. Bir yıl önce bunun yayınlandığı tarihte aynı derecede geçerli: JavaScript sıkıştırması için geçerli herhangi bir kullanım durumu düşünemiyorsanız, muhtemelen hayal gücünüz yoktur.
Adria

1
@Adria: Websocket standardı sıkıştırma desteği ekleme sürecindedir . Tarayıcıda ( <canvas>) oluşturulan resimlerle uğraşıyorsanız , görüntü verilerini sıkıştırılmış bir biçimde (ör. Png) alabilirsiniz. Benim nokta olduğunu değildi asla JS sıkıştırmak için uygun; benim açımdan, çoğu durumda , değil ve çoğu durumda - özellikle bu cevabın bahsettiği görüntülerle uğraşmak - kendi sıkıştırmanızı yuvarlamak için daha iyi bir alternatif var.
josh3736
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.