Optymalizacja FF
W sieci jest cała masa artykułów o przyspieszaniu FF, pomocne hasła to "optymalizacja firefox" i "firefox twikking". Nie ma sensu powtarzać, zresztą wiele z nich zawiera dokladnie te same zestawy optymalizacji (m.in. taka lista czterech ustawień, zależnie od mocy komputera i łącza), jednak na swoje potrzeby spisuję to, co uznałem za ciekawe, z opisem opartym często bezpośrednio na dokumentacji (Mozilla Knowledge Base), a nie forach. Kilka artykułów zasługuje jednak na wymienienie:
- Optymalizacja Firefoksa na techtopia.com
- Optymalizacha Firefoxa w kilka chwil
- Optymalizacja Mozilli Firefox – Cz. 1
- Optymalizacja Mozilli Firefox – Cz. 2 (w tym wspomniane cztery zestawy)
- Optymalizacja Mozilli Firefox – Cz. 3
- Optymalizacja Mozilli Firefox – Cz. 4
Oczywiście swoją optymalizację będę robił pod konkretną maszynę i użytkownika (zastosowanie). Kto inny może chcieć inaczej poustawiać te parametry. Oto moja "specyfikacja":
- system: Ubuntu 9.04 - dość stara wersja, ale LTS (Long Time Support, co zdaniem niektórych sugeruje nieco lepsze dopracowanie przez developerów)
- wersja przeglądarki: 3.6.12
- maszyna: przeciętna (2 x 1.6GHz, 1 GB RAM)
- styl użytkowania: masa kart, czasem materiały do kilku projektów równolegle, nieraz trzy okna każde po kilka...naście kart
- typowe strony: gmail, dokumentacja, archiwa artykułów naukowych, YouTube. Czyli raczej bez wodotrysków, choć czasem cieżkawe
- główne zażalenia: zapchany RAM i lagi (piszę szybciej niż łoś wyświetla), w Operze jakby ich nie było.
Poniższe ustawienia można wprowadzić przez wpisanie w pasku adresu about:config i potwierdzenie, że obiecujemy być rozważni i odpowiedzialni za swoje poczynania, lub dopisanie do odpowiedniego pliku (w części, a może wszystkich przypadkach może być user.js, chyba, że dana zmienna jest w innym pliku już zdefiniowana - to jeszcze musiałbym doczytać) konstrukcji typu user_pref("network.http.pipelining", true);.
Interesujące ustawienia:
- co po awarii (czasem FF się wywali):
- browser.sessionstore.max_tabs_undo - ilość kart przywracanych po padzie FF
- browser.sessionstore.max_windows_undo - ilość okien przywracanych po padzie FF
- ogólne ustawienia zachowania
- browser.tabs.loadDivertedInBackground - przy linkach z atrybutem(?) _new - otwieranych w nowej karcie, mają być wczytywane w tle (true), czy natychmiast przełączane na tą właśnie kartę (false)
- browser.tabs.closeWindowWithLastTab - czy zamknięcie ostatniej karty ma zamykać FF?
- browser.urlbar.maxRichResults - ilość podpowiedzi paska adresu
- dom.popup_maximum - dopuszczalna ilość wyskakujących okienek (jak dla mnie: 0)
- privacy.popups.disable_from_plugins - co robić z okienkami otwieranymi przez Flash itp (czyli via rozszerzenia) - jak dla mnie "blokować jeśli nie są na whitelist" - 2
- dom.popup_allowed_events - wspomniany whitelist
- DNS:
- network.dnsCacheEntries maksymalna liczba wyników zapytań do DNS, jakie będą przechowywane
- network.dnsCacheExpiration przez ile sekund te wyniki mają być przechowywane (niektóre dodałbym na stałe ;-)
- łączenie z serwerami
Ilość równolegle wysyłanych rządań ( Mozilla FAQ), czyli wysyłanie do serwera wielu żądań równolegle (zamiast wysyłania ich po kolei), co jest oczywiście szybsze, przynajmniej dla łącz o wystarczającej przepustowości. O testowaniu szybkości wczytywania stron można poczytać Opis analizy czasu wczytywania - może kiedyś spróbuję dla mojego łącza? network.http.pipeliningwłączyć ('true')network.http.proxy.pipeliningtrue - wersja dla tych, co się łączą przez proxy (wtedy pierwsza z opcji nic nie daje)network.http.pipelining.maxrequestsilość równocześnie wysyłanych rządań -- wg. dokumentacji max. to 8, na niektórych stronach twierdzą, że można i 30 (?). Skoro więcej = lepiej, to dlaczego to nie jest domyślne? ano This is because Firefox wants to adhere to the HTTP specification which says: "A single-user client SHOULD NOT maintain more than 2 connections with any server or proxy." Unfortunately, the specification (from 1999) is outdated at this point.- Ilość utrzymywanych połączeń. Dokumentacja twierdzi, że wysokie wartości na wolnych łączach grożą przeterminowaniem połączenia (timeout), zbyt duża ilość połączeń narusza etykietę i może skutkować zbanowaniem z sewera. Ciekawa dyskusja developerów, na razie zostawiam domyślnie, tj.
user_pref("network.http.max-connections", 30); user_pref("network.http.max-connections-per-server", 15); user_pref("network.http.max-persistent-connections-per-proxy", 8); user_pref("network.http.max-persistent-connections-per-server", 6); - network.dns.disableIPv6 na true, żeby ominąć opóźnienia związane z błędami DNS-ów odpytywanych o adresy IPv6
- Renderowanie stron:
Strona podczas wczytywania może być wielokrotnie wyświetlana w oparciu o już sciągnięte dane. To spowalnia wczytanie całości strony. (źródło). Z tego wynika, że szybki podgląd uzyskam przez krótki czas przerysowania, a szybkie dokończenie - przez małą liczbę powtórzeń. Problem będzie tylko ze stronami zawierającymi dużo obrazków.- content.notify.interval odstęp w mikrosekundach (!) między kolejnymi przerysowaniami strony. Domyślnie 120 000. Ew zwiększę (w większości przypadków jak doczeka do końca ładowania to chyba nie będzie źle). Działa tylko gdy content.notify.ontimer jest 'true', w przeciwnym razie przerysowuje dla każdych nowootrzymanych danych
- content.notify.backoffcount ile razy strona może zostać przerysowana przed wczytaniem całości - po jego przekroczeniu zostanie przerysowana dopiero po ściągnięciu reszty danych. Wartości:
- -1
- bez ograniczeń (Default)
- 0
- Don't do any timer-based reflows.
- całkowita większa niż 0
- tyle właśnie razy
- content.max.tokenizing.time steruje tym ile czasu przeglądarka może nie odpowiadać z powodu renderowania
- nglayout.initialpaint.delay Ile czekać przed pierwszą próbą wyświetlenia strony (w milisekundach). Tu niskie wartości to próba szybkiego wyświetlenia strony - jeszcze nie całkiem zrenderowanej, a więc wydłużenie renderowania całości. dyskusja developerów w tej kwestii. Ja (na razie) daję 250. Zobaczymy później, wygląda na to, że wartość optymalna może zależeć od przepustowości łącza, wydajności kompa, typu stron ;-)
- wartość false każe przerysowywać przy każdych otrzymaych danych, wartość true - słuchać się zmiennej content.notify.interval (czas w mikrosekundach), którą tworzę nadając jej wartość 120.000 (0.12 s) content.switch.threshold liczba mikrosekund nieaktywności użytkownika, po której przeglądarka przełącza się w tryb wolniejszej reakcji, ale szybszego renderowania strony. Domyślnie 1 s. Skuteczność tego zależy od content.interrupt.parsing - jeśli jest false to przerywanie renderowania dla obsłużenia UI jest zablokowane. Ustawiam na false.
- Cache
Sciągnięte strony są zapisywane na dysku w cache, żeby nie musiały być ponownie sciągane przy odświażaniu.- browser.cache.disk.enable włącza ('true'; default) lub wyłącza ('false') zapisywanie na dysku
- network.http.use-cache j.w. dla plików HTTP i HTTPS
- browser.cache.memory.enable decyduje czy składować obrazki, chrome (elementy inteface'u) i strony ssl (bezpieczne) w pamięci, czy nie ('false'). Wyłączenie zmniejsza zużycie pamięci, strony bezpieczne będą ewentualnie składowane na dysku. Daję 'false'.
- browser.cache.disk_cache_ssl składowanie stron ssl na dysku jest raczej niebezpieczne (cache ma raczej łagodne uprawnienia do odczytu), więc lepiej zostawić 'false'. Z drugiej strony na własnym laptopie... i tak przecież zakładam, że działam na nim tylko ja.
- Ilością zużywanej pamięci steruje browser.cache.memory.capacity, ilość aktualnie używanej pamięci można zobaczyć wpisując w pasku adresu
about:cache?device=memory - browser.cache.check_doc_frequency - jak często sprawdzać, czy scache'owana strona się zmieniła: raz na sesję, tj. przy uruchomieniu FF (0), za każdym razem, gdy jest wczytywana -- to po co cache? (1), zawsze z cache (2), sprawdzać gdy przeglądarka uzna, że strona jest zbyt stara (3; default); wymaga włączonego browser.cache.disk.enable lub browser.cache.memory.enable.
- browser.cache.disk.capacity ilość miejsca na dysku na cache (lub 0) w kB.
- inne
- ui.submenuDelay dopieszcza zachowanie menu - czy znika zaraz po wyjściu myszką gdzieś indziej (mała wartość), czy dopiero po kliknięciu gdzie indziej (duża wartość, np. 7000). Nie ruszam tego.
- plugin.expose_full_path przejżawszy to raczej zostawię w spokoju.
- network.protocol-handler.warn-external-default (i to_samo.(protocol)) pozwala ustawić ostrzeżenia przed uruchomieniem aplikacji takich jak klient poczty (gdyby link "kontakt" był typu mailto:, a nie dowiązaniem do formularza kontaktowego).
- config.trim_on_minimize - gdzieś przeczytałem, że działa tylko na Windows, ale zobaczymy.
- Kilka cytatów z techotropia.com:
- browser.sessionhistory.max_total_viewers [-1, 0, liczba dodatnia (-1)] - Określa ile stron ma być zapisanych w pamięci przeglądarki w taki sposób, że nie muszą być ponownie interpretowane. Ustawienie to nie jest związane z pamięcią podręczną cache. Zmniejszenie wartości może zmniejszyć użycie pamięci.
Dostępna wartości:- -1 - Wartość automatycznie dobierana przez przeglądarkę na podstawie pamięci w systemie.
- 0 - Nie zapisuje żadnej strony w pamięci.
- Liczba dodatnia - Określa ilość stron zapsywanych w pamięci.
- network.prefetch-next [true/false (true)] - Określa czy przeglądarka ma wykorzystywać prefetching. Prefetching to mechanizm ściągający w tle strony do których linki znajdują się na wszystkich aktualnie otwartych stronach. Firefox inteligentnie wybiera te strony, które użytkownik najprawdopodobniej odwiedzi i ściąga je, aby później szybciej je otworzyć. Mechanizm ten jest już standardem w przeglądarce, chociaż jego wyłączenie może zmniejszyć zużycie pamięci oraz przyspieszyć np. ściąganie plików przez zewnętrzne programy (p2p, ftp itp.), zwiększy jednak czas oczekiwania na otwarcie nowych stron.
- print.print_ZAKOŃCZENIE [&T, &U, &D, &P, &PT, dowolny ciąg znaków (wartość domyślna zależna od pełnej nazwy zmiennej)] - Określa jakie elementy mają być umieszczone w nagłówku i w stopce drukowanej strony. Ustawienie składa się z kilku niezależnych zmiennych (w nawiasie wartość domyślna):
- print.print_headerleft (&T) - Tekst wyświetlany po lewej stronie nagłówka
- print.print_headercenter (brak wartości domyślnej)- Tekst wyświetlany na środku nagłówka.
- print.print_headerright (&U) - Tekst wyświetlany po prawej stronie nagłówka.
- print.print_footerleft (&PT) - Tekst wyświetlany po lewej stronie stopki.
- print.print_footercenter (brak wartości domyślnej) - Tekst wyświetlany na środku stopki.
- print.print_footerright (&D) - Tekst wyświetlany po prawej stronie stopki.
- &T - Nazwa dokumentu.
- &U - Adres strony.
- &D - Data i czas drukowania.
- &P - Numer strony.
- &PT - Całkowita ilość drukowanych stron.
- Dowolny ciąg znaków - Dowolny ciąg znaków ;) .
- browser.sessionhistory.max_total_viewers [-1, 0, liczba dodatnia (-1)] - Określa ile stron ma być zapisanych w pamięci przeglądarki w taki sposób, że nie muszą być ponownie interpretowane. Ustawienie to nie jest związane z pamięcią podręczną cache. Zmniejszenie wartości może zmniejszyć użycie pamięci.
- image.animation_mode [none, once, normal (normal)] - Określa sposób wyświetlania animowanych plików GIF. Dostępne wartości:
- None
- Obrazki nie będą animowane.
- Once
- Animacja będzie wyświetlana jeden raz.
- Normal
- Animacja będzie zapętlona.
Pewnie w miarę doświadczeń będę poprawiał wartości tu wymienione.
Przy okazji znalazłem też informacje (ze strony techtopia.com) o kilku wartych rozważenia dodatkach (choć mówią by nie mieć ich więcej niż 5 - ze wzgledu na wydajność):
- ServerSpy
- Wyświetla nazwę i wersję serwera http używanego przez serwer aktualnie odwiedzanej strony.
- TrackMeNot
- Dosyć kontrowersyjny plugin generujący w ustalonych przez użytkownika odstępach czasu losowe zapytania do wskazanych wyszukiwarek internetowych. W zamierzeniu plugin ma chronić przed zbieraniem informacji o wyszukiwanych przez użytkownika frazach przez generowanie “szumu” pochdzącego z naszego adresu IP. W dobie kontrowersyjnej polityki prywatności Googla może się komuś przydać.
Pluginy, których raczej nie warto instalować ( techtopia.com):
- FasterFox
- z kolei istotnie przyspiesza wyświetlanie stron wykorzystując prefetching (inteligentne ściąganie na dysk stron, do których aktualnie wyświetlana strona posiada linki), zwiększa jednak przez to użycie pamięci. Rezultat jest taki, że zyskujemy 2-3 sekundy, ale tracimy pamięć. Ponadto, Firefox i tak ma wbudowaną i domyślnie włączoną funkcję prefetchingu.
Opera vs gCalendar
Mam Operę 10.62 postawioną na Ubuntu. Z Gmailem się słabo toto dogaduje, ale idzie wytrzymać. Z gCalendar nie dogaduje się całkiem. tu znalazłem pewne obejścia problemu:
- Skrypt browser.js dostarcza, zgodnie z opisem na strone Opery, łat dla różnych stron "nie trzymających standardów", a więc nie obsługiwanych. Można go włączyć przez opcję Browse JavaScript ustawiając wartość:
- 2 - w głównym widoku zawartość wyjeżdża za prawą krawędź okna przeglądarki, ale widok edycji zdarzenia wygląda dobrze
- 0,1 - widok główny wygląda dobrze, ale widok edycji zdarzenia całkiem się rozsypuje
- Ctrl+F11 - nie doczytałem co robi, ale pomaga na obie usterki
Niestety problemu wyjeżdżania za prawą krawędź zawartości widoku skrzynki odbiorczej w Gmail to nie rozwiązuje :-( W tym przypadku Ctrl+F11 psuje całkiem
