Optymalizacja kodu w świecie, który nie chce optymalizować

Opublikowany: 2019-11-22

Przedwcześnie optymalizacja jest źródłem wszelkiego zła.

To popularne powiedzenie wśród programistów. To ma sens. Przedwczesna optymalizacja może oznaczać ponowną pracę w dół, a czas jest najbardziej ograniczonym zasobem programisty. Może to oznaczać spędzanie cennego czasu na optymalizacji scenariuszy, które jeszcze nie istnieją dla użytkowników produktu. Może to oznaczać pisanie kodu, który jest trudniejszy do zrozumienia z niejasnymi przyrostami wydajności.

Uczestnicząc w zespole zajmującym się przeglądem motywów WordPress około rok temu, po raz kolejny natknąłem się na tę poradę. Przedwcześnie optymalizacja jest źródłem wszelkiego zła. Odpowiedź była skierowana do autora motywu, który chciał zmniejszyć liczbę i wagę skryptów, które musiał załadować ich motyw. Z jednej strony autor motywu mógł załadować skrypt o wielkości 1,29 kb bez żadnych zależności, aby wykonać zadanie. Inną opcją było użycie skryptu zależnego od jQuery zawartego w rdzeniu WordPressa dla łącznie 105 kb, ponieważ „większość” witryn WordPress i tak ładuje jQuery.

Dla mnie odpowiedź była prosta. Użyj mniejszego skryptu, chyba że główny skrypt został już załadowany na interfejsie. Nie myślałem o tym w kategoriach przedwczesnej optymalizacji . Myślałem o tym jako o zwykłej, starej, zwyczajnej, codziennej optymalizacji.

Deweloperzy nie powinni mylić przedwczesnej optymalizacji z koncepcją podejmowania inteligentnych decyzji projektowych na wczesnym etapie procesu. Nie powinni też czekać do ostatniego etapu rozwoju, aby rozpocząć optymalizację, kiedy skupiamy się na dostarczeniu produktu użytkownikom końcowym. To oznaka złego procesu projektowania produktu.

Przez ostatni rok ta rozmowa utkwiła mi w pamięci. Pomogło mi to lepiej poznać przerażający trend, nie tylko w społeczności programistów WordPressa, ale ogólnie w tworzeniu stron internetowych. Zbyt często programiści są tak oddaleni od zwykłych użytkowników, a technologia, na której ci użytkownicy polegają podczas tej optymalizacji, jest niewiele więcej niż refleksją. Zamiast tego powinien zawsze znajdować się na czele myśli każdego programisty.

Nadmierne poleganie na tym niewłaściwie wykorzystanym cytacie pomogło popchnąć trend mierzenia wagi strony w megabajtach zamiast w kilobajtach. Jest zbyt często używany jako usprawiedliwienie dla braku optymalizacji w fazie rozwoju, a nadrabia to kompresją plików i buforowaniem w produkcji.

Częścią pisania kodu wysokiej jakości jest optymalizacja tego kodu na każdym etapie procesu rozwoju. Chodzi o podejmowanie trudnych decyzji, aby usunąć niepotrzebne rzeczy, gdy oprogramowanie się łączy. Buforowanie powinno być ostatecznością po wyczyszczeniu wszystkiego innego.

Przedwczesna optymalizacja polega bardziej na próbie optymalizacji, gdy nie ma wyraźnych korzyści, lub pracy nad mikrooptymalizacją, która zmienia projekt oprogramowania z niewielkimi lub zerowymi korzyściami. Nie oznacza to przeoczenia oczywistych wzrostów wydajności podczas opracowywania.

Nie wszyscy są w gigabitowym Internecie

Większość znanych mi programistów korzysta z superszybkich połączeń internetowych, często z prędkością pobierania 1 Gb/s i nieograniczoną ilością danych. W takiej sytuacji łatwo zapomnieć, że duże części świata nadal korzystają z wolnych połączeń z limitami danych.

Niektórzy mogą nawet kojarzyć powolne połączenia z krajami trzeciego świata, w których miliony ludzi korzystają z technologii telefonii komórkowej 2G. Istnieją jednak duże obszary Stanów Zjednoczonych i innych krajów rozwiniętych, w których nie ma bezpośrednich linii kablowych ani linii DSL, które są powszechnie dostępne w miastach i na przedmieściach.

To rozłączenie jest bezpośrednio widoczne, gdy inni programiści rozpoczęli ze mną czaty. W ciągu ostatnich kilku lat coraz częściej proszą o czat wideo. Nie jest nawet kwestionowane, czy coś takiego jest możliwe (wideoczaty są dla mnie w najlepszym razie niewiarygodne). Możliwość prowadzenia wideoczatu w dowolnym momencie jest oczywista.

W okolicy, w której mieszkam, dostępne są dwie opcje usług internetowych: satelita lub dial-up. Nawet lokalna firma telefoniczna odmawia oferowania DSL w tym obszarze z powodu kosztów infrastruktury z liniami telefonicznymi sprzed kilkudziesięciu lat. Ze względu na wygórowane koszty satelitarnego dostępu do Internetu, który zwykle wiąże się z limitami danych, wielu z nich utknęło na dial-up. Firmy telefonii komórkowej do pewnego stopnia zmieniają grę, zakładając, że usługa jest niezawodna, ale pójście tą drogą wiąże się z pewnymi upadkami, które mogą obejmować ograniczenia danych lub hotspotów.

Jak na tak zaawansowany technologicznie kraj, wielu jego mieszkańców ledwo nadąża za tym, co inni byli dziesięć lat temu.

Chociaż mam szczęście wybrać miejsce zamieszkania i nic nie powstrzymuje mnie przed przeprowadzką, większość nie ma takiej możliwości. Utknęli w najlepszym, na jaki mogą sobie pozwolić. Nawet na obszarach wiejskich internet jest nieodłączną częścią codziennego życia, a programiści nie ułatwiają tym ludziom.

Chociaż jest to anegdota, jest to surowa rzeczywistość życia na wsi w kieszeniach Stanów Zjednoczonych.

Plusem mieszkania na ostępach Alabamy jest to, że zmieniło to moją perspektywę jako dewelopera. Oznaczało to, że musiałem kwestionować każdą decyzję dotyczącą kodu dla każdej zbudowanej wtyczki i motywu. Mając limity danych, musiałem się upewnić, że nie używam zbyt wielu zasobów.

Przede wszystkim ograniczenie danych zmieniło sposób korzystania z Internetu. Teraz prowadzę program do blokowania reklam. Mam rozszerzenie do zabijania filmów przed automatycznym ładowaniem. Wyłączam JavaScript w ciężkich witrynach, z których muszę korzystać. Niektóre strony wydają się interesujące, ale nigdy do nich nie wracam, ponieważ są to świnie zasobów.

Kiedy mieszkasz w miejscu, w którym każdy bajt ma znaczenie, unikasz ich marnowania.

Chociaż nie zawsze się to udaje, od czasu mojego przejścia do życia w małym miasteczku próbowałem tworzyć aplikacje w sposób, który służyłby ludziom, którzy nie są wystarczająco uprzywilejowani, aby mieć niesamowicie szybki dostęp do Internetu.

Zwrócenie uwagi na to ma na celu upewnienie się, że programiści są świadomi, że optymalizacja ma znaczenie. Ma znaczenie na każdym etapie procesu rozwoju. Ma to znaczenie, ponieważ osoby z wolnymi połączeniami i limitami danych muszą również kupować produkty, korzystać z usług, czytać treści i robić wszystkie inne rzeczy, które ludzie robią w sieci.

Jeśli jesteś programistą, który myśli o dodaniu tego suwaka, mechanizmu przesuwania dla telefonu komórkowego lub innego zgrabnego gadżetu, pomyśl o tych, którzy muszą poczekać na załadowanie tej funkcji. Sprawdź, czy jego zależności nie ładują zbyt wielu dodatkowych zasobów. Zrób rozeznanie, aby sprawdzić, czy możesz znaleźć lżejszą implementację. Ale najpierw zadaj sobie pytanie, czy jest to konieczne.

Motywy i wtyczki tworzone przez programistów WordPress nigdy nie powinny być wąskim gardłem dla witryny. Możemy zrobić lepiej.