Bardziej wydajna pamięć IndexedDB w Chrome

Nowa optymalizacja w Chrome poprawia sposób przechowywania danych IndexedDB na dysku. Ta funkcja ułatwia zarządzanie dużymi wartościami w systemie pamięci Chrome, w szczególności poprzez wprowadzenie kompresji niektórych plików przechowywanych na dysku. Artykuł zawiera podsumowanie najważniejszych informacji dotyczących tej aktualizacji.

Mechanizm przechowywania danych w Chrome przed wersją 129

Chrome używa LevelDB do przechowywania danych IndexedDB na dysku. LevelDB to szybka biblioteka przechowywania par klucz-wartość, ale ma problemy, gdy poszczególne wartości przekraczają rozmiar strony bazy danych. Aby rozwiązać ten problem, od 2017 roku Chrome przechowuje wartości większe niż jedna strona jako zwykłe pliki na dysku obok pliku bazy danych.

Miejsce na dane od wersji 129

Kompresja dużych wartości

W przeciwieństwie do treści przechowywanych bezpośrednio w bazie danych LevelDB, które są kompresowane przed zapisaniem na dysk i dekompresowane po odczytaniu, duże pliki przechowywane jako zwykłe pliki nie były kompresowane. Dzięki nowemu uaktualnieniu Chrome będzie teraz kompresować te duże pliki za pomocą biblioteki kompresji w czasie rzeczywistym Snappy, co pozwoli zaoszczędzić sporo miejsca. Jest to szczególnie skuteczne w przypadku danych strukturalnych, takich jak duże tablice wartości JavaScript, XML lub JSON. Nie jest to skuteczne w przypadku dużych, ale już skompresowanych plików multimedialnych lub, co jest rzadsze, jeśli strona sama skompresowuje i rozpakowuje pliki.

Wpływ na wydajność pamięci

Jeśli kompresja zmniejszy rozmiar pliku poniżej rozmiaru strony LevelDB, dane zostaną przeniesione z powrotem do LevelDB. Ta zmiana nie tylko oszczędza miejsce, ale też zmniejsza operacje wejścia/wyjścia na dysku, co poprawia ogólną wydajność.

Algorytm kompresji Snappy

Zespół Chrome wybrał Snappy do kompresji, ponieważ optymalizuje on szybkość, a nie maksymalną kompresję. Jest ona wystarczająco szybka, aby nie powodować żadnego zauważalnego spadku wydajności podczas kompresji lub dekompresji.

Poprawa skuteczności

Kompresja i dekompresja są obsługiwane w ramach procesu renderowania, który jest częścią wieloprocesowej architektury Chrome. Zmniejsza to rozmiar wiadomości wysyłanych do procesu przeglądarki, co prowadzi do dalszej poprawy wydajności. Testy syntetyczne wykazały, że ta aktualizacja może przyspieszyć niektóre operacje 2–3 razy dzięki zmniejszeniu liczby komunikatów międzyprocesowych (IPC) i operacji wejścia/wyjścia na dysk. Według pomiarów zespołu Chrome, w praktyce dane strukturyzowane o rozmiarze 1 MB są dostarczane z dysku na stronę w czasie około ćwierć normalnego czasu (z dużą zmiennością w zależności od sprzętu i aktywności systemu).

Wpływ na deweloperów i użytkowników

Zmiany te są całkowicie przejrzyste zarówno dla deweloperów, jak i użytkowników. Użytkownicy mogą jednak zauważyć poprawę wydajności i zmniejszenie wykorzystania miejsca na dane.

  • Oszczędność miejsca: kompresja jest stosowana tylko do nowych danych zapisanych po tej aktualizacji. Oszczędność miejsca można pośrednio zaobserwować, korzystając z interfejsów API, takich jak navigator.storage.estimate(), lub w sekcji Pamięć w Narzędziach deweloperskich w Chrome w panelu Aplikacja.
  • Testowanie funkcji: deweloperzy mogą testować to zachowanie w wersjach przedpremierowych Chrome (starszych niż 129), włączając funkcję za pomocą flagi --enable-features="IndexedDBCompressValuesWithSnappy".

Ta aktualizacja zwiększa wydajność Chrome w zarządzaniu dużymi wartościami IndexedDB, co pozwala zaoszczędzić miejsce i czas bez uszczerbku na wydajności. Jest to znaczna poprawa sposobu przechowywania danych i dostępu do nich w przeglądarce. Dzięki zrozumieniu tych zmian deweloperzy mogą korzystać z naszych ciągłych wysiłków na rzecz optymalizacji wydajności i mechanizmów przechowywania danych w Chrome, co zapewnia użytkownikom płynniejsze i bardziej efektywne działanie.

Podziękowania

Ten dokument został sprawdzony przez Evana Stade i Rachel Andrew.