+1
Sunt tentat de sinuos și solid, dar lipsa ecosistemului m-a făcut să mă aplec spre Preact.

care

FWIW, multe dintre cele din partea stângă a acelei mese sacrifică corectitudinea și chiar experiența dezvoltatorului în numele performanței. Nu sunt foarte sigur ce sens are posibilitatea de a revendica o implementare este „rapid” dacă lipsește aproape orice altă dimensiune.

Mai ales dacă „performanța” este pur și simplu un număr de referință și nu se traduce deloc în experiența utilizatorului. Care IMO este cea mai mare parte a acestora.

Care este cadrul dvs. de alegere?

pentru propriile lucruri, folosesc unul pe care l-am scris [1], dar nu l-aș recomanda pentru echipe mari, sau echipe cu diferite abilități/specializări sau pentru oricine nu este pregătit să-și lanseze propriile opinii/componente.

în general, îmi place să rămân la js pur, așa că sunt un fan mai mare al hiperscriptului peste JSX sau chiar și DSL-uri mai grele. unele dintre noile cadre observabile fără vdom bazate pe idei din S.js (excedent, solid, sinuos, vella) sunt interesante, deși majoritatea din această paradigmă luptă pentru rehidratarea unui DOM SSR, ceea ce cred că este important dacă construiți un site web care are nevoie de o bună capacitate SEO.

un lucru pe care îl văd din cadrele populare este cât de multă umflătură tind să crească. poate că acest lucru se datorează doar faptului că componentele acestui ecosistem tind să nu fie minime, dar tind să fie mari și să susțină multe cazuri, ceea ce le face pe amândouă populare, dar și încărcate de caracteristici. poate că acest lucru se datorează naturii de a avea echipe uriașe care dezvoltă aplicații sau experienței variate a vastei baze de utilizatori. este prea ușor să împărțiți 20 de componente populare aprobate de ecosistem împreună pentru a ajunge la un MVP care are 500 MB de dependențe de componente și apoi crește doar de acolo. Am cerut înainte ca cineva să mă indice către un site web public construit cu React sau Vue, care este de fapt rapid (măsurat în mod obiectiv de către devtools, nu subiectiv de oameni ca „încărcări în reflectiveSingleton · 255d

pentru lucrurile mele, folosesc una pe care am scris-o

Odată am făcut asta eu însumi. cu câțiva ani în urmă: http://footworkjs.com/

. pe baza knockout-ului din acel moment.

Vă sugerez cu tărie oricui să nu-și folosească propriul cadru. chiar și pentru proiecte personale.

Dacă doriți să scrieți unul pentru a vă extinde setul de abilități, atunci minunat, asta funcționează (și a ajuns să fie ceea ce am obținut din experiență). Dar dacă sunteți ca mine, petreceți cantități excesive de timp pe un cadru care în cele din urmă este folosit doar de dvs. sau poate unul sau doi. pur și simplu nu. există utilizări mai bune ale timpului tău.

acesta este un punct valid. dar contrapunctul este că dacă toată lumea ar folosi doar cadrele existente/populare, atunci toată lumea ar fi încă pe jQuery.

Footwork pare să extindă Knockout și se vinde ca un cadru mai complet. chiar knockout-ul în sine este la nivel mai înalt decât domvm, deoarece oferă legarea datelor și analiza șabloanelor.

domvm este mai aproape de React, în sensul că este pur și simplu un strat vdom care oferă izolarea componentelor, starea privată opțională și vdom. de asemenea, nu este o nouă lib, și a fost scris când DX-ul pe care îl căutam a fost furnizat doar de Mithril (mic, pur-js, drop-in ca jQuery fără a necesita nod, Babel și 500MB de node_modules). domvm a renunțat la rutare, a adăugat SSR cu rehidratare, starea componentelor private, a retras izolat și a fost mai mic și mai rapid decât atât Mithril, cât și React (și încă este).

dacă aș începe astăzi, ar fi destul de o prostie să îmi creez propriul strat de vdom, deoarece există acum multe opțiuni bune care îndeplinesc cerințele pe care le doream, atât atunci, cât și acum.

dar contrapunctul este că dacă toată lumea ar folosi doar cadrele existente/populare, atunci toată lumea ar fi încă pe jQuery.

Asta nu înseamnă că toată lumea ar trebui să fugă și să își scrie propriul cadru.

De asemenea, am considerat că implementarea componentelor mele care permite încărcarea automată a modulelor și soluția mea de gestionare a stării a fost nouă și „mai bună” decât ceea ce era și acolo.

Ce am ajuns să realizez mai târziu. a fost câteva lucruri:

  • Nu vă aduceți prejudecăți față de alte cadre/biblioteci înainte de a le înțelege profund. Este nevoie de investiții efective în învățarea a ceva, scrierea unui fragment bun de cod cu acesta (nu doar o lume de salut/etc), pentru a ști dacă merită sau nu.
  • Să lucrezi cu alți dezvoltatori înseamnă să nu scrii propriile tale soluții unice 99,9999% din timp. Veți fi dificil să adunați o echipă în jurul cadrului/bibliotecii dvs. preferate de preparare a casei.

.dar cel mai important.

  • Cu excepția cazului în care intenționați să scrieți acest cadru într-un fel sau altul, într-un fel sau altul. vei ajunge doar să-ți pierzi timpul.

.așa că, din nou, spun, cu excepția cazului în care obiectivul dvs. este pur și simplu să vă dezvoltați abilitățile. probabil că ți-ai putea petrece timpul mai bine în altă parte.

Am evaluat multe cadre de atunci (inclusiv React) și m-am așezat pe Mithril până când semantica și perfecțiunea sa nu mai sunt acceptate acolo unde am vrut să merg fără hackuri profunde. ce faci în această situație? stabili? așteptați ca altcineva să scrie ceea ce aveți nevoie?

se pare că atunci când îl poți scrie mai bine, uneori poți obține rezultate care depășesc tot ceea ce există de-a lungul unor axe importante pentru tine, de ex. [1] [2]. dar dacă sunteți cineva care tratează codificarea ca pe un simplu mijloc de pompare rapidă a caracteristicilor (o slujbă de zi), atunci cu siguranță scrierea propriilor înlocuitori pentru ceea ce există este o pierdere fantastică de timp. cu toate acestea, cineva trebuie să scrie lucruri noi/mai bune, astfel încât acest sfat este departe de a fi universal aplicabil. de exemplu, motivul pentru care Chart.js v3 va fi masiv mai rapid decât v2 se datorează faptului că am scris uPlot și am petrecut o grămadă de timp făcând un etalon obiectiv pe care l-au observat și pe care l-am îmbunătățit neobosit; chiar dacă uPlot a ieșit slab, doar lucrarea de referință va îmbunătăți indirect zeci de mii de site-uri web.

„nu reinventa niciodată” și „reinventează întotdeauna” este un sfat la fel de rahat.

Am constatat, de asemenea, că calitatea dezvoltatorilor React variază enorm, așa că fondul de angajare pentru cei care știu că React are o suprapunere mare cu cei care pot prelua orice cadru similar în câteva zile. cu toate acestea, dezvoltatorii care trec printr-un bootcamp de 2 săptămâni înainte de a ști vreun JS sunt de genul care tind să nu se adapteze bine sarcinilor care nu reacționează. Nu angajez pentru cunoștințe cadru, angajez pentru cunoștințe JS/DOM/CSS.

oricum, cu siguranță nu sunt aici pentru a vinde oameni pe domvm sau pentru a scrie propriile lor lucruri atunci când există numeroase libs care își bifează deja toate cerințele. Înțeleg foarte bine compromisurile pe care le fac.

Uite, când găsesc un gol lipsă specific, simt că trebuie umplut, îl completez (un exemplu recent: https://github.com/jonbnewman/mobx-store-provider). Așadar, numindu-mă „cineva care tratează codificarea ca un simplu mijloc de a scoate rapid în funcțiune funcțiile (o slujbă de zi), atunci cu siguranță să scrii propriile înlocuiri pentru ceea ce există este o pierdere de timp fantastică” este pur și simplu o prostie. și oarecum jignitoare.

De asemenea, puteți găsi dezvoltatori care știu sarea lor ȘI să scrie un cod bun în React. te comporti ca și cum ar fi imposibil să găsești astfel de oameni. Aș argumenta că este mai ușor să construiești o echipă solidă de dezvoltatori decenți în jurul acestui lucru decât pentru cadrul tău de companie.

La sfârșitul zilei, ca tip care a petrecut mult timp codificând ca pasiune ȘI ca pe o slujbă. Încerc să argumentez pentru un stil de viață mai echilibrat în aceste zile. Înțeleg că aveți motivele pentru a vă scrie pachetele. la fel ca și eu. Încerc doar să le spun celor mai mulți oameni de acolo că probabil nu este nevoie să reinventați roata. iar dacă crezi că o faci, fii al naibii de sigur și fă-ți mai întâi temele. Asta e tot ce spun.

. așa că numindu-mă „cineva care tratează codificarea ca pe un simplu mijloc de pompare rapidă a caracteristicilor (un job de zi). 'este doar o prostie. și oarecum jignitoare.

Nu spuneam că acest lucru este valabil pentru dvs. îmi pare rău dacă a ieșit așa.

Aș argumenta că este mai ușor să construiești o echipă solidă de dezvoltatori decenți în jurul acestui lucru decât pentru cadrul tău de companie.

Încerc doar să le spun celor mai mulți oameni de acolo că probabil nu este nevoie să reinventați roata. iar dacă crezi că o faci, fii al naibii de sigur și fă-ți mai întâi temele. Asta e tot ce spun.

niciun argument acolo.

dacă aș începe astăzi, ar fi destul de o prostie să îmi creez propriul strat de vdom, deoarece există acum multe opțiuni bune care îndeplinesc cerințele pe care le doream, atât atunci, cât și acum.

V-ar deranja să distribuiți câteva exemple ale acestor opțiuni?

dacă întrebați despre propria mea preferință (mai degrabă decât sfatul general).

Aș evaula totul din partea stângă a acestui tabel:

din cele mai rapide libs, se pare că numai Solid și Inferno au o poveste SSR, deci poate că acestea. dacă nu aș avea nevoie de SSR/rehidratare, aș privi sinuos.

de asemenea, urmărind atent https://github.com/dom-dee-dom/vella (poate un succesor al Mithril bazat pe S.js)

Vă mulțumim pentru răspuns detaliat. Pot să întreb ce nu este în regulă, de ex. lit-html?

Nu l-am încercat, dar o privire rapidă la [1] mă oprește din cauza șabloanelor html strânse și a modului în care acestea încurajează păstrarea stării în atributele data- *, plus adnotări personalizate pentru handlers și altele. nimic în neregulă cu asta, doar nu ceașca mea de ceai.

Dar percepția umană este ceea ce contează cu adevărat? Și este absolut necesar să încărcați 100 de produse odată, în loc să încărcați leneș?

Dar percepția umană este ceea ce contează cu adevărat?

chestia este că durata de viață a bateriei dispozitivului dvs. nu îi pasă de percepția umană. și dacă lib-ul folosește de 20 de ori mai mult ram, atunci ajunge să descarce alte aplicații/file mai devreme decât ar fi făcut altfel. de asemenea, pe dispozitivele mobile 500ms devine 1500ms și apoi devine foarte vizibil.

totul se schimbă odată ce nu aveți un procesor desktop cu 8 nuclee, 16 GB RAM, 200 MB lățime de bandă și putere A/C infinită.

Și este absolut necesar să încărcați 100 de produse odată, în loc să încărcați leneș?

în acest caz este, deoarece este un tabel cu un singur tip de produs cu dimensiuni și proprietăți electrice variabile. aceste produse trebuie combinate într-un singur proiect, așa că dorim să arătăm toate variantele disponibile simultan. totuși, există încă o grupare și segmentare vizuală în tabel pentru ux mai bun.

Comentariu extraordinar, mi-ar plăcea să știu unde să mă abonez pentru a mă asigura că voi primi o scrisare tehnică mai aprofundată odată ce sunteți gata!

Îl voi posta pe/r/javascript. mai sunt câteva luni afară.