logosfp


Optymalizacja FF

04 grudnia 2010, 17:46:21 | Kategorie: Firefox | internet | Ogólne | Techblog |

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:

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:
  • 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.
      Dostępne wartości:
      • &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 ;) .
  • 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

02 grudnia 2010, 21:23:08 | Kategorie: Ogólne | Opera | Techblog |

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:

  1. 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
  2. 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

Wcześniejsze wpisy