Dodam do tego aktualizację, ponieważ myślę, że pojawienie się JS w sieci po stronie klienta zostało źle zrozumiane w kilku kluczowych punktach na przestrzeni lat.
To nie był Ajax
Nie twierdzę, że Ajax nie był ważny dla ewolucji rozumienia JS jako języka, ale walka o dominację przeglądarki po stronie klienta zakończyła się na długo przed stworzeniem terminu Ajax.
Nie dlatego, że była to jedyna gra w mieście
Były aplety Java, Flash i VBScript. Słyszałem, że w latach 90. były jeszcze inne opcje skryptów (ale wymagały wtyczek IIRC). Java jest bardzo popularna, ale aplety były fatalną awarią. Były brzydkie i często ser szwajcarski, ale co ważniejsze, nie sądzę, aby Java była odpowiednia z powodów, które omówię później. Flash był bardzo popularny i miał silną pozycję przez wiele lat, ale nawet gdy Flash w końcu miał opcje SEO, nie były one zwykle używane, co bardzo utrudnia wykrycie wyłącznie stron Flash. Nawet teraz większość z nas regularnie aktualizuje Flash, abyśmy mogli oglądać filmy, ale to prawdziwa pięta achillesowa. Zastrzeżona technologia w przeglądarkach. I oczywiście VB, który kiedykolwiek działałby tylko z IE, więc nie.
Właściwe miejsce we właściwym czasie jest istotne, ale nie cała odpowiedź
Tak, bez fali internetowej nigdy nie zobaczylibyśmy JavaScript ani popularnego języka takiego jak on. A może mielibyśmy ...
Skończyło się to idealnym narzędziem dla domeny problemowej
Powiedziałbym, że około 2000 roku mieliśmy następujące problemy:
- IE i Netscape właśnie zgodziły się zacząć grać ładnie, przestrzegając tych samych standardów DOM API i CSS, i od tego czasu musieliśmy radzić sobie z mnóstwem starszych problemów z JS w różnych przeglądarkach, które dopiero zaczynają być możliwe do zarządzania bez pomocy narzędzi normalizacyjnych JS DOM, takich jak jQuery post IE8
- Pojawiła się zupełnie nowa generacja programistów / projektantów stron internetowych, którzy niekoniecznie byli ciężkimi programistami, ponieważ programiści chcieli poprawić swoją grę po wybuchu bańki po .com, kiedy przestali wręczać ci przyzwoitą pensję za pojawienie się przy drzwiach bez niczego więcej niż podstawowa znajomość HTML i niektóre umiejętności Photoshopa.
- W mieście pojawił się nowy dzieciak CSS, który zaoferował intrygujące możliwości tego, co ostatecznie nazwano by DHTML, (bardziej odpowiednio) DOM Scripting, (teraz niewłaściwie) HTML5 (zomghtml5!).
Potrzebowaliśmy więc języka, który byłby zarówno głęboki, oferując możliwość faktycznej strukturyzacji i tworzenia bardziej zaawansowanej aplikacji z przenośnymi / wielokrotnego użytku komponentami po stronie klienta, ale także dostępną dla osób, które niewiele wiedziały i tylko potrzebowały rzeczy pojawiać się / pojawiać ponownie po kliknięciu przycisku.
Co więcej, stwardnienie rozsiane, będące bestią nieudolną / niekompetentną i / lub dominującą poprzez antykonkurencyjną praktykę, którą czasami są, nie udało się naprawdę dotknąć ich niezgodnej implementacji DOM API przez dobrą dekadę, chociaż udało im się dodaj sporadyczne rzeczy, takie jak oryginalny obiekt XHR i querySelectors w IE8.
Ważną rzeczą do zapamiętania jest to, że do około 2005 roku udało nam się tak całkowicie zakopać złożoność związaną z obsługą problemów w różnych przeglądarkach, że nie był to tak naprawdę poważny problem z przodu JavaScript. Brak właściwego wsparcia CSS2 tak długo, jak długo powodował znacznie większy ból. Aby zapoznać się z samą ilością i głębią problemów, polecam sprawdzenie quirksmode.org . Nie sądzę, że jest to wyczyn, który mógłby zostać osiągnięty tak płynnie iw tylu bibliotekach w Javie, z pewnością nie w VB i zdecydowanie nie przy żadnej strategii wtyczek, której celem jest ominięcie całego problemu, stając się całkowicie nowym rodzaj uciążliwości.
Inne funkcje językowe, które mają duży sens dla interfejsu użytkownika:
Funkcje pierwszej klasy: Z mojego doświadczenia wynika, że nic nie nadaje się lepiej do asynchronizacji przetwarzania i paradygmatów sterowanych zdarzeniami niż język, który czyni swoje funkcje pierwszorzędnymi. Oba problemy są regularnie rozwiązywane w pracy nad interfejsem użytkownika.
Typy dynamiczne: Rzutowanie i sprawdzanie typów to bardzo rzadka potrzeba w JavaScript, która pomogła zachować zwięzłość i oszczędność kodu. Obawy związane z interfejsem użytkownika mogą bardzo szybko się skomplikować i zrobić bałagan. Utrzymywanie kodu w ścisłej tajemnicy i absolutna jasność co do przepływu danych ma kluczowe znaczenie dla zrozumienia i modyfikacji / utrzymania go.
To nie jest protekcjonistyczny: od wielu lat ktoś głosi, że musisz chronić się przed własnymi błędami i głupimi rzeczami, które inny facet mógłby zrobić z twoim kodem, czyniąc konstrukcje kodu bardzo sztywnymi i nieelastycznymi i niemożliwymi do wtrącenia się w pierwotny cel. autorstwa i wiele osób słuchało. Nie powiem, że zawsze się mylą (może tak sądzić), ale powiem, że to niewłaściwe podejście do interfejsu internetowego i uważam, że jest to zjawisko, które rozwiązywaliśmy, utrzymywaliśmy i modyfikowaliśmy boczne GUI w znacznie szybszym tempie iz większą łatwością niż zwykle taka praca była zwykle wykonywana w bardziej restrykcyjnych językach w przeszłości. Możliwość szybkiej i łatwej zmiany rzeczy w locie znacznie ułatwia tworzenie schematów architektury dynamicznej / płynnej, które nie wymagają monumentalnych ilości pośrednich i abstrakcyjnych kosztów ogólnych, co ostatecznie ułatwia zobaczenie, co się dzieje w Twoim kodzie i wyprzedzaj wyjątki lub zajmuj się nimi znacznie czystiej. Łatwiej jest utrzymać go po prostu dzięki czystej cnocie umożliwiającej bycie bardziej bezpośrednim we wszystkim, co robisz i przy znacznie mniejszym kodzie, niż byłoby to możliwe przy innej filozofii.
W jaki sposób JS stał się popularny? Okazało się, że jest doskonałym narzędziem do pracy raz za razem. To nie jest język, w którym „utknęliśmy”. To język, który mógł zainspirować wiele zmian w popularnych językach. I za to możesz podziękować Brendanowi Eichowi i wszystkim współczesnym, którzy pomogli mu włożyć ten pomysł do głowy, za to, że podoba mu się Scheme jako inspiracja projektowa bardziej odpowiednia dla danego problemu niż Jawa.