Input

Output

Hvad er GraphQL Minifier?

Når du sender et GraphQL-skema som del af en deploy-artefakt, en Lambda-bundle eller en SDL-streng leveret via CDN, hober beskrivelser og `#`-kommentarer sig hurtigt op. Et rigtigt produktionsskema kan let være 40-60 % dokumentation målt i bytes — nyttigt når mennesker læser det, død vægt når det går over ledningen for at boote en klient. GraphQL-specifikationen definerer kommentarer, blokstreng-beskrivelser og det meste whitespace som ignorerede tokens, hvilket betyder at enhver fornuftig parser alligevel ignorerer dem. Denne minifier fjerner det hele og returnerer en SDL på én linje, der er byte-for-byte ækvivalent med originalen set fra parserens synspunkt.

Minifieren er håndskrevet — ingen graphql-npm-pakke loades på siden, så første paint forbliver let. Den tokeniserer SDL, smider hver kommentar- og blokstreng-token væk og udsender de strukturelle tokens igen med det absolutte minimum af whitespace, der kræves for at holde nabostående name-tokens adskilte (det eneste sted hvor spec-overholdende SDL faktisk har brug for et mellemrum). Outputtet verificeres af den samme letvægts-parser, der bruges i formatteren, så turen gennem graphql-js eller Apollo Server ved opstart opfører sig identisk med originalen.

Det hele kører i din browser. Ingen upload, intet skema gemmes nogen steder. Indsæt, minificér, kopiér.

Sådan bruger du GraphQL Minifier

Tre hurtige trin. Knapperne beskrevet nedenfor er de faktiske knapper på denne side — der er ingen Minify-knap, fordi minificering kører automatisk.

1

Indsæt, upload eller hent et eksempel

Indsæt et GraphQL-skema i venstre Input-panel — minificering sker automatisk en brøkdel af et sekund efter du holder op med at skrive, så der er ingen Convert-knap at lede efter. Klik Upload for en .graphql-, .graphqls- eller .gql-fil, eller tryk Eksempel for at hente et realistisk e-handelsordre-skema med kommentarer og blokstreng-beskrivelser, som du kan se blive fjernet. Et typisk input ser sådan ud:

"""An order placed by a customer."""
type Order {
  # The unique order identifier
  id: ID!
  placedAt: DateTime!
  customer: Customer!
  items: [OrderItem!]!
  status: OrderStatus!
}

Både skemaer i serverstil (med extend type Query) og selvstændige typedefinitioner fungerer. De accepterede former matcher det, som GraphQL Schema Definition Language understøtter.

2

Læs det minificerede output

Højre Output-panel viser den minificerede SDL på én linje med pillen over sparede bytes i panel-headeren, så du med ét blik ser, hvor meget du sparede. Kommentarer (# ...) og blokstreng-beskrivelser ("""...""") fjernes helt — de har ifølge Relay GraphQL-specifikationen nul semantisk betydning, og enhver introspektionsbaseret tooling henter alligevel beskrivelser fra dit resolver-lag. Hvis SDL har ubalancerede tuborgklammer eller en anden parse-fejl, viser minifieren en venlig inline-besked — den kaster aldrig undtagelser eller crasher.

3

Kopiér eller download

Tryk på Kopiér for at gribe det minificerede skema til inline-brug i et deploy-script, en Lambda-miljøvariabel eller en konfigurationsfil. Tryk på Download for at gemme som .graphql. Ryd-knappen på input-panelet sætter dig tilbage til en tom tilstand. Minificering foregår fuldstændigt klient-side — dit skema forlader aldrig siden.

Hvornår du faktisk får brug for det

Mindre deploy-artefakter

Bundler du dit skema i en serverless-funktion eller et Docker-lag? At fjerne beskrivelser og kommentarer halverer typisk byte-størrelsen. Gang det med hver cold start og hvert lag-download, og besparelsen viser sig på regningen. Runtime-parseren er ligeglad — beskrivelser er kun metadata til introspektion, og de fleste produktionsdeployments slukker alligevel for introspektion ifølge Apollo Routers produktionsvejledning.

Skemaer leveret via CDN

Hvis din gateway henter SDL fra en CDN ved boot (Federation supergraph-komposition, schema registry-pulls), koster hver byte latency på den kolde sti. Minificeret SDL parses identisk og barberer et solidt stykke af wire-størrelsen — ofte mere end gzip ville, fordi gzip ikke kan komprimere det, der allerede er fjernet.

Indsætning af skemaer i kildekoden

Nogle gange skal du inline en skemastreng i en konfigurationsfil, en miljøvariabel eller et selvskrevet værktøj. En minificeret enkelt-linjeversion lander rent i et TypeScript template literal eller en YAML-skalar uden at skulle escape hver newline.

Reducér diff-støj

Når to revisioner af et skema kun adskiller sig i beskrivelser eller kommentarer, ligger det egentlige strukturelle diff begravet under doc-streng-ændringer. At minificere begge sider før diffing isolerer den reelle skema-delta, hvilket er nyttigt til ændringsstyring og opdagelse af breaking changes.

Almindelige spørgsmål

Er det minificerede skema stadig gyldigt GraphQL?

Ja — hver token som specifikationen definerer som ignorerbar (kommentarer, beskrivelser, overflødig whitespace, kommaer) fjernes, men hvert navn, hver tegnsætning, hver streng-litteral og hvert tal beholdes. Outputtet parses til præcis samme AST som inputtet. Du kan verificere det ved at køre begge gennem graphql-js og sammenligne de resulterende dokumenter.

Mister jeg min skema-dokumentation?

Ja — det er hele pointen. Beskrivelser og `#`-kommentarer fjernes. Behold din uminificerede kilde i versionskontrol, og minificér først når du er ved at sende artefakten af sted. Dokumentation som du rent faktisk vil eksponere over for klienter, lever i dit introspektionssvar, der genereres ud fra dine runtime-resolver-metadata, ikke fra den deployede SDL-streng.

Bliver mit skema sendt til en server?

Nej. Minificering kører fuldstændigt i din browser. Intet uploades, intet logges. Trygt at indsætte interne eller ikke-udgivne skemaer.

Hvor meget kan jeg forvente at spare?

Det afhænger af, hvor stærkt dokumenteret dit skema er. Et bart SDL uden beskrivelser sparer 10-15 % (bare whitespace). Et veldokumenteret skema med blokstreng-beskrivelser på hver type og hvert felt sparer typisk 40-60 %. Pillen for sparede bytes i output-panelets header fortæller dig det præcise tal for dit input.

Håndterer den direktiver, custom scalars og federation?

Ja. @deprecated, @key, @external, scalar DateTime og ethvert custom direktiv eller skalar beholdes. Minifieren fjerner kun ignorerbare tokens — alt semantisk bliver. Federation-direktiver kører rent gennem round-trip.

Hvor stort et skema kan jeg minificere?

Alt hvad din browser renderer komfortabelt. Skemaer på et par hundrede typer er ingen problem. Forbi cirka 5 MB begynder Ace-editoren selv at blive sløv — det er flaskehalsen, ikke minifieren.

Andre GraphQL-værktøjer

Minificering er én del af at arbejde med GraphQL. Disse værktøjer dækker resten: