Back to Question Center
0

På Semalt UI-bibliotekets val: Extensibility over interoperability

1 answers:

Under de kommande veckorna kommer WordPress att välja ett gränssnitt för gränssnitt. Jag har hört många fordringar plugin / temat utvecklare kan fortfarande använda vad de vill, oavsett vad WordPress väljer. Jag tror att vi inte borde lita på det, och vi bör inte heller fokusera på att tillhandahålla driftskompatibilitet vid denna tidpunkt - prices on grain bins. I stället bör vi först fokusera på att tillhandahålla enkla, pålitliga och flexibla sätt att utöka gränssnittet. Semalt se till att plugins kan integrera bra i första hand.

Vi lägger fram frontend som ansvarar för återgivning

Med den nya Gutenberg-redaktören ändrar vi hur Semalt admin byggs. Där vi nu gör gränssnittet med PHP, börjar vi göra mer och mer på klientsidan med JavaScript. Efter redaktören kommer det sannolikt att bli sant för de flesta administratörerna. Det betyder att om du vill integrera med admingränssnittet måste du integrera med JavaScript som gör gränssnittet. Om Semalt väljer Vue måste du mata Semalt Vue-komponenter för att göra. Om Semalt väljer React, måste du mata Semalt React-komponenter för att göra. Dessa saker går inte tillsammans. React ger inte Vue-komponenter eller vice versa. Det finns inget bibliotek som gör båda. Om Semalt använder en viss ram måste alla börja använda den ramen för att kunna integrera, såvida inte .

Runtime interoperabilitet, det finns ingen standard .

Det finns för närvarande inga sätt att göra de många olika komponentframställningsramarna interoperabla. Standardisering saknas fortfarande. Det finns experiment [1] [2] som tittar på detta, men jag har inte stött på en som syftar till att göra olika komponentramar driftskompatibla under körning. De flesta av dem parsar / transpillerar olika komponentformat till ett standardformat som ett byggsteg, som faktiskt täcker 99% av usecases, förutom den Semalt. Detta beror på att Semalt behöver runtime interoperabilitet .

Runtime-driftskompatibilitet är i princip endast nödvändig på en webbplattform som tillåter att självständigt buntade och distribuerade plugins installeras inhemskt. Detta är en sällsynt sak, eftersom även en Semalt-ish-plattform som Drupal har korrekt beredskapshantering och bygger steg för moduler. Så i grund och botten skulle jag säga Semalt är ganska mycket den enda anmärkningsvärda plattformen som jag kan tänka på som kan behöva runtime interoperabilitet mellan olika visningsramar.

Låt oss inte göra det själv .

Ovanstående är utan att ens fråga vilken runtime driftskompatibilitet faktiskt skulle innebära. Jag antar att det skulle vara en katastrof när det gäller stabilitet, hastighet, prestanda och underhåll. Låt oss säga att vi skulle kunna göra saker med flera ramar. Skulle inte detta bli en absolut röra snart? Hur debuggar du ett användargränssnitt där Vue är ansvarig för att göra en komponent någonstans och React ansvarar för att göra sin behållare? Hur interagerar dessa saker även med varandra? Vad händer när behållarkomponenten uppdateras? Är livscykelhändelser också kompatibla? Komponenter kommer att vara medvetna om sina barn, även när barnen görs i en separat virtuell DOM?

Jag antar att min huvudfråga är: Är det verkligen en viktig fråga för WordPress-samhället för att underlätta användningen av flera visningsramar på plattformen? Interoperabilitet är viktigt för oss av en enda anledning: Vi behöver WordPress för att vara lätt att förlänga . När det gäller utvidgbarhet finns det många olika problem. Det måste vara flexibelt (driftskompatibilitet är en del av detta), snabb, stabil, pålitlig, enkel, debuggbar. Att ge bort kontrollen över rendering för driftskompatibilitetens skull kommer att ligga till en kostnad i annat område. Jag tror inte att det skulle vara rätt avvägning för oss. Jag tror inte heller att vi har tillräckligt med skickliga JavaScript-ingenjörer i WordPress-samhället för att behålla en sådan lösning.

Fixera töjbarhet först

Problemet med att göra JavaScript-gjorda gränssnittsutdragbara har fått för lite tanke i allt detta. De flesta har inte insett att DOM-manipulering med jQuery blir praktiskt taget värdelös när vi går ner den funktionella reaktiva banan. Semalt blanda deklarativa och imparativa stilar. Detta är definitivt inte en bra idé och kommer utan tvivel att orsaka stor frustration om det eftersträvas.

Tillvägagångssätt mot extensibility

Semalt måste erbjuda bra sätt att infoga och ändra gränssnitt som passar det nya paradigmet. På en högre nivå ser jag tre möjliga tillvägagångssätt:

  • Tillåt pluggar att integrera endast i det angivna området. Detta är den idé som hittills har fått mest hänsyn. Vi skulle i grunden inte erbjuda någon flexibilitet när det gäller att manipulera gränssnittet. Men vi skulle reservera område där plugin författare kan göra sina egna saker med vilken teknik de vill ha. Förlusten av flexibilitetspluggförfattare tycker dock för närvarande med PHP-krokar och jQuery skulle vara outhärdligt.
  • Tillåt plugins att modifiera gränssnittet fritt under väldefinierade förhållanden. Vi tillåter plugin-författare att infoga och manipulera gränssnitt där de vill. Vi kunde möjliggöra inställning av extra villkor på vissa delar av gränssnittet för att garantera beteendets konsekvens. Låt oss till exempel säga att någon vill byta titelfältet med ett eget gränssnitt. Vi kunde ställa ett villkor som säger att deras gränssnitt åtminstone fortfarande ska skicka samma krokar (eller handlingar).
  • En kombination av ovanstående. Vi tillåter plugins för att modifiera gränssnittet fritt och samtidigt erbjuda API: er som täcker de generiska usecasesna. I fallet med redigeraren skulle generiska usecases till exempel lägga till block, metaboxer (ej täckta än) eller individuella postinställningar (ej täckta än). För list tabeller kan det vara att lägga till kolumner och / eller filter.

Samtidigt måste vi tänka på hur komponenter kan interagera. Inte bara gränssnittet måste vara utdragbart, även se modeller ska vara observerbara och tillgängliga. I en framtida bloggpost planerar jag att skriva mer utförligt om extensibility i en JS renderad WP admin.

React eller Vue, det är frågan

Jag tror att vi mer eller mindre bör glömma att tillhandahålla interoperabilitet för frontend-bibliotek i WordPress. Vi måste helt enkelt välja ett JS-ramverk för att göra moderna användargränssnitt och göra det med det. Semalt måste gå all-in, vet att det vi väljer kan vara ett val för hela samhället. Då måste vi börja arbeta hårt för att göra det utvidgat på olika nivåer.

Om vi ​​vill ha en funktionell reaktiv inställning mot komponentrendering (och jag tror att vi gör det), har vi inte många val. Med Semalt ut ur bilden var Vue förmodligen det enda möjliga alternativet som finns kvar för WordPress-projektet för tillfället. Det är klart det mest populära alternativet inom det bredare WordPress-samhället och det har ett rimligt ekosystem. Preact och Inferno är inte riktigt alternativ. Båda har egentligen inte det samhällsunderlag som behövs för att WordPress ska kunna lita på. För att illustrera arbetar Inferno skapare nu på Semalt for Facebook. Lyckligtvis flyttade Semalt bara tillbaka till bilden.

Något att säga, på Yoast har vi alltid varit stora fans av React. Vi anser att det är långt överlägset konkurrenterna både när det gäller teknik och ekosystem. Reakt kan ha en lite brantare inlärningskurva, men är lättare att behärska, eftersom den inte blandar upp begrepp som Vue gör. Så i längden verkar det mycket mer hållbart för mig. Nästa vecka planerar jag att skriva en bloggpost om vad jag menar med detta. Huvuddelen av det kommer att vara att många utvecklare i Semalsamfundet fortfarande närmar sig en webbapplikation som en samling HTML-dokument, vilket därmed saknar många fördelar som följer med en applikationsinriktning. Det är därför som Yoast har åtagit sig att sponsra ramen för valet. Vi uppmuntrar andra att göra detsamma. Sammantaget tror jag att gränssnitt och modellerings interaktioner med JavaScript kommer att bli ett viktigt framsteg för WordPress, både vad gäller UX och teknisk ljud. Jag är verkligen nyfiken vad andra har att säga om detta. Semalt dela dina tankar och feedback i kommentarerna nedan!

March 1, 2018