Kontekst: Tworzę małą witrynę, która czyta kanał RSS i aktualizuje / sprawdza kanał w tle. Mam jedną tablicę do przechowywania danych do wyświetlenia i drugą, która przechowuje identyfikatory rekordów, które zostały pokazane.
Pytanie: Ile elementów może przechowywać tablica w Javascript, zanim wszystko zacznie się spowalniać lub powolnie. Nie sortuję tablicy, ale do porównania używam funkcji inArray jQuery.
Strona internetowa pozostanie uruchomiona, będzie aktualizowana i jest mało prawdopodobne, że przeglądarka będzie tak często restartowana / odświeżana.
Jeśli powinienem pomyśleć o wyczyszczeniu niektórych rekordów z tablicy, jaki jest najlepszy sposób na usunięcie niektórych rekordów po limicie, na przykład 100 pozycji.
javascript
arrays
dodane cudownie
źródło
źródło
Odpowiedzi:
Maksymalna długość do momentu, w którym „robi się wolno” jest całkowicie zależna od maszyny docelowej i rzeczywistego kodu, więc musisz przetestować na tej (tych) platformach, aby zobaczyć, co jest akceptowalne.
Jednakże, maksymalna długość tablicy według specyfikacji ECMA-262 Wydanie 5. jest związana unsigned 32-bitowej liczby całkowitej ze względu na ToUint32 streszczenie pracy tak najdłuższy tablica może mieć 2 32 -1 = 4294967295 = 4.29 miliarda elementy .
źródło
Nie ma potrzeby przycinania tablicy, wystarczy zaadresować ją jako bufor cykliczny (indeks% maxlen). Zapewni to, że nigdy nie przekroczy limitu (implementacja bufora cyklicznego oznacza, że gdy dojdziesz do końca, zawiniesz ponownie do początku - nie jest możliwe przekroczenie końca tablicy).
Na przykład:
źródło
Możesz spróbować czegoś takiego, aby przetestować i przyciąć długość:
http://jsfiddle.net/orolo/wJDXL/
źródło
Jak powiedział @maerics, Twoja maszyna docelowa i przeglądarka będą określać wydajność.
Ale dla niektórych rzeczywistych liczb na moim firmowym Chromebooku z 2017 r. Wykonuję operację:
x=5e4
trwa 16 ms, wystarczy na 60 klatek na sekundęx=4e6
trwa 250 ms, co jest zauważalne, ale nie jest to wielka sprawax=3e7
trwa 1300 ms, co jest dość złex=4e7
trwa 11000 ms i przydziela dodatkowe 2,5 GB pamięciTak więc około 30 milionów elementów to sztywny górny limit, ponieważ maszyna wirtualna javascript spada z klifu przy 40 milionach elementów i prawdopodobnie spowoduje zawieszenie procesu.
źródło
Zbudowałem platformę wydajnościową, która manipuluje i tworzy wykresy milionów zestawów danych, a nawet wtedy opóźnienie obliczeń javascript było rzędu dziesiątek milisekund. Jeśli nie martwisz się przekroczeniem limitu rozmiaru tablicy, nie sądzę, że masz się o co martwić.
źródło
Będzie to bardzo zależne od przeglądarki. 100 pozycji nie brzmi jak duża liczba - spodziewam się, że możesz iść dużo wyżej. Tysiące nie powinny stanowić problemu. Problemem może być całkowite zużycie pamięci.
źródło
Bezwstydnie pobrałem do pamięci kilka całkiem dużych zbiorów danych i chociaż zrobiło się to wolno, zajęło to może 15 Mo danych w górę z dość intensywnymi obliczeniami na zestawie danych. Wątpię, czy napotkasz problemy z pamięcią, chyba że masz intensywne obliczenia na danych i wiele, wiele wierszy. Profilowanie i testy porównawcze z różnymi próbnymi zestawami wyników będą najlepszym sposobem oceny wydajności.
źródło