To pytanie mnie dręczyło od kiedy przebiegłem samouczek thinkster.io angular + firebase i zobaczyłem moją zakładkę analityki firebase pokazującą szczyt równoczesny z 6, mimo że pamiętam tylko jedną stronę otwartą. Spojrzałem na kod i pomyślałem, że może to wynikać z tego, jak samouczek spowodował utworzenie nowego adresu Firebase (URL) dla każdej lokalizacji w bazie ogniowej.
Chciałem przetestować różnicę między tworzeniem nowej Bazy Firebase (URL) a odniesieniem do katalogu głównego, a następnie uzyskaniem dostępu do lokalizacji .child(). Moja teoria głosiła, że nowy Firebase (url) tworzy nowe połączenie za każdym razem, podczas gdy .child() używałby ponownie istniejącego połączenia.
Konfiguracja
- utworzono dwa nowe firebases każdy z identycznymi danymi
- skonfigurować połączenie angularjs projekt używając jako pisarza
- wliczony angularfire
Kod
Dla uproszczenia, ja po prostu umieścić wszystko w głównym kontrolerze wygenerowanego kodu.
Aby przetestować połączenia utworzone z nowym Firebase() Zrobiłem następujące:
$scope.fb_root = $firebase(new Firebase(FBURL_NEW));
$scope.fb_root_apps = $firebase(new Firebase(FBURL_NEW + '/apps'));
$scope.fb_root_someApp = $firebase(new Firebase(FBURL_NEW + '/apps/someApp'));
$scope.fb_root_users = $firebase(new Firebase(FBURL_NEW + '/users'));
$scope.fb_root_mike = $firebase(new Firebase(FBURL_NEW + '/users/mike'));
Aby przetestować połączenia utworzone z ref $ dziecka() Zrobiłem, co następuje:.
$scope.fb_child = $firebase(new Firebase(FBURL_CHILD));
$scope.fb_child_apps = $scope.fb_child.$child("apps");
$scope.fb_child_someApp = $scope.fb_child_apps.$child("someApp");
$scope.fb_child_users = $scope.fb_child.$child("users");
$scope.fb_child_mike = $scope.fb_child_users.$child("mike");
Następnie oprawiam te obiekty w moim widoku, tak że je widzę, a ja bawiłem się aktualizując dane przez moją bazę firebase i oglądając aktualizację danych na żywo w mojej aplikacji.
Wyniki
Otworzyłam moją lokalną aplikację na 17 kart przeglądarki, mając nadzieję, że duża liczba kart przesadzałbym żadnych różnic pomiędzy metodami przyłączeniowych.
To, co odkryłem, to że każda zakładka otworzyła tylko jedno połączenie z gniazdem internetowym z powrotem do bazy danych dla każdej bazy danych bazy firebase. Tak więc na końcu testu obie metody dały taką samą liczbę szczytową 17 połączeń.
Wnioski
Z tego prostego testu Myślę, że to na pewno powiedzieć, że biblioteka Firebase JS robi dobrą robotę zarządzanie jego połączenia.
Bez względu na to, że twój kod wywoływał kilka razy nową bazę danych Firebase() lub przez odwoływanie się do lokalizacji podrzędnych za pośrednictwem .child(), biblioteka utworzy tylko jedno połączenie, jeśli chodzi o pomiar.To połączenie pozostanie w sieci tak długo, jak aplikacja jest otwarta.
W twoim przykładzie - tak, wierzę, że zobaczysz 6 równoczesnych połączeń, 1 dla aplikacji, w której ktoś wysyła wiadomość, i 5 dla aplikacji otrzymujących wiadomość.
Aktualizacja
Jedną rzeczą warto wspomnieć, że środki Firebase przyłącza do płatnych programów opartych na 95. percentyla wykorzystania w ciągu miesiąca. Jest to wymienione w sekcji Najczęściej zadawanych pytań na stronie z cenami: @https://www.firebase.com/pricing.html
Aktualizacja 11-Mar-16: Baza Firebase nie jest już wyświetlana, aby mierzyć połączenia na podstawie 95%. Zamiast tego odmawia się 101. współbieżnego połączenia.
https://www.firebase.com/pricing.html:
Wszystkie nasze plany mają sztywny limit na liczbę połączeń z bazą danych. Nasze plany Bezpłatne i Spark są ograniczone do 100. Limit nie może być podniesiony . Wszystkie inne plany mają limit grzecznościowy wynoszący 10 000 połączeń bazy danych . Można je usunąć, aby na stałe zezwalać na połączenia Unlimited , jeśli wyślesz do nas e-mail na adres [email protected] Powodem, dla którego narzucamy ten limit, jest zapobieganie nadużyciom i zapewnienie, że jesteśmy przygotowani na obsługę naszych największych klientów. Prosimy o kontakt z nas z co najmniej 24-godzinnym wyprzedzeniem, abyśmy mogli podnieść ten limit i zapewnić , że mamy wystarczającą pojemność dostępną dla twoich potrzeb.
Tak, jeśli w dowolnym momencie jest 6 kart przeglądarki (lub urządzeń) połączonych z bazą Firebase, które będą liczone jako 6 połączeń. Strona ceny zawiera maksymalną liczbę połączeń, które możesz otworzyć jednocześnie w danym momencie. – Anant
Czy nie byłoby 5 stałych połączeń (po jednym dla każdego klienta) i 5 tymczasowych połączeń dla aplikacji internetowej (po jednej dla każdego żądania)? – Trevor