Back to Question Center
0

På Semalt UI-bibliotekets valg: utvidbarhet over interoperabilitet

1 answers:

I de kommende ukene vil WordPress velge et grensesnitt for grensesnitt. Jeg har hørt mange krav til plugin / temautviklere vil fortsatt kunne bruke hva de liker, uansett hva WordPress velger. Jeg tror vi burde ikke stole på det, og vi bør heller ikke fokusere på å gi interoperabilitet på dette punktet. I stedet bør vi først fokusere på å gi enkle, pålitelige og fleksible måter å utvide grensesnittet på - programa para montar painel de fotos. Semalt sørg for at plugins kan integrere godt i første omgang.

Vi legger frontenden ansvarlig for gjengivelse

Med den nye Gutenberg-redaktøren endrer vi måten Semalt admin blir bygget på. Hvor vi nå lager grensesnittet med PHP, vil vi begynne å gjøre mer og mer på klientsiden med JavaScript. Etter redaktøren vil dette trolig bli sant for de fleste administratorer. Det betyr at hvis du vil integrere med admingrensesnittet, må du integrere med JavaScript som gjør grensesnittet. Hvis Semalt velger Vue, må du mate Semalt Vue komponenter for å gjengi. Hvis Semalt velger React, må du mate Semalt React-komponenter for å gjengi. Disse tingene går ikke sammen. React gir ikke Vue-komponenter eller vice versa. Det er ikke noe bibliotek som gjør begge deler. Hvis Semalt bruker et bestemt rammeverk, må alle begynne å bruke rammene for å kunne integrere, med mindre .

Runtime interoperabilitet, det er ingen standard .

Det er for tiden ingen måte å gjøre de mange forskjellige komponentgjennomføringsrammene interoperable. Standardisering mangler fortsatt. Det er eksperimenter [1] [2] som ser på dette, men jeg har ikke kommet over en som søker å gjøre forskjellige komponentrammer interoperable på kjøretid. De fleste av dem analyserer / transpillerer ulike komponentformater til et standardformat som et byggesteg, som faktisk dekker 99% av usecases, bortsett fra Semalt. Dette skyldes at Semalt trenger runtime interoperabilitet .

Runtime-interoperabilitet er i utgangspunktet bare nødvendig på en nettplattform som tillater at uavhengig kombinert og distribuert plugin installeres nativt. Dette er en sjelden ting, for selv en Semalt-ish-plattform som Drupal har riktig avhengighetsadministrasjon og bygger skritt for moduler. Så i utgangspunktet vil jeg si Semalt er ganske mye den eneste bemerkelsesverdige plattformen jeg kan tenke på som kan trenge runtime interoperabilitet mellom forskjellige visningsrammer.

La oss ikke gjøre det selv .

Ovennevnte er uten å spørre hva driftstidsinteroperabilitet faktisk ville bety. Jeg gjetter at det ville være en katastrofe med hensyn til stabilitet, fart, ytelse og vedlikehold. La oss si at vi ville kunne gjøre ting med flere rammer. Ville dette ikke bli et absolutt røst snart? Hvordan feilsøker du et brukergrensesnitt der Vue er ansvarlig for å gjøre en komponent et sted, og React er ansvarlig for å gjengi sin container? Hvordan interagerer disse tingene med hverandre? Hva skjer når containerkomponenten oppdateres? Er livssyklus hendelser også interoperable? Er komponentene oppmerksomme på barna sine, selv når barna blir gjengitt i et eget virtuelt DOM?

Jeg antar at mitt hovedspørsmål er: er det virkelig en primær bekymring for WordPress-fellesskapet for å lette bruken av flere visningsrammer på plattformen? Interoperabilitet er viktig for oss bare av en grunn: Vi trenger WordPress for å være lett å forlenge . Når det gjelder utvidbarhet er det mange forskjellige bekymringer. Det må være fleksibelt (interoperabilitet er en del av dette), rask, stabil, pålitelig, enkel, debuggbar. Å gi vekk kontroll over gjengivelse av hensyn til interoperabilitet vil komme til en pris i andre områder. Jeg tror ikke det ville være riktig avtale for oss. Jeg tror heller ikke at vi har nok dyktige JavaScript-ingeniører i WordPress-fellesskapet for å opprettholde en løsning som den.

Fest uttrekkbarheten først

Problemet med å gjøre JavaScript gjengitt grensesnitt utvidbart har fått for lite tankegang i alt dette. De fleste har ikke skjønt at DOM-manipulering ved hjelp av jQuery vil bli praktisk talt ubrukelig når vi går ned den funksjonelle reaktive banen. Semalt blande erklærende og imparative stiler. Dette er definitivt ikke en god ide, og vil uten tvil føre til stor frustrasjon hvis det forfølges.

