Soru Web İşçileri ile incelikli bir şekilde küçültme


Bu yüzden daha fazla duymaya başladım Web İşçileri. Bence kesinlikle harika, ama hiç kimsenin bu konuyla uğraştığını görmediğim soru, henüz yeni teknolojiye destek olmayan eski tarayıcıları nasıl destekleyeceğimiz.

Buraya kadar gelebildiğim tek çözüm, çok iş parçacıklı yürütmeyi simüle edecek çılgın zamanlayıcı tabanlı bir çözüme geri dönecek olan web çalışanı işlevselliği etrafında bir çeşit sarıcı yapmaktır.

Ancak bu durumda bile, web çalışanlarının javascript'i yürütmekte olan tarayıcının desteklenen bir özelliği olup olmadığını nasıl anlarsınız?

Teşekkürler!


19
2017-07-22 13:46


Menşei


Web İşçileri müsait değilse iyi bir ek olacağını düşünüyorum, Google Gears'ın İşçi Havuzunu kullanıp kullanamayacağımızı kontrol edebilir miyiz? - Mark W


Cevaplar:


Bu, web geliştirmenin asıl problemidir: ihtiyacınız olanı desteklemeyen tarayıcılar hakkında ne yapılmalı. Şu anda yalnızca karmaşık ve uzun süredir çalışan görevler için Web Çalışanlar'ı kullanmayı ve bazı nedenlerle sunucu tarafı yapılamayacağını savunuyorum. Bu şekilde, Web Çalışanlarınız yoksa, daha uzun süre beklersiniz. Aksi takdirde, kodlarınızı sarmalayıcılarla karıştırmanız ve daha sonra kaçınmaya çalışmamanız gerekir. Bozulma stratejim, sayfa yüklendikten sonra gerçekleşir.

yükleme işlevi pseudocode:

if( window.Worker /*check for support*/ )
    someObject.myFunction = function() { /*algorithm that uses Web Workers*/ }
else
    someObject.myFunction = function() { /* sad face */ }

Hala algoritmayı iki kez yazmanız gerekiyor, ancak Web İşçileri olmadan tarayıcıları desteklemek istiyorsanız bunu yapmanız gerekir. Yani bu ilginç bir soru ortaya çıkarır: iki kere bir şeyler yazmak için zamana (ve paraya) değmez mi, sadece bazı insanlar için biraz daha hızlı gidebilir mi?


11
2017-07-22 14:13



"desteklerWebWorkers" ... nasıl biri bunu belirler? - Joel Martinez
@Joel: if( Worker ) ... - geowa4
@Joel: açıklık için düzenlenmiş - geowa4
Web çalışanı yoksa, sunucu üzerinde de çalışabilirsiniz. Avantaj, kullanıcılar daha iyi tarayıcılara güncellendikçe sunucu yükünün azalması olacaktır. - Nosredna
Alışkanlık if (Worker) destek yoksa bir referans hatası atmak? Muhtemelen istersiniz if (window.Worker) yerine. - Jamie Wong


Birkaç gün boyunca bunu çiğnedikten sonra, blogumda bir makale yazmayı bitirdim:
http://codecube.net/2009/07/cross-platform-javascript-webworker/

Buradaki fikir şudur: WebWorker'ın tanımlanmadığı durumlarda, yerleşik teknikleri kullanan bir paketleyici API'sı vardır. Makaledeki örnek çok basit olmasına rağmen, tüm tarayıcılarda çalışır :-)


4
2017-07-29 19:10



Link artık mevcut değil :( - Mark E
Geçici bir DNS snafu, özür dilerim. Bu arada, işte google önbellek bağlantısı :) webcache.googleusercontent.com/... - Joel Martinez


Bespin projesi (ne diyorlar) cephe Bu, Web İşçileri, Gears İşçileri'nde ve ana iş parçacığında mevcut değilse, JavaScript kodunu çalıştırmasına olanak tanır.


2
2017-07-23 13:13





İşte John Resig ne dedi blogunda bir yoruma yanıt vermek

Bunu düşündüm - ama bu zor olacak. İşlem kodunuzu başlangıçtan setTimeout / setInterval kullanmanız gerekir (bu kod, hem çalışan hem de normal bir web sitesinde çalışacaktır). Sonuç olarak, çalışan etkin tarayıcılar için sonuç biraz daha yavaş olurken, en azından her iki durumda da çalışırdı.


1
2017-07-22 15:13





Web Worker desteği olmayan görevimin Firefox'ta (yanıt vermeyen komut dosyası) çok yavaş, ancak diğer tüm modern tarayıcılarda yeterince hızlı olmasının komik bir sorunu vardı. Web İşçileri ile, Web İşçileri'ni desteklemeyen Opera (10.50) dışındaki tüm tarayıcılarda çalıştı, ancak Opera onlar olmadan gayet iyi çalıştı.

Bu yüzden, kullanılabilir olduğunda Web Worker API'sini kullanan bir WorkerFacade yazdım ya da API'yi fiili Worker JS'ye bazı küçük eklemelerle taklit ettim. Bulabilirsin GitHub'da bir işçi olarak WorkerFacade. Benim için iyi çalıştı, başkalarına da yardım edebilir.


0
2017-07-03 22:25



Güncelleştirme: Opera şimdi Web Çalışanlarını destekliyor. - tjameson


Modernizr'i kullanabilirsinizhttp://modernizr.com/download/#-webworkers) tarayıcının web işçilerini destekleyip desteklemediğini tespit etmek için, iki noktadan sonra iki versiyona sahip olmanız gerekir ... Web tarayıcıları ile tarayıcıları görebilirsiniz. http://caniuse.com/webworkers

if(Modernizr.webworkers) 
{} 
else
{}

0
2017-10-01 21:58





@ geowa4

//globals
var useWorer={}
   ,noWorkerClosure=function(){...}
   ,myWorkerClosure=function(){...}
   ;
function init(){
         if(!!window.Worker){
           noWorkerClosure=null;
           useWorer=new myWorkerClosure();
         }
         else{
           useWorer=new noWorkerClosure();
           myWorkerClosure=null;
         }
}

Bu sayede hafızada yük boşalırsınız ve her seferinde destek istemenize gerek yoktur.


0
2017-12-18 15:55