Miałem stronę internetową, która została zakodowana w całości w php i podstawowej ajax jquery. Jednak po dowiedziałem się o node.js/socket.io i recoded prawie wszystkie rzeczy w czasie rzeczywistym, które dotyczyły ajax przy użyciu nodejs i socket.io. Jestem nieco zdezorientowany, czy zrobiłem właściwą rzecz. Więc moje pytanie brzmi, kiedy ajax jest bardziej optymalnym rozwiązaniem niż przy użyciu węzła/gniazda?Kiedy używać node.js i kiedy używać ajax?
Odpowiedz
Po pierwsze, powinieneś poznać różnicę między tymi dwoma, odpowiedź stanie się jasna.
AJAX są używane do prostych żądań asynchronicznych. Nie wymagają konfigurowania serwera węzłów i są obsługiwane w prawie każdej przeglądarce. Są używane, gdy trzeba pobrać informacje z serwera. Mają one jednak na celu wysyłanie za pośrednictwem protokołu HTTP i dlatego muszą być poprawnym żądaniem/odpowiedzią HTTP (dodaje wagę).
WebSockets (dostępne w konfiguracji Node.js/socket.io) są używane, gdy często uzyskujesz dostęp do niektórych danych lub musisz mieć stałe, trwałe połączenie z serwerem. Możesz ustanowić połączenie przez gniazdo i wysyłać pakiety z serwera do klienta. Jest to lekki w porównaniu do rozwiązania AJAX, jednak Websockets nie są obsługiwane przez starsze przeglądarki i musisz skonfigurować serwer, który będzie obsługiwał takie żądania.
Socket.IO w szczególności wykorzystuje zbiór różnych technik, dzięki czemu można uzyskać lepszą obsługę przeglądarki: długie pollingowanie, wieloczęściowe przesyłanie strumieniowe itp. Umożliwia to otrzymywanie "natychmiastowej" informacji zwrotnej z serwera, jednak wciąż jest dostępna. w większości przypadków protokół wykorzystuje protokół HTTP. Będzie jednak korzystać z WebSockets, jeśli są one dostępne (tj. Obsługiwane przez przeglądarkę).
W niektórych przypadkach Node.js/Socket.io używa AJAX.
Jeśli nie pracujesz nad grą online lub jeśli nie musisz często aktualizować stanu aplikacji, sugeruję użycie AJAX zamiast instalacji Node.js/socket.io.
+1 Dobry Wyjaśnienie. Mam nadzieję, że można go rozszerzyć nieco bardziej – samayo
, ale z każdym połączeniem moja aplikacja robi z serwerem apache przypisuje poszczególne wątki do każdego z nich, pochłaniając w ten sposób mnóstwo zasobów, a obecnie skonfigurowałem zarówno apache/nodejs. Chodzi mi o to, że jeśli używam ajaxa, aby aktualizować moje kanały informacyjne co 20 sekund lub wyświetlać wyskakujące okienka, czy nie zajmie to dużo zasobów? – AnuragD
To, co opisałeś w drugim akapicie, to WebSockets, a nie SocketIO.SocketIO zapewnia * gniazdo internetowe *, takie jak wsparcie, korzystając z dowolnego transportu obsługiwanego przez aktualną przeglądarkę; czy to websockets, iframe, długie polling czy nawet flash. – Matt
Nodejs doskonale nadaje się do zastosowań, w których konieczne jest utrzymywanie stałego połączenia między klientem a serwerem. Zasadniczo, jeśli chcesz przesłać dane w czasie rzeczywistym (klient czatu, gra itp.) Między klientem a serwerem, to świetna opcja.
Dzięki nodejs ten rodzaj trwałego połączenia nie blokuje innych żądań. Wiele innych języków, takich jak php (gdzie każde połączenie uruchamia nowy proces serwera) zmaga się w takich sytuacjach i prawdopodobnie skończy się ogromnym obciążeniem procesora.
Socket.io i node.js razem to jeszcze lepsza opcja, jeśli celem są dane w czasie rzeczywistym o najniższym możliwym opóźnieniu. Spowoduje to powrót do długiego sondowania, gdy inne technologie nie będą obsługiwane, a jego preferowane jest używanie gniazd internetowych.
Oczywiście zarówno apache (z php), jak i nodejs mogą wykonywać AJAX, powinno być naprawdę pytanie, czy to właściwy sposób przesyłania danych, musimy wiedzieć więcej o tym, co próbujesz osiągnąć!
- 1. kiedy używać zadania i kiedy używać wątku?
- 2. Kiedy używać viewDidLoad i kiedy używać awakeFromNib
- 3. Kiedy używać Formatera wartości i kiedy używać Resolvera wartości
- 4. PHP: Kiedy używać funkcji i kiedy używać metod statycznych?
- 5. Kiedy używać undef_method i kiedy używać metody remove_method?
- 6. Kiedy używać komponentów Seaside i kiedy używać prostych obiektów renderowania?
- 7. Kiedy używać tablicy bajtów i kiedy używać strumienia?
- 8. Kiedy używać LEFT JOIN i kiedy używać INNER JOIN?
- 9. Konwencja dotycząca celu C: kiedy używać i kiedy używać z
- 10. Kiedy należy używać JCR i kiedy należy używać JPA/RDBMS?
- 11. Kiedy używać Class.isInstance() i kiedy używać operatora instanceof?
- 12. Kiedy używać Requirejs i kiedy używać dołączonego javascript?
- 13. Kiedy używać JMS i kiedy używać usługi REST?
- 14. Kiedy używać klienta boto3 i kiedy używać zasobu Boto3?
- 15. Kiedy używać czystej rekursji i kiedy używać pętli/recur?
- 16. Kiedy używać dup i kiedy używać klonu w Ruby?
- 17. Kiedy używać GWT i kiedy nie
- 18. Kiedy należy używać setUpClass i kiedy __init__?
- 19. Kiedy należy używać express.js na samodzielny node.js
- 20. Kiedy można używać jQuery?
- 21. Kiedy używać Soapobject i SoapPrimitive
- 22. Kiedy używać NoSql i który?
- 23. Kiedy używać @Embedded i @Embeddable?
- 24. Dlaczego i kiedy używać __noop?
- 25. Dlaczego i kiedy używać TreeMap
- 26. Kiedy używać algorytmów genetycznych a kiedy używać sieci neuronowych?
- 27. Kiedy używać Guava sameThreadExecutor
- 28. Kiedy używać Akka Microkernel?
- 29. Kiedy używać projekcji Hibernacja?
- 30. Kiedy używać NSEnumerationConcurrent
To tak, jakby zapytać, czy bardziej optymalne jest zastosowanie dywanu do zabiegu chirurgicznego lub szczoteczki do zębów do siatkówki. Musisz poprawnie sformułować swoją terminologię. –