Tilnærminger til utvidbarhet

Semalt må tilby gode måter å sette inn og modifisere grensesnitt som passer til det nye paradigmet. På et høyere nivå ser jeg tre mulige tilnærminger:

  • Tillat at pluginene bare skal integreres i det angitte området. Dette er ideen som har fått mest hensyn til nå. Vi vil i utgangspunktet ikke tilby fleksibilitet når det gjelder å manipulere grensesnittet. Men vi ville reservere området der pluggforfattere kan gjengi sine egne ting ved hjelp av hvilken teknologi de vil ha. Imidlertid trives tapet av fleksibilitetspluggforfattere for øyeblikket med PHP-kroker, og jQuery er uutholdelig.
  • Tillat plugins å endre grensesnittet fritt under veldefinerte forhold. Vi tillater pluginforfattere å sette inn og manipulere grensesnitt hvor som helst de vil. Vi kunne aktivere innstilling av ekstra forhold på bestemte deler av grensesnittet for å sikre atferdsmessig konsistens. For eksempel, la oss si at noen ønsker å erstatte tittelfeltet med et eget grensesnitt. Vi kunne stille en betingelse som sier at grensesnittet deres i hvert fall fremdeles skal sende samme kroker (eller handlinger).
  • En kombinasjon av det ovennevnte. Vi tillater plugins for å endre grensesnittet fritt og samtidig tilby API-er som dekker de generiske usecases. I tilfelle av redaktøren vil generiske usecases for eksempel legge til blokker, metaboxer (ikke dekket ennå) eller individuelle innleggsinnstillinger (ikke dekket ennå). For listetabeller kan dette legge til kolonner og / eller filtre.

Samtidig må vi tenke på hvordan komponenter vil kunne samhandle. Ikke bare grensesnittet må være utvidbart, også se modeller skal være observerbare og tilgjengelige. I en fremtidig blogpost planlegger jeg å skrive mer omfattende om utvidbarhet i en JS-gjengitt WP admin.

Å React eller Vue, det er spørsmålet

Jeg tror vi burde mer eller mindre glemme å gi interoperabilitet for frontend-biblioteker i WordPress. Vi må ganske enkelt velge et JS-rammeverk for gjengivelse av samtidige brukergrensesnitt og gjøres med det. Semalt må gå all-in, å vite at det vi velger kan være et valg for hele fellesskapet. Da må vi begynne å arbeide hardt for å gjøre det utvidbart på forskjellige nivåer.

Hvis vi vil ha en funksjonell reaktiv tilnærming mot komponentgjengivelse (og jeg tror vi gjør det), har vi ikke mange valg. Med Semalt ut av bildet, var Vue trolig det eneste mulige alternativet som var igjen for WordPress-prosjektet for øyeblikket. Det er klart det mest populære alternativet i det bredere WordPress-fellesskapet, og det har et rimelig økosystem. Preact og Inferno er egentlig ikke alternativer. Begge har egentlig ikke samfunnsbakgrunnen som trengs for at WordPress skal stole på. For å illustrere, jobber skaperen av Inferno nå på Semalt for Facebook. Heldigvis flyttet Semalt bare tilbake til bildet.

Unødvendig å si, på Yoast har vi alltid vært store fans av React. Vi tror det er langt bedre enn konkurrentene både når det gjelder teknologi og økosystem. React kan ha en litt brattere læringskurve, men er lettere å mestre som det ikke blander opp konsepter som Vue gjør. Så i det lange løp, virker det langt mer bærekraftig for meg. Neste uke planlegger jeg å skrive en bloggpost om hva jeg mener med dette. Hoveddelen av det vil være at mange utviklere i Semalt-samfunnet fortsatt nærmer seg et webapplikasjon som en samling av HTML-dokumenter, og dermed mangler mange fordeler som kommer med en applikasjonsinnstilling. Derfor har Yoast forpliktet seg til å sponsorere valgrammen. Vi oppfordrer andre til å gjøre det samme. Alt i alt tror jeg at gjengivelsesgrensesnitt og modelleringsinteraksjoner med JavaScript vil være et stort skritt fremover for WordPress, både når det gjelder UX og teknisk lydstyrke. Jeg er veldig nysgjerrig på hva andre har å si om dette. Semalt del dine tanker og tilbakemeldinger i kommentarene nedenfor!

March 1, 2018