2012-12-28 20 views
15

Bunun hakkında ne düşündüğünüzü bilmek istiyorum. Bir web çalışanında senkronize istekler (XMLHttpRequest) kullanılması önerilir mi? Hangi sorunları bulabilirim?Web çalışanlarındaki senkronize istekler hakkındaki görüşler

Bunu uygulamamda test ediyorum ve herhangi bir sorun bulamadım. Ama jQuery ve AJAX ile eski deneyimler nedeniyle bu senkronizasyon davranışından korkuyorum. Uygulamam, bir veritabanındaki birkaç tablodan büyük miktarda veri alıyor ve bu bir zaman gerektiriyor. Bir tablodan alınan her veri yığını için, tüm şeyi çok fazla geciktirmemek için anında işlemem gerekiyor. Bu arada, kullanıcı tarayıcıyla etkileşiyor, bu yüzden engellenebilir ve web çalışanlarının iyi çalışacağını düşündüm. Bunun iyi bir çözüm olduğunu düşünüyor musunuz? Yoksa asenkron sorgular ile denemeli miyim?

Teşekkür ederiz.

+0

Bu mümkün ... ve gereksinimlerinize bağlıdır, ancak AJAX asenkronize olmadan AJAX olmayacaktır !!! – geekman

+0

SJAX'ı (eşzamanlı javascript ve XML) öneremem ancak bazı gerçekleri de görmek istiyorum ve endişelerim çok iş parçacıklı ortamdaki davranışları yansıtmıyor. –

+0

Teşekkürler beyler. AJAX'taki A'nın anlamını biliyorum :) ama web çalışanlarını kullanırken birçok insanın böyle bir şey yaptığını gördüm. – Gecko

cevap

15

Ben, sert gerçekleri yok ama sen görüş sordu beri ... Chrome'da bir anlatıyor sorunu bulunmaktadır :)

: Çok fazla Web İşçileri sessiz çökmesine neden olabilir (kapaklar ~ 60-100 this bug report'a göre). Genel sorun, Web Çalışanlar kaynak yoğun, en azından v8 ile.

bir Web Worker içinde senkron HTTP çağrıları yapıyoruz eğer birden fazla HTTP arama yapmak sonuna kadar gidiyoruz varsayarsak: Bir anlamda

  • , zaman uyumsuz Web için asenkron HTTP çağrıları ticaret konum İşçiler, sadece başka bir ara ürünü karıştıracaklar ve hala işleri asenkron olarak yönetmelisiniz.
  • Daha basit ve daha verimli bir rotaya giderseniz ve yalnızca bir Web Çalışanı kullanırsanız, size yanıt vermesini beklemek için çok fazla zaman harcarsınız.
  • Diğer yandan, birden fazla Web Çalışanı kullanıyorsanız, hangisinin meşgul olduğunu, hangilerinin meşgul olduğunu vb. Izlemeniz gerekecek. Bu durumda, yerine evde yetiştirilen bir zamanlayıcı oluşturuyor olacaksınız. tarayıcıya ne pişirdiğini kullanarak.
  • Son olarak, Web Çalışanlar pahalı (görünüşte) ve bir Web çağrısı yapmak için bir HTTP çağrısının bitmesini beklemek için birden fazla Web Çalışanı oluşturmanıza neden olabilirsiniz.

Kendimi konuyla ilgili bir uzman olarak görmüyorum, bu yüzden lütfen bunun değerini düşünün. Güncelleştirme: Çeşitli senaryolar için bazı artıları/eksileri ekleme.

Bazı artıları senkron ve asenkron HTTP arama yapmak arasında seçerken bir Web Worker kullanırken akla gelen/aleyhte: Genellikle

  • , senkron istekleri yazmak daha kolay olacak ve kolay olmasını kod neden olacaktır takip etmek. Eşzamanlı isteklerin bir dezavantajı, ayrı, daha küçük işlevlere oyulması gereken uzun işlevlerin yazılmasını teşvik edebilir.
  • Tek bir arama yapıyorsanız, iki yöntem arasında bitirmek için gereken süre arasında fark yoktur ve senkronizasyon daha iyidir, çünkü daha basittir. Ben sadece biraz daha basit diyorum, çünkü tek bir geri çağırma dinleyicisi ile tek bir asynch çağrısı gerçekten oldukça basit.
  • Belirli bir sırada, kullanıcının profil verilerini yüklemek ve ardından adreslerine göre yerel hava durumunu almak gibi birden fazla çağrı yapıyorsanız, eşzamanlı aramalar daha kolay olacaktır çünkü yazının daha kolay olması ve okumak çok daha kolay.Okumayla ilgili temel şey, çağrılardaki ardışık bağımlılıkların, çağrıların senkronize olarak yapılması ve işlev sırasındaki sırayla açıkça belirtilmesidir. Orada ne kadar fazla arama olursa, bu daha önemli olacak. Birçok çağrı varsa, karmaşıklıktaki farkın büyük olması muhtemeldir.
  • Belirli bir sırada gerçekleşmesi gerekmeyen birden fazla çağrı yapmanız gerekiyorsa, zaman uyumsuz istekleri daha iyidir, çünkü genel işlem büyük olasılıkla eşzamanlı isteklerden daha büyük boyuttaki siparişler olabilir. Yaptığınız daha fazla çağrı ya da daha yavaş bağlantı, toplam geçen süredeki fark daha belirgin olacaktır; Bu fark çok hızlı büyüyecek (üstel olarak mı?). Kodu okuyan birinin bakış açısıyla, bu durumda senkronize istekleri kullanmam gerektiğini düşünüyorum, bu durumda yanıltıcı olurdu çünkü yanıltıcı olmadıkça çağrılara sıralı bir nitelik var. Birbirine bağımlı olmayan bir dizi asenkron istekleri yazma perspektifinden çok kötü olmamalı çünkü sadece bir sayaç ayarlıyorsunuz, tüm çağrıları yapıyorsunuz, geri aramaların her birinde sayaçları artırıyorsunuz ve bitirdiniz Sayaç yaptığınız aramaların sayısına eşit olduğunda.
+0

Güzel. Konuyla ilgili uzman olmadığınızın altını çizdiğinizde, fikriniz çok ilginçtir. – Gecko

+0

Belki tüm detayları açıklamamıştım. Bu görevi arka planda yapmak için benzersiz bir web çalışanı istiyorum. Yani, her tablodan veri almak için bir for döngüsü olan bir web çalışanı, bazı ayrıştırma ve daha fazla şeyler yapmak demek. Bu senkronize çağrılarla iyi çalışır, ancak asenkron çağrıları kullanmak istersem bazı geriçağırım işlevlerini kullanmam gerektiğini düşünüyorum (bu daha mı iyi?). Bu, uygulamasındaki tek web çalışanı değil, aynı zamanda diğer planlanmış görevleri yapmak için en az bir tane daha çalışıyor. Bu durumda web çalışanlarının kullanılmasının haklı olmadığını düşünüyor musunuz? Teşekkürler. Ayrıntılar için – Gecko

+2

Thx. Web İşçileri harika ve kaçınmaları gerektiğini ima etmek istemiyorum. Bunun için bir tane kullanmanın mantıklı geldiğine benziyor. Soru bana, senkron XHR'leri kullanmanın mantıklı olup olmadığıdır. Daha az uyumsuz programlama olacaktır çünkü sadece XHR'leri başlatmak ve kullanmak yerine Web Çalışanı'nı başlatmanız/durdurmanız gerekir. Süreç daha uzun sürecek olana değecek müddetçe kaynar. Yapmak için çok fazla HTTP çağrınız varsa, potansiyel olarak daha uzun. Tek ihtiyacın olmadığı sürece, asynch HTTP isteklerini kullanmanın olumsuz tarafını göremiyorum. – tiffon

İlgili konular