Gatsby JS стои на раменете на хиляди

Преди много години основателят на Linux Линус Торвалдс заимства фразата на сър Исак Нютон „застава на раменете на гиганти“, когато обсъжда работата си с отворен код с Linux. Макар че това е хубаво настроение - „Хей, успях да свърша страхотна работа само заради страхотната работа на няколко други“ - което може да е било приложимо за Linux през 1991 г., то не върши добра работа при описването на отворен код през 2020 г. Когато някой пусне днес отворен код, в края на краищата те черпят от много повече от малък набор от гениални разработчици.

Не, както показва последната версия на Gatsby.js, съвременните проекти с отворен код зависят от хиляди други проекти. Или, както каза в интервю основателят на Гетсби Кайл Матюс, „Ние стоим на раменете на хиляди [обикновени] хора.“

1000 пъти по-бързи компилации? Да моля!

В началото (на мрежата) беше генераторът на статични сайтове. С течение на времето, както Матюс описа в публикацията си, организациите се насочиха към уебсайтове, управлявани от бази данни, за да поддържат все по-динамични функции. С нарастването на уебсайтовете, статичното генериране на сайтове доведе до бавни скорости на изграждане, дори когато инструментите, базирани на бази данни, като WordPress, нараснаха в полза на хората от маркетинга, които не искаха да се притесняват от кодирането в Markdown. Предварителното изобразяване помогна на генераторите на сайтове, но недостатъчно, за да ги направи предпочитан вариант за големи сайтове.

Но това беше тогава; това е сега.

По-рано през 2020 г. Gatsby представи Gatsby Builds, които направиха пъти на изграждане 60 пъти по-бързи от стандартните решения за непрекъснато внедряване чрез интелигентна комбинация от разпределени изчисления и сложни функции за кеширане. Хубаво. Но с неотдавнашното издание на Incremental Builds, Gatsby получава компилации под 10 секунди за редактиране на данни, което може да представлява 1000 пъти подобрение спрямо съществуващите решения за компилация.

Как „Най-голямото нещо, което сме направили“, каза Матюс в интервю, „е създадена система за проследяване на зависимости, която ни позволява евтино да разберем какво се нуждае от актуализиране между компилациите.“ Ако това звучи като подход, използван от инструменти за изграждане като Bazel или инструменти за обработка на данни като Apache Spark и Apache Flink, това е така. „Gatsby третира събитията за промяна на уебсайтове от данни / код като други поточни процесори - ние разбираме какво се е променило и евтино го актуализираме.“ Традиционните статични генератори на сайтове отдавна имат подход за групова обработка на данни, но новият подход на Gatsby е обработка на потоци в реално време.

Това е голяма работа, което прави подхода Gatsby използваем от всеки уебсайт, вместо от малка част от мрежата. Това също зависи от невероятна технология с отворен код като GraphQL, която позволява на Gatsby да проследява зависимостите между страниците и източниците на данни, така че когато някои части от данни се променят, те могат да изчислят кои страници трябва да се актуализират.

Затова попитах Матюс колко зависи Гетсби от друг отворен код ...

Застанал на раменете на React, GraphQL, Webpack, Babel ...

"Ние силно зависим от много страхотни проекти", каза Матюс. И след това продължи:

Фразата може да бъде актуализирана може би, че вместо да стоим на раменете на гиганти, ние стоим на раменете на хиляди хора. Което е едно от страхотните неща за отворения код - не е само за гении! Обикновените хора могат да създават и / или да подпомагат поддържането на пакети с размер на хапка, които все още решават критични нужди.

Някои от тези „обикновени хора“ са изградили необикновен код, от който зависи Гетсби. Като се има предвид, че Gatsby е базиран на React, React очевидно веднага идва на ум. Но има и още. Много повече. Gatsby също разчита на Webpack и Babel, за да извърши тежката работа около обработката и подготовката на JavaScript, CSS и други активи, които да бъдат внедрени. Тези проекти са „феноменални с години страхотна работа на хиляди инженери“, отбеляза Матюс.

Всъщност, ако проверите страницата на пакета Babel NPM, ще намерите 136 зависимости, но това пропуска всички зависимости на други пакети, които Gatsby пуска, да не говорим за зависимостите на зависимостите на Gatsby. Като цяло, каза Матюс, „типичен проект на Гетсби може да използва хиляди пакети, поддържани от десетки хиляди инженери по целия свят, което е поразително.“

Именно тази зависимост от отворен код „помага на [Gatsby] да се движи толкова бързо и да прави толкова много неща като сравнително малък екип.“ Това е „удивително широката и дълбока екосистема Node.js, която има почти всичко, от което [Gatsby] се нуждае“, заключи той. Нито е сам. Следващият път, когато използвате Linux, допринесете за Kubernetes или се ангажирате по друг начин със софтуер с отворен код, не забравяйте, че в днешния свят всички ние безнадеждно (и се надяваме!) Зависим от милиони „обикновени разработчици“, които правят необикновени неща.