Programmering

Gatsby JS står på tusinder af skuldre

For mange år siden lånte Linux-grundlægger Linus Torvalds Sir Isaac Newtons sætning "giganternes skuldre", når han diskuterede sit open source-arbejde med Linux. Selvom det er en god stemning - "Hej, jeg har kun været i stand til at udføre godt arbejde på grund af et par andres store arbejde" - der muligvis har været anvendt på Linux i 1991, men det gør ikke et godt stykke arbejde med at beskrive open source i 2020. Når nogen frigiver open source-kode i dag, trækker de trods alt meget mere end et lille sæt geniale udviklere.

Nej, som den seneste udgivelse af Gatsby.js viser, afhænger moderne open source-projekter af tusinder af andre projekter. Eller som Gatsby-grundlægger Kyle Mathews udtrykte det i et interview: "Vi står på skuldrene af tusinder af [almindelige] mennesker."

1000x hurtigere builds? Ja tak!

I starten (på internettet) var den statiske stedgenerator. Over tid, som Mathews beskrev i sit indlæg, vendte organisationer sig til databasedrevne websteder for at understøtte stadig mere dynamiske funktioner. Efterhånden som websteder voksede, resulterede generering af statisk websted i langsomme opbygningshastigheder, selv da databasedrevne værktøjer som WordPress voksede til fordel for de marketingfolk, der ikke ønskede at gider kodning i Markdown. Pre-rendering hjalp webstedsgeneratorerne, men ikke nok til at gøre dem til den foretrukne mulighed for store websteder.

Men det var dengang; det er nu.

Tidligere i 2020 introducerede Gatsby Gatsby Builds, som gjorde bygningstider 60X hurtigere end standard kontinuerlige implementeringsløsninger gennem en smart kombination af distribueret computing og sofistikerede cachefunktioner. Pæn. Men med den nylige udgivelse af Incremental Builds får Gatsby builds under 10 sekunder til dataredigeringer, hvilket kan repræsentere en 1000 gange forbedring i forhold til eksisterende build-løsninger.

Hvordan? "Den største ting, vi har gjort," sagde Mathews i et interview, "er oprettet et afhængighedssporingssystem, der giver os mulighed for billigt at finde ud af, hvad der skal opdateres mellem builds." Hvis dette lyder som den fremgangsmåde, som byggeværktøjer som Bazel eller databehandlingsværktøjer som Apache Spark og Apache Flink benytter, er det fordi det er. "Gatsby behandler ændringer på hændelser fra websteder fra data / kode som andre stream-processorer - vi finder ud af, hvad der er ændret og opdaterer det billigt." Traditionelle statiske stedgeneratorer har længe haft en batchbehandlingsmetode til data, men Gatsbys nye tilgang er realtids streambehandling.

Det er en big deal, hvilket gør Gatsby-tilgangen anvendelig af ethvert websted i stedet for en lille brøkdel af internettet. Det er også afhængig af forbløffende open source-teknologi som GraphQL, som gør det muligt for Gatsby at spore dataafhængigheder mellem sider og datakilderne, så når et stykke data ændres, kan de beregne, hvilke sider der skal opdateres.

Så jeg spurgte Mathews, hvor afhængig Gatsby er af anden open source….

Står på skuldrene af React, GraphQL, Webpack, Babel ...

”Vi er stærkt afhængige af mange gode projekter,” sagde Matthews. Og så fortsatte han:

Udtrykket kan måske opdateres, at i stedet for at stå på giganternes skuldre, står vi på tusinder af menneskers skuldre. Hvilket er en af ​​de seje ting ved open source - det er ikke kun for genier! Almindelige mennesker kan opbygge og / eller hjælpe med at vedligeholde bidstørrelsespakker, der stadig løser kritiske behov.

Nogle af disse "almindelige mennesker" har bygget ekstraordinær kode, som Gatsby er afhængig af. I betragtning af at Gatsby er baseret på React, kommer React naturligvis straks til at tænke på. Men der er mere. Meget mere. Gatsby stoler også på, at Webpack og Babel gør det tunge løft omkring behandling og forberedelse af JavaScript, CSS og andre aktiver, der skal implementeres. Disse projekter er "fænomenale med mange års stort arbejde fra tusinder af ingeniører," bemærkede Mathews.

Faktisk, hvis du tjekker Babel NPM-pakkesiden, finder du 136 afhængigheder, men dette udelader alle afhængigheder af andre pakker, som Gatsby frigiver, for ikke at nævne afhængighederne af Gatsbys afhængigheder. Alt i alt sagde Mathews, "Et typisk Gatsby-projekt bruger muligvis tusindvis af pakker, der vedligeholdes af titusinder af ingeniører over hele verden, hvilket er forbløffende."

Det er denne afhængighed af open source, der "hjælper [Gatsby] med at bevæge sig så hurtigt og gøre så mange ting som et relativt lille hold." Det er "det utroligt brede og dybe Node.js-økosystem, der næsten har alt [Gatsby] har brug for," konkluderede han. Han er heller ikke alene. Næste gang du bruger Linux, bidrager til Kubernetes eller på anden måde beskæftiger dig med open source-software, skal du huske at vi i dag er håbløst (og forhåbentlig!) Afhængige af millioner af "almindelige udviklere" og gør ekstraordinære ting.