Konwencje nazewnictwa JavaScript

12

Pochodzę z języka Java i jestem nowy w JavaScript. Zauważyłem wiele metod JavaScript wykorzystujących nazwy parametrów jednoznakowych, na przykład w poniższym przykładzie.

doSomething(a,b,c)

Nie podoba mi się to, ale inny programista JavaScript przekonał mnie, że zrobiono to w celu zmniejszenia rozmiaru pliku, zauważając, że pliki JavaScript muszą zostać przesłane do przeglądarki.

Potem rozmawiałem z innym programistą. Pokazał mi, jak Firefox obcina nazwy zmiennych, aby szybciej ładować stronę. Czy to standardowa praktyka dla przeglądarek internetowych?

Jakie są najlepsze praktyki konwersji nazw, których należy przestrzegać podczas programowania w JavaScript? Czy długość identyfikatora ma znaczenie, a jeśli tak, to w jakim zakresie?

ManuPK
źródło
13
Wątpię, czy przeglądarki zmieniają nazwy zmiennych. W obecności evalnie jest to bezpieczne (tak, evaljest okropne, ale jest częścią standardu i nie wyrzucasz standardowej zgodności w celu optymalizacji) i nie pomaga w najmniejszym stopniu w zmniejszeniu ruchu - nadal wyślij pełny plik.
4
Często widziałem programistów, którzy kłócą się o zalety krótkich nazw zmiennych. Nie słuchaj ich. Jest to prawie zawsze wymówka dla „Jestem zbyt kciukiem, aby wymyślić dobre imię” lub „Jestem zbyt leniwy, aby wpisać tyle znaków”.
Doc Brown
@DocBrown: Nawet mi się nie podobało. Ponieważ nie jestem ekspertem w JavaScript chciał znać najlepszą praktykę.
ManuPK
Pod koniec dnia rozmawialiśmy o około 50-100 KB wartości dodatkowych danych w celu użycia znaczących nazw metod? Jeśli 100 KB powoduje problem z szybkością, nie warto próbować go rozwiązać, ponieważ problem ten nie napotyka wystarczająco dużej puli użytkowników.
Ramhound,

Odpowiedzi:

26

Przekonasz się, że sami programiści nie używają krótkich nazw zmiennych. Podczas opracowywania używają znaczących i szczegółowych nazw zmiennych.

Następnie , w trakcie budowy / release, kod oni napisany jest prowadzony przez minifier / obfuscator z zamiarem zminimalizowania rozmiaru pliku, jako najlepszych praktyk w celu przyspieszenia strony internetowej. Jest to opcjonalny krok, jeśli zależy Ci , że dużo o wydajności. Większość małych stron internetowych tego nie robi.

Ty , jako programista, nie powinien dbać o procesie minifikacji / zaciemniania; napisz swój kod, aby był czytelny, znaczący, dobrze udokumentowany i dobrze zorganizowany. Następnie, jeśli tak bardzo zależy Ci na wydajności (opcjonalnie, nie zapomnij!), Wprowadź do procesu wydania minifikator / obfuscator, aby zminimalizować kod (usunąć białe znaki, nowe wiersze, komentarze itp.) I zaciemnić go (np. Skrócić zmienną nazwy). Dobry artykuł, który wyjaśnia zaciemnianie a minimalizowanie, można znaleźć tutaj .

Dodatkowo Desktop FireFox nie obcinać okresu nazw zmiennych . Obcinanie nazw zmiennych ma na celu przyspieszenie pobierania strony. Do czasu, gdy FireFox pobierze plik, został już pobrany, dlatego nie trzeba tego robić. Twój przyjaciel może uruchomić wtyczkę, która to robi; w takim przypadku powiedz mu, aby go odinstalował, ponieważ jest to bezużyteczne.

Na zakończenie niektóre (mobilne) przeglądarki mają opcję korzystania z serwerów pośrednich, które przechwytują odpowiedzi żądanych zasobów i kompresują je za Ciebie (co może obejmować minimalizację plików JavaScript). Zauważ, że kompresja odbywa się na serwerze (tj. Przed pobraniem strony), stąd potencjalna korzyść z pobrania mniejszego pliku, a nie w przeglądarce po pobraniu pliku (jak sugerowano w pytaniu). Do takich przeglądarek mobilnych należą Opera Mini i nowsze wersje Google Chrome (przynajmniej na iOS; nie jestem pewien co do Androida). Aby uzyskać więcej informacji, zobacz tutaj .

Matt
źródło
11

Nie, nie wszystkie przeglądarki automatycznie skracają JavaScript, aby zwiększyć wydajność.

Jednak w przypadku JavaScript nie należy poświęcać czytelności / konserwacji kodu w celu zwiększenia szybkości przetwarzania lub bezpieczeństwa, ponieważ istnieją narzędzia zwane zaciemniaczami i innymi narzędziami zwanymi shinkerami (lub kompresorami), które zostały zaprojektowane do tego celu.

Pamiętaj, nie optymalizuj wstępnie. Jeśli Twoja strona ładuje się wystarczająco szybko i nie masz zbyt wrażliwych treści w swoim JavaScript, nie przejmuj się. Nazwij swoje zmienne znaczącymi nazwami. Czytelność kodu jest bardzo ważna dla łatwości konserwacji i rzadko, jeśli w ogóle, należy ją poświęcić.

Jeśli chcesz odniesienie do kilku dobrych standardy kodowania JavaScript, polecam użyciu nich .

CFL_Jeff
źródło
1

Pracowałem w JavaScript bardzo długo.

Mieliśmy standard nazewnictwa, w którym dla wszystkich zmiennych trzeba było używać notacji węgierskiej .

Wydawało się, że działa OK. Wiem, że istnieją argumenty przeciwko temu, ale działało to dobrze dla nas. Zwłaszcza, gdy masz ogromne pliki JavaScript, w których musisz znaleźć rzeczy.

Przestrzegałbym przed przedwczesną optymalizacją. Najprawdopodobniej skończysz z niechlujnym kodem, który tak naprawdę wcale nie działa znacznie szybciej.

Alan Delimon
źródło
5
Notacja węgierska? To stara szkoła. Notacja węgierska to stara relacja rozwojowa iz czasem nie jest już zalecana.
Smokefoot
2
Zwykle używam go trochę, ale tylko dla wartości, które są otoczone przez jquery, te zacznę od $. Problem z notacji węgierskiej jest to, że ludzie opowiadali wpisaniu w kategoriach „int” vs „String”, a nie w kategoriach sematics o programie
Zachary K
„Zwłaszcza, gdy masz ogromne pliki JavaScript, w których musisz znaleźć rzeczy”. -- Słyszę cię. Ale węgierska notacja jest tylko plastrem ... nie pomoże na dłuższą metę, po prostu pomyli się, kiedy trzeba zmienić rodzaj czegoś, ale nie ma czasu na zmianę wszystkich prefiksów zmiennych. Automatyzacja tego, co GWT wchodzi do własnego IMO.
funkybro
1
Niekoniecznie kupuję, używając notacji jako „przełamującej” luźno wpisane aspekty języka. Jasne, musisz zmienić nazwę, gdy zmieniasz typ, ale i tak byłoby dobrze, abyś mógł śledzić to, co robisz. Wiem, że niektóre aspekty są brzydkie. Ale jeśli kiedykolwiek pracowałeś w projekcie DUŻY (mówię setki tysięcy wierszy kodu) w luźno napisanym języku, może pomóc ci w szybszym znalezieniu drogi w niektórych przypadkach. Mówiąc, że jest przestarzały, itp. Tak naprawdę nie rozwiązuje podstawowego problemu, który OP próbował spowolnić.
Alan Delimon
1
Notacja węgierska jest jedną z tych rzeczy, które ludzie natychmiast odrzucają, nie bardzo rozumiejąc dlaczego. Odkryto, że należy do tej samej kategorii, w gotoktórej ludzie bezmyślnie powtarzają mantrę „nie używaj goto ... nie używaj goto ...” . W rzeczywistości jest to tylko narzędzie w zestawie narzędzi. Jak każde narzędzie ma sytuacje, w których jest użyteczne i sytuacje, w których nie jest tak przydatne (a nawet szkodliwe). To tak, jakby ktoś miał złe doświadczenia z próbą zobaczenia kawałka drewna młotkiem, a następnie ogłosił , że „nigdy nie używaj młotów, piły o wiele lepiej!”. .
Szerokie
1

Długość identyfikatora nie ma znaczenia. Jak powiedzieli inni, w produkcji można zastosować Minification, aby skrócić czas pobierania skryptu. W rzeczywistości należy przestrzegać akceptowalnej konwencji kodowania / nazewnictwa, zwłaszcza że JavaScript jest dziwacznym językiem i przez tak długi czas JavaScript był zaniedbywany jako po prostu zadanie do wykonania. Jeśli szukasz miejsca na konwencję nazewnictwa, dobrym wyborem jest Przewodnik po stylu JavaScript JavaScript . Sugeruje,

  • functionNamesLikeThis, np. getCashbackData () {}
  • variableNamesLikeThis, np. var alertInterval = 10;
  • ClassNamesLikeThis, np. Var CustomerOrder = {getOrderLines: function () {}}
  • EnumNamesLikeThis, np. Var ColorOfChoice = {White: "#FFFFFF"}
  • methodNamesLikeThis, np. var CustomerOrder = {getOrderLine: function () {}}
  • SYMBOLIC_CONSTANTS_LIKE_THIS, np. Var EPOCH_UNIX = "01011970"
theD
źródło
Czy masz coś więcej do dodania niż kilka linków? Mam na myśli, że nawet nie wyjaśniasz, kim jest Douglas Crockford.
Ramhound,
0

Rozwścieczony filozofią „czystego programisty” (a biorąc pod uwagę, że wiesz już z powyższych postów, że ze względu na zmniejszenie rozmiaru nazw zmiennych będzie miało zerowy wpływ na wydajność), mogę jedynie doradzić:

  1. Znajdź najlepsze IDE dla swoich osobistych potrzeb programistycznych, które ma przyzwoite automatyczne uzupełnianie i funkcje inteligentne, takie jak aptana, netbeans, zaćmienie (wszystko za darmo) lub którykolwiek z wielu komercyjnych produktów (jeśli miałbym darmową grę, chciałbym zajrzyj do produktów JetBrains)
  2. Napisz swój kod w taki sposób, że wszelkie komentarze będą zbędne. To znaczy zamiast pisać

    getXy(e) { return [e.pageX, e.pageY ] }

    co może znaczyć naprawdę wszystko (szczególnie w szalonym luźno pisanym języku, takim jak js;) sprawiasz, że kod wyraża się sam

    getPageCoordinatesFromEvent(event) { 
        return [event.pageX, event.pageY ];
    }

    W dobrym IDE zazwyczaj nigdy nie wpisujesz żadnej nazwy zmiennej, która byłaby tak długa dwa razy - kilka sekund wpisujesz kilka liter i po prostu naciskasz enter z autouzupełniania. Jeśli nalegasz na samodzielne wpisanie każdej postaci, dobre IDE i tak zauważy ci literówkę. To tylko bardzo powierzchowny przykład, dlatego zdecydowanie sugeruję (nie jako formę krytyki, ale jako szczerą rekomendację), abyś

  3. Zdobądź książki „Czysty kod” Roberta C. Martina i „Pragmatic Programmer” Hunta / Thomasa i nigdy więcej nie zadawaj sobie takich pytań - będziesz zbyt zajęty pracą na serwerze ciągłej integracji, aby zautomatyzować nudny test - i buduj części procesu programowania (w tym minimalizowanie) i koncentruj się na zabawnej części, pisząc zrozumiały kod, który robi świetne rzeczy!

PS Jeśli chcesz przyzwyczaić się do rozwijania najnowocześniejszego kodu javascript, rzuć okiem na książkę Johna „Mr. jQuery” Resiga o „Pro JavaScript Techniques” zaraz po tym lub razem z powyższym.

Philzen
źródło