A frontend állapota 2017-ben
Egy múltkori fórumtéma kapcsán többen is a manapság népszerűnek tartott React-et és Angulart javasolták kezdőknek, ebben az írásomban bemutatom részletesen, hogy mi a probléma ezekkel.
A működési elvük a következő: általában nyers adatforrásokkal (json) dolgoznak, amiket a kliens aktuális állapota alapján olvasnak be, majd átadják a sablonoknak, amikből végül HTML-t generálnak. A kulcs itt az, hogy az aktuális állapot (az esetek túlnyomó többségében) a kliensen van, amivel legalább két probléma van. Az egyik, hogy egy áramszünet vagy a böngésző bezárása/a lap újratöltése után ez az állapot elveszik. A másik, hogy nem veszik figyelembe az internet alaptörvényét.
Ezt az alaptörvényt Peter-Paul Koch, az egyik legismertebb frontendes így emeli ki:Azaz lényegében fogalmunk sincs, hogy a kliensoldalon mi van, csak feltételezések. Nem tudhatjuk, hogy az a legújabb i7-es nyolc maggal, tizenhat szállal, hatvannégy gigabájt memóriával, vagy egy ötéves, 4.0-s Androidos telefon 512 megabájt RAM-mal. Mert a felhasználónak lehetősége van mindkettőt választani, ha az igényeit kielégíti.
Node egy Androidos böngésző ugyanolyan jó, mint a legújabb Chrome vagy Firefox? Ugyanúgy fog repeszteni? Ha a felhasználó számára lassú lesz az oldal, és emiatt otthagyja, az az ő baja, vagy a fejlesztő hibája? Ha utóbbi, akkor vállalja-e a felelősséget, és megtéríti-e a megrendelő kárát?
Nagyon jó példa erre a React 15.0 változási napló, melyben így fogalmaznak:A fejlesztők teljes dilettanciáról tesznek bizonyítékot, amikor azt feltételezik, hogy mindenki a legújabb böngészőket használja.
De ha a cél környezet undefined, akkor miért tárolunk ott állapotot? Ennél elborultabb ötlettel nem igazán jöhettek volna elő a kedves készítők.
A React a kisebb kaliberű, de bőven alkalmas az ember elbizonytalanítására. Kezdetben 0.x verziószámokat használtak, ami a konvenciók alapján azt jelenti, hogy ez egy béta minőségű szoftver, és várhatóan az 1.0-ban vált stabillá. Ehhez képest a 0.14.7 után 15.0-ra váltottak, ami ezer kérdést hoz maga után, például hogy akkor már a 0.14 is stabil volt? Vagy csak a 15.0 stabil? A 15.0 ungyanolyan stabil, mint a 0.14? Ekkora változás van a 0.14 és a 15.0 között? Van jelentősége a verziójuknak, vagy inkább csak azt méregetik, melyiküké hosszabb, az Angularé vagy a Reacté? Marketing az egész?
Az Angular 1.x és 2.0 közötti váltásról mindenki hallott már, aki foglalkozik a témával, röviden annyi, hogy az új verzióban mindent újraírtak, visszafele nem kompatibilis.
Ezek után nem lehet tudni, hogy mikor játsszák meg ugyanezt, mikor dobhatja ki a kukába az aktuális fejlesztését az adott cég, aki Angularra épít, mert ez utóbbi készítői rájönnek, hogy nagyon elrontottak valamit, és megint újraírják.
Aki az Angulart választja ezek után, az egészen biztosan ostoba.
Bár a javascript nagyon népszerű, a node.js-nél elcseszettebb programozási környezetet akarva sem lehet készíteni. Gyakorlatilag az első perctől azzal küzdenek, hogy a javascript nem arra lett kitalálva, amire ők használni szeretnék, lásd callback hell, amire máig n darab megoldás született, szabványt is módosítottak miatta, de mindegyik kompromisszumra készíti a fejlesztőt. Sokat elmond az egészről, hogy Ryan Dahl, a node.js megalkotója már a konkurens Go nyelvvel dolgozik.
A node.js stabilitásáról mindent elmond, hogy 2014-ben kettévált a fejlesztése, amelyek nem voltak teljesen kompatibilisek egymással. Bár egy év múlva egyesültek, nem tudhatjuk, mikor fog megtörténni ez az eset még egyszer. Innentől kezdve node.js-re építeni olyan, mintha valaki trágyadombra tervezne egy várat.
Mivel a webet a legtöbben php-ban programozzák, a node.js használatát is meg kell tanulniuk a fejlesztőknek. Nehezíti a dolgot, hogy még nem sok tárhelyszolgáltatónál van erre lehetőség, vagy pedig többet kell érte fizetni.
Így projektünkben egy függőséggel több lesz, ami a kiszolgáltatottságot növeli, nem beszélve arról, hogy ha magát az oldalt is javascriptben készítik el szerveroldalon.
Ehhez képest, ha megnézünk egy Angular vagy React példát, az eseménykezelők szépen visszacsúsztak, ismét keveredik a HTML és a viselkedés (mindkét linket a rendszerek saját tutorialjából vettem, azaz ez az alap működésük, nincs más választásunk).
Ez sok kérdést vet fel, például mennyire kell ezek után komolyan venni a szétválasztás elvét? Ha igazából nem is olyan fontos, akkor mi alapján lehet megitélni, hogy egy webfejlesztői elv mennyire komolyan veendő? Az épp aktuális divatirányzatok felülírhatnak bármit? Mennyire stabil ez a szakma ezek után?
Ebből következik, hogy mindig léteznie kell egy adatszetnek, amiből sablonozással a képernyőn megjelenő tartalomhoz szükséges HTML kódot elő lehet állítani – ezt hívják állapotnak.
Az állapot részei a kiírt adatok, de például az is, hogy ha van egy listám – amihez nem a natív
Ezt az állapotot a szerveren is tarthatom, így jóval megbízhatóbb lesz, mivel egy komoly bizonytalansági faktort egy kontrollált környezetbe tettem át. A szerverről pontosan tudom, hogyan működik, milyen szoftverek futnak rajta, tudom mérni a terhelését, bővíthetem, az egyes (szoftver) komponenseket lecserélhetem hatékonyabbra stb.
Egy ilyen egyszerű sablonozó rendszert pártíz kilobájtból össze lehet hozni, a mustache például 19 kilobájtos.
Ha mondjuk egyoldalas alkalmazást készítünk, akkor tipikusan annyi feladatunk van, hogy a DOM fát frissítjük (törlünk belőle, hozzáadunk elemeket, meglevőket átírjuk).
Ha az alkalmazás működéséből kivesszük a sablonozást, az eseménykezelést és a DOM fa frissítését a megfelelő adatokkal meg lehet oldani nagyjából öt-tíz kilobájt javascript kóddal.Ez a mondat azért csodálatos, mert benne van az önmaga cáfolata.
A kulcs az általam kiemelt "az most menő": egyrészt csak most menő, másrészt, ha belegondolunk, hogyan működik a divat, olyan, mint a tavaszi szellő, most itt van, egy év múlva más lesz a helyén.
Ebből következik, hogy erre építeni felelőtlenség. Ráadásul szerinte négy komponens használatát szükséges ahhoz megtanulni, hogy használható tudásunk legyen, ami rengeteg idő, amit a következő "menő" keretrendszer megjelenésénél dobhatunk a szemétbe.Ha a Működés fejezetben és a korábban leírtakból indulunk ki, akkor az, amit BlaZe ír, szakmailag megalapozatlan és rossz tanács, hisz akár öt-tíz kilobájtból ki lehet hozni egy teljes, szabványos sablonozó rendszert eseménykezeléssel és dinamikus frissítéssel. Ezt elég egyszer megírni, és utána nem kell hozzányúlni, ha szerveroldalon kezeljük az állapotot.
Szóval felmerül a kérdés, hogy a megrendelő érdeke, hogy az aktuális divatirányzatnak megfelelő rendszert választok? És ha két év múlva teljesen átírják? És ha jövőre egészen más lesz a menő?
Innentől kezdve ez az egész gyanús. Tisztelettel feltenném a kérdést, hogy a megrendelő abból él, hogy a weboldalának a fejlesztője élvezkedik, vagy pedig a produktumot használó felhasználók által közvetve vagy közvetlenül fizetett pénzből? Mert ha az utóbbi, akkor talán inkább az a legfontosabb, hogy minden felhasználóhoz, aki pénzt hoz, eljusson a tartalom és tudjon fizetni. Ha ez maradéktalanul teljesül, és a fentebb elmített legutolsó Androidos telefont használó sem fog továbbállni, mert az oldal gyors és nála is működik, akkor foglalkozhatunk azzal, hogy a fejlesztőknek is jó legyen. A webes programozás így is egy absztrakcióhalom teteje, amikor csak végtelenül egyszerű API-kat kell hívogatni, és nem kell foglalkozni azzal, hogy milyen bonyolult is valójában a helyzet.
Pontosabban egy valamiben azért jobb a helyzet, mint korábban: a fejlesztők már adatokban gondolkodnak.
■ Bizonytalanság
Ezek a keretrendszerek alapból kliensoldali sablonozást valósítanak meg, ami egy annyira abszurd ötlet, hogy gyakorlatilag ezen bukik el az egész, minden más csak hab a tortán.A működési elvük a következő: általában nyers adatforrásokkal (json) dolgoznak, amiket a kliens aktuális állapota alapján olvasnak be, majd átadják a sablonoknak, amikből végül HTML-t generálnak. A kulcs itt az, hogy az aktuális állapot (az esetek túlnyomó többségében) a kliensen van, amivel legalább két probléma van. Az egyik, hogy egy áramszünet vagy a böngésző bezárása/a lap újratöltése után ez az állapot elveszik. A másik, hogy nem veszik figyelembe az internet alaptörvényét.
Ezt az alaptörvényt Peter-Paul Koch, az egyik legismertebb frontendes így emeli ki:
The target environment is undefined. In most programming problems we start with with a well defined target environment (or at least the language semantics are well defined and we quickly learn where the platform-specific hacks are). In web programming each of the browsers is slightly different in about a hundred different ways.
Node egy Androidos böngésző ugyanolyan jó, mint a legújabb Chrome vagy Firefox? Ugyanúgy fog repeszteni? Ha a felhasználó számára lassú lesz az oldal, és emiatt otthagyja, az az ő baja, vagy a fejlesztő hibája? Ha utóbbi, akkor vállalja-e a felelősséget, és megtéríti-e a megrendelő kárát?
Nagyon jó példa erre a React 15.0 változási napló, melyben így fogalmaznak:
We are now using document.createElement instead of setting innerHTML when mounting components. This allows us to get rid of the data-reactid attribute on every node and make the DOM lighter. Using document.createElement is also faster in modern browsers
De ha a cél környezet undefined, akkor miért tárolunk ott állapotot? Ennél elborultabb ötlettel nem igazán jöhettek volna elő a kedves készítők.
Verziók
A React és Angular verziózása sem vetít előre semmi jót.A React a kisebb kaliberű, de bőven alkalmas az ember elbizonytalanítására. Kezdetben 0.x verziószámokat használtak, ami a konvenciók alapján azt jelenti, hogy ez egy béta minőségű szoftver, és várhatóan az 1.0-ban vált stabillá. Ehhez képest a 0.14.7 után 15.0-ra váltottak, ami ezer kérdést hoz maga után, például hogy akkor már a 0.14 is stabil volt? Vagy csak a 15.0 stabil? A 15.0 ungyanolyan stabil, mint a 0.14? Ekkora változás van a 0.14 és a 15.0 között? Van jelentősége a verziójuknak, vagy inkább csak azt méregetik, melyiküké hosszabb, az Angularé vagy a Reacté? Marketing az egész?
Az Angular 1.x és 2.0 közötti váltásról mindenki hallott már, aki foglalkozik a témával, röviden annyi, hogy az új verzióban mindent újraírtak, visszafele nem kompatibilis.
Ezek után nem lehet tudni, hogy mikor játsszák meg ugyanezt, mikor dobhatja ki a kukába az aktuális fejlesztését az adott cég, aki Angularra épít, mert ez utóbbi készítői rájönnek, hogy nagyon elrontottak valamit, és megint újraírják.
Aki az Angulart választja ezek után, az egészen biztosan ostoba.
Node...
Ezen keretrendszerek azt igérik, hogy segítségükkel felgyorsul a fejlesztés és akarbantartás. Viszont nem minden megrendelő webes alkalmazást szeretne, hanem egy átlag weboldalt, aminél fontos szempont, hogy a keresőkben jó helyezést érjenek el, amihez fontos, hogy legyen statikus HTML kimenet (is). Mivel ezeket a keretrendszereket javascriptben írták, szerveroldalon jelenleg csak node.js segítségével lehet ezt megvalósítani.Bár a javascript nagyon népszerű, a node.js-nél elcseszettebb programozási környezetet akarva sem lehet készíteni. Gyakorlatilag az első perctől azzal küzdenek, hogy a javascript nem arra lett kitalálva, amire ők használni szeretnék, lásd callback hell, amire máig n darab megoldás született, szabványt is módosítottak miatta, de mindegyik kompromisszumra készíti a fejlesztőt. Sokat elmond az egészről, hogy Ryan Dahl, a node.js megalkotója már a konkurens Go nyelvvel dolgozik.
A node.js stabilitásáról mindent elmond, hogy 2014-ben kettévált a fejlesztése, amelyek nem voltak teljesen kompatibilisek egymással. Bár egy év múlva egyesültek, nem tudhatjuk, mikor fog megtörténni ez az eset még egyszer. Innentől kezdve node.js-re építeni olyan, mintha valaki trágyadombra tervezne egy várat.
Mivel a webet a legtöbben php-ban programozzák, a node.js használatát is meg kell tanulniuk a fejlesztőknek. Nehezíti a dolgot, hogy még nem sok tárhelyszolgáltatónál van erre lehetőség, vagy pedig többet kell érte fizetni.
Így projektünkben egy függőséggel több lesz, ami a kiszolgáltatottságot növeli, nem beszélve arról, hogy ha magát az oldalt is javascriptben készítik el szerveroldalon.
Kavarodás
2004-2005 tájékán, amikor elkezdett elterjedni az XHTML, egy furcsa divat kezdte felütni magát, amit a weboldalakat táblázatok segítségével előállító munkások először nem értettek: a HTML-ben csak HTML legyen, a kinézetet a CSS fájlokban definiáljuk, míg a viselkedést a javascriptben. Például felejtsük el azonclick=""
attribútumokat, a <b></b>
tag-eket stb.Ehhez képest, ha megnézünk egy Angular vagy React példát, az eseménykezelők szépen visszacsúsztak, ismét keveredik a HTML és a viselkedés (mindkét linket a rendszerek saját tutorialjából vettem, azaz ez az alap működésük, nincs más választásunk).
Ez sok kérdést vet fel, például mennyire kell ezek után komolyan venni a szétválasztás elvét? Ha igazából nem is olyan fontos, akkor mi alapján lehet megitélni, hogy egy webfejlesztői elv mennyire komolyan veendő? Az épp aktuális divatirányzatok felülírhatnak bármit? Mennyire stabil ez a szakma ezek után?
HTML
Teljesen mindegy, mennyit bűvészkedünk, a végén, mivel böngészőben vagyunk, úgyis HTML-t kell írnunk, ha szeretnénk, hogy bármi megjelenjen a képernyőn.Ebből következik, hogy mindig léteznie kell egy adatszetnek, amiből sablonozással a képernyőn megjelenő tartalomhoz szükséges HTML kódot elő lehet állítani – ezt hívják állapotnak.
Az állapot részei a kiírt adatok, de például az is, hogy ha van egy listám – amihez nem a natív
<select>
elemet használom, hanem HTML-ben valósítottam meg –, és azt mondjuk lenyitom.Ezt az állapotot a szerveren is tarthatom, így jóval megbízhatóbb lesz, mivel egy komoly bizonytalansági faktort egy kontrollált környezetbe tettem át. A szerverről pontosan tudom, hogyan működik, milyen szoftverek futnak rajta, tudom mérni a terhelését, bővíthetem, az egyes (szoftver) komponenseket lecserélhetem hatékonyabbra stb.
Működés
Egy webes alkalmazás/weboldal működése végtelenül primitív.- Első lépésben a felhasználótól kapunk egy inputot: például kattint, beír egy szöveget, simogat.
- A második lépésben ezt feldolgozzuk, ami alapján változik az állapot.
- A harmadik lépésben ezen állapot alapján előállítjuk a HTML-t.
Egy ilyen egyszerű sablonozó rendszert pártíz kilobájtból össze lehet hozni, a mustache például 19 kilobájtos.
Ha mondjuk egyoldalas alkalmazást készítünk, akkor tipikusan annyi feladatunk van, hogy a DOM fát frissítjük (törlünk belőle, hozzáadunk elemeket, meglevőket átírjuk).
Ha az alkalmazás működéséből kivesszük a sablonozást, az eseménykezelést és a DOM fa frissítését a megfelelő adatokkal meg lehet oldani nagyjából öt-tíz kilobájt javascript kóddal.
Menő
janoszen a következőt fogalmazta meg arra a kérdésre, hogy kezdőként mivel érdemes foglalkozni:Ha én Te lennék, akkor most megpróbálnék egy React, Redux, React Router és webpack stacket összerakni és azzal munkát szerezni, az most menő.
A kulcs az általam kiemelt "az most menő": egyrészt csak most menő, másrészt, ha belegondolunk, hogyan működik a divat, olyan, mint a tavaszi szellő, most itt van, egy év múlva más lesz a helyén.
Ebből következik, hogy erre építeni felelőtlenség. Ráadásul szerinte négy komponens használatát szükséges ahhoz megtanulni, hogy használható tudásunk legyen, ami rengeteg idő, amit a következő "menő" keretrendszer megjelenésénél dobhatunk a szemétbe.
Megrendelő
BlaZe a fenti fórumtémában a következőket állította:Fizetést azért kapunk, mert értéket teremtünk a megrendelőnek, és azért kapunk magas fizetést, mert ezt hatékonyan (a pénzével optimálisan gazdálkodva) tesszük. Leveszem a polcról és használom a kb standardet, ezzel garantálom, hogy az utódom is érteni fog hozzá: ha lelépek, a megrendelőm/munkáltatóm minimális hiccuppal (elvárhatóan alacsony betanulási költség mellett) tud pótolni. VS saját hegesztett valami, amit csak te ismersz.
Szóval felmerül a kérdés, hogy a megrendelő érdeke, hogy az aktuális divatirányzatnak megfelelő rendszert választok? És ha két év múlva teljesen átírják? És ha jövőre egészen más lesz a menő?
Fán
Amikor utánaolvastam a fenti keretrendszereknek, több helyen is belebotlottam abba, hogy kifejlesztésüknél fontos szempont volt az őket használó programozó kényelme, hogy fun legyen velük dolgozni.Innentől kezdve ez az egész gyanús. Tisztelettel feltenném a kérdést, hogy a megrendelő abból él, hogy a weboldalának a fejlesztője élvezkedik, vagy pedig a produktumot használó felhasználók által közvetve vagy közvetlenül fizetett pénzből? Mert ha az utóbbi, akkor talán inkább az a legfontosabb, hogy minden felhasználóhoz, aki pénzt hoz, eljusson a tartalom és tudjon fizetni. Ha ez maradéktalanul teljesül, és a fentebb elmített legutolsó Androidos telefont használó sem fog továbbállni, mert az oldal gyors és nála is működik, akkor foglalkozhatunk azzal, hogy a fejlesztőknek is jó legyen. A webes programozás így is egy absztrakcióhalom teteje, amikor csak végtelenül egyszerű API-kat kell hívogatni, és nem kell foglalkozni azzal, hogy milyen bonyolult is valójában a helyzet.
Összegzés
A React és társainak választása minden szempontból hibás döntés, helyettük célszerűbb megismerni a böngészők működését, megtanulni a HTML, a CSS és a javascript használatát.Pontosabban egy valamiben azért jobb a helyzet, mint korábban: a fejlesztők már adatokban gondolkodnak.
Ha mar
Ami a React es tarsait illeti, fontos kulonbseget tenni akozott hogy mit szeretnel. Ha egy komplex alkalmazast keszitesz tobb szaz gombbal, tobb ezer beviteli mezovel, akkor kenytelen vagy egy react-szeru rendszert hasznalni, vagy sajatot kesziteni a szabvanyositas jegyeben. Ha mindenhol kezzel kezelsz mindent raw JS-ben, akkor az egy karbantarthatatlan katyvasz lesz. Ugyanakkor ha valaki egy bloghoz Reactot hasznal, akkor ott erosen megkerdojeleznem a dontesi kepessegeit.
Tévedsz
Ezzel szemben, ha van egy stabil JS tudásod, azzal tizenöt éve is el tudtál helyezkedni, meg ma is.
2, Nincs különbség egy többezer elemből álló alkalmazás és egy blog között. Semmi. Pontosan ugyanannyi meló egy tízezer elemből álló űrlapon frissíteni véletlenszerűen tízet, százat vagy ezret, mint egy darabot. Csak egy ötlet kell hozzá, és maga az algoritmus kevesebb, mint egy kilobájtos. Az Angular meg a React nagyjából egy megabájtos mérete az nem más, mint mellébeszélés.
Igy van
2. De van kulonbseg. Ha 5-10 urlapot kezelsz, teljesen mas strategiat fogsz valasztani az alkalmazasodra mint frontenden, mint backenden, mint 1000 urlapra. 1000 urlapnak sokkal jobban fogsz szabvanyositani mint 10 eseten. 10 eseten ugyanis eroforras pocsekolas, tok jol mukodi a dzsekverivel osszekokanyoljuk oszt jonapot megoldas. 1000-nel nem.
Es azt tessek megerteni, hogy itt nem a reactrol van szo, hanem arrol, hogy a domturkalast kell kiszervezni ha bonyolult a frontend logika. Tok mindegy mivel, de valamivel meg fogod csinalni.
Tévedsz
Ha Canvas-szel vagy SVG-vel játszol, az más tészta, és a téma szempontjából irreleváns.
2, Nincs különbség.
a, A legegyszerűbb weboldal is áll egy menüből és az aktuális menüponthoz tartozó tartalomból. Ha kapsz egy kérést, akkor át kell színezned az aktuális menüpontot, meg a tartalmat le kell cserélni. Azaz a belső állapotod egy darab mutató, méghozzá az aktuális menüpont azonosítója.
b, Ha egy ezerötszáz elemből álló űrlapon elvégzel egy műveletet, akkor változik mondjuk a kijelölt sor, a kijelölt elem, az aktuális sor tartalmát meg mondjuk újratöltöd. Itt a belső állapotot jelenti az űrlap, valamint a kijelölt sor és elem, esetleg a lista pozíciója.
Ha a belső állapotot ismered, bármikor újra tudod rajzolni az egészet. Innentől kezdve vissza van vezetve a feladat az a, pontra, tehát mindegy, hogy hány elem van a képernyőn és az állapot hány részből áll.
A kulcs a felbontásban van, hogy mekkora a legkisebb adategység, amit frissítesz. React-ben például alapból minden elemet frissít a rendszer, de ha azt szeretnéd, hogy csak a megváltozott elemek tartalma íródjon felül, neked kell a
shouldComponentUpdate
paramétert egyesével beállítani.Amíg állapotban gondolkodsz, nincs bonyolult frontend logika.
Most, ha a piacon vagy, akkor
Mivel ezek a teljes renderelési folyamatot lefedik, használójuknak nincs más dolga, mint javascript objektumokat manipulálni és API hívásokat indítani. Így elég hamar el lehet érni a határokat.
Az más kérdés, hogy ezzel most pénzt lehet keresni, mert akkora igény van rá. De az ilyen jellegű munkákat fogják a leghamarabb a mesterséges intelligenciával pótolni.
Egy bekezdésedre szeretnék
Problémának érzem sok más ember esetében is, hogy attól mert van egy menő , piacképes technológia, akkor mindenre azt kell használni. Az angular-t, react-ot, stb-t nem biztos, hogy keresőoptimalizációt igénylő oldalak fejlesztésére kell használni, mert preprenderelni kell, hogy legyen találat a kereséséi listákban, amit meg tudsz oldani nem csak node.js-el, de nem ez a lényeg.
Ezeket a keretrendszereket nyugodtan lehet használni WEBALKALMAZÁS és nem feltétlen WEBOLDAL fejlesztésre. Miért? Mert mélységekig dokumentálva, optimálisan és kellő támogatással rakja alád az összes olyan feature-t, amit te magad is lefejlesztesz, mert ELENGEDHETETLENÜL szükséges. Egy vállalati folyamatokat támogató webalkalmazást, amit 10-20 fő fejleszt és 10000 másik használ, szerintem manapság kész öngyilkosság bármiféle hasonló technológia nélkül készíteni, az ilyenre tök jó pl az angular is. Rengeteg időt és hiba lehetőséget spórolsz meg.
AJAX, nem AJAX... 21. században szerintem egy webalkalmazás ne menjen el a szerverhez HTML kódért. Miért az üzleti réteget terheljem HTML kód generálással?
+ 1
Vitatkoznék, hogy ki ér többet manapság: egy jó angular fejlesztő, vagy egy profi, aki érti, hogy működik a böngésző. Ha az angulart olyanok írták, akik értenek a böngészőkhöz (feltételezem, hogy igen), és egy fejlesztő az angulart úgy használja, ahogy kell, akkor az is úgy fog viselkedni, ahogy kell. Ettől függetlenül azért néhány dologgal természetesen minden frontendes legyen tisztában; de ha desktop .net appokat fejlesztenék sem érdekelne, hogy az operációs rendszer hogyan kezeli az egymásra dobált ablakokat.
Egy vállalati folyamatokat
Mint fentebb kifejtettem, ez
Nem csak a sablonozásról szól a React vagy Angular használata.
Hát, én nem szeretem szivatni saját magam :) Általában JS nélkül működni szerintem már rég nem elvárás, nem is igény, de nem is lehetőség.
Nem lenne egy hosszadalmas vita :)
Nem csak a sablonozásról szól
A JavaScript library for building user interfaces
Szerintem sablon != UI.
Tényleg
2 idézet tőled
Aztán idézel:
Majd jövök én:
És végül kérdezel:
Itt irod: "felhasználói felület" = UI; UI készítésre nyújtanak megoldást, de fent a sablonok problémájáról beszélsz, ami csak egy része az egésznek.
Pontosabban?
Véleményem szerint a sablon
Input
Mi ebben a kihívás?
Elkezdtem válaszolni a
Felhasználói felület
Erre írtam azt, hogy az input kezelése végtelenül egyszerű, mert nagyon kevés választási lehetőség van (kattintás, billentyűzés, valamint egy-két absztraktabb, mint a görgetés simogatással, ami visszavezethető a kattintásra), ráadásul az ember egyszerre csak egy helyre tud figyelni, egy diszkrét időpillanatban csak egy inputot tud adni.
Kérdés az, hogy a háttérben lévő alkalmazást és a felületet hogyan kell összekötni. Én azon az állásponton vagyok, hogy nem, és célszerűbb a böngészőt mint egy monitort felfogni, aminek semmi más dolga nincs, mint kirajzolni adatokat, de az összefüggéseket nem kell "fejben tartania".
Mi ezen az elven dolgozunk, és az általunk fejlesztett vállalatirányítási rendszerben például úgy cseréltük le a teljes raktár modult, hogy a klienshez nem kellett nyúlni, mivel az a lehető legbutább, és öt éve nem változott a kódja.
Ezért kérdeztem azt, hogy mi a kihívás egy ilyen keretrendszer elkészítésében, ha ennyire leegyszerűsítjük a dolgokat.
Ezzel szemben van az, hogy ha bizonyos állapotok kezelését áttesszük a kliensre, azonnal kiszámíthatatlanabbul kezd el viselkedni a rendszer, mert a cél környezet undefined. Tudod-e garantálni például, hogy a böngésző kihasználja a videokártya gyorsító képességeit?
Nem igazán jött le nekem,
undefined
Ha van egy millio inputod,
Igen tudom.. lehet iterálni, mert csak kulcs érték, stb, ugyanaz, mint 10 éve, de akkor is hibalehetőséget csökkentesz és rengeteg időt megspórolsz ezzel.
Végre valami, amiben egyet értünk.
Ez egy kiragadott szitu, de nem csak backend újraírásról szól minden fejlesztés. Elég durva kliens oldali funkciókat kell megvalósítani, pl. fanci felhasználói funkciók, ahol az az ominozus data binding is hatalmas help és tényleg rengeteg időt ment meg.
Nem. Nem is akarom.
Elég durva kliens oldali
A data binding szerintem túl van dimenzionálva, de erről majd később.
Tegyük fel, hogy van egy 1
Ez egy olyan rendszer, ahol sablon generálásnak backend oldalon semmi keresni valója nincs. A backend semmi mást nem kér és ad, mint JSON adatokat, amiket a frontend különböző dimenziókban és aspektusokban jelenít meg (táblázat, chart, lista, stb). A kliens oldali folyamat:
- szűrés beállít - egymástól függő dropdownok, megjelenő, eltűnő mezők, akár több lépésben anélkül, hogy elmennék a szerverig (2 mb az angular appom? már többet spóroltam vele, mintha 11-szer behúznám a 200kbos saját cuccot), pláne hogy a megjelenítésről gondoskodik az angular is angular komponensben tárolt állapot alapján - szerintem felhsználóbarát, gyorsan fut, gyorsan elkésztettem, hát nem nagyszerű? de
- GET kérés a szervernek - angularos http service, fain módon működik, jah, és nincs extra meló a filter objektum összeépítésével, hiszen ott van a komponensemben; ua. az objektum (optimálisabb esetben egy klónja a referenciák miatt), ami a felületre van rá bindolva, hát nem nagyszerű? de.
- JSON adat visszaküld - átadom egy megjelenítésért felelős komponesnek az objektumot, és már ott is van az adat a felületen
- Felhasználó nézetet váltogat - más nézetbe kerül át ugyanaz az adat, oldal újratöltés nélkül, nem írom le mégegyszer a fenti előnyöket, hát nem nagyszerű? de
Az üzleti folyamat backend oldalon van, a megjelenítés nem (mert nem oda való). A mai napon pedig tudom mi van kliens oldalon. Egy olyan böngésző (minden böngésző; ie8+), amivel normálisan működik az angular 1.x. Mégsem fut az oldal. Pech, tölts le egy új böngészőt. 1millió vs 100 felhasználó miatt nem szeretnék 10 évre visszamenőleg backward kompatibilis lenni. Miért? Mert nem éri meg. Saját keretrendszerrel is üzemelne így az oldal, csak épp 100ezer felhasználóval. Miért? Mert nem lenne kész annyi funkció, mint most.
Backendhez annyi infó: nincs session, JWT authentikáció van, a rendszer egy skálázható körnezetben fut, continious delivery működik.
Hát, nincs. Hogyan kell túl dimezionálni? Lenti példa, az igény: oldal újratöltés nélkül történjen bármi. Angularos példakód, nem teszteltem, de kéne működnie. Akuális állapot mindig ugyanaz lesz, mint ami az inputban van, a mentett állapot pedig egy clone, ami gombnyomásra állítodik be. Nah, ezt képzeld egy 20-szor ilyen bonyolult felületen, ahol függ egymástól minden.
Amit írsz, az több kérdést is
tisztán adatokkal (XML)
ha nem (pl. kereső), akkor HTML-t küld
a transzformáció ebből adódóan történhet bármelyik oldalon
Már több "if"-et látok, mint amennyi valóban indokolt volna.
Én viszont ott tartom, mert így tudok skálázódni.
Csak a megjelenítésé.
Úgy nézem ez egy fétis (bocs :)), viccet félre téve. Eszem ágában nincs kikapcsolni. Miért tenném? Kit szivatnék? Magam..
Itt már megint/még mindig két irányba mehet a dolog.
Ez mondjuk érv 2017-ben :)
Mi sem panaszkodhatunk.
Nézd, részemről már többször elhangzott, nem ugyanarról a problémáról beszélünk, tök mást kezelsz te és tök mást kezelek én. Ha megoldod úgy, ahogy eddig, akkor hajrá, senki nem állít meg, csináld úgy, ahogy jónak látod, lehet felesleges is volna esetedben bármi hasonló. Ettől függetlenül rajtam segített már rengeteget az angular és a react is. Sarkítok: két tutorial video kevés ahhoz, hogy közösség ellőtt kampányolj valami ellen, aminek az igazi értékeit nem is biztos, hogy ismered, mert nem használtad hosszú távon.
Ezt a képet még hadd linkeljem be :)..
Kép
Ugyanaz
Például értetlenül állsz a kikapcsolt JS előtt, hiába írtam le már sokszor, hogy a keresők tipikusan így működnek. Ha alkalmazást fejlesztesz, ez nyilván nem feltétlenül érdekes, de ha van olyan része, amelyet be kell indexelni, máris aktuális a dolog. Ha Angularra vagy React-re (stb.) épül a projekted, akkor nincs választás, a szerverre node.js-t kell telepíteni, míg az én megoldásom gyakorlatilag bármelyik programnyelvvel megvalósítható.
Ő a jobb skálázódásról beszél
Az elején valahol azzal
Telepített node.js-en kívül megoldja más is egyébként a prerenderelést.
Kliens
:D Mert natív appot kért az
Mert natív appot kért az ügyfél. Így férünk hozzá mobilos erőforrásokhoz. BLE-n kommunikál az IO eszközökkel, és fogadja a push üzeneteket.
Aha
Nah, ezt a választ vártam
Megint scope-ot váltunk. A mobil appba integrált webviews megoldásokkal mindaddig nincs gond, amíg gyakorlatilag egy webappot duplikálsz. Az egy dolog, hogy komolytalan látszatot keltenek, mert azért nah.. Ha valaki normális minőségű termékkel nyomul, amibe milliókat fektet, akkor jogos a natív app igénye.
Megint ugyanaz a kérdés: attól mert rendelkezésre áll egy technológia, nem azt jelenti, hogy onnantól kezdve csak azzal szükségszerű megoldani mindent. Lehet mobilappba webview-t tenni, de ez az én esetemben nem kielégítő, és nem jó választás.
A "sárácok, kéne egy eszköznyílvántartó alkalmazás az operatív osztálynak és egy mobil app a kollégáknak, hogy lássák milyen eszközöket használtak fel" jellegű kérésre eszembe nem jutna más kombó, mint egy frankó RESTful backend, és pl egy angular/react + cordova + ionic (vagy hasonló) kombó. Adatot tartok karban, és listát kérdezek le illetve jelenítem meg mobil appban.
Már látom magam előtt, ahogy beindulnak a fogaskerekek: "minek ehhez mobil app, stb..". Ezt még az egyel korábbihoz:
Nem az a lényeg... kérlek ne forgasd ki a szavaim szükségtelen kérdésekkel, példát hoztam fel ismét, de nem is értem miért próbálom megértetni, hogy van más is, ha egyszer nem szeretnéd befogadni a másik véleményét. Ha komolyan szeretnéd megérteni és megismerni mások álláspontját és/vagy érdeklődsz és legalább veszem a fáradságot, hogy ezen segítsek, akkor legalább releváns kérdéseket tegyél fel, ne out of scope baromságokat. (bocs...)
Jót beszélgettünk, köszönöm!
mindaddig nincs gond, amíg
Erre tökéletes a beágyazott webes kliens. Ráadásul, mivel vastag kliens elven dolgoztok, ezért ugyanazt a funkcionalitást le kell fejleszteni n darab platformra, itt összesen háromra, azaz a frontend háromszor annyiba kerül a megrendelőnek.
"jogos a natív app igénye" - miért? Őszintén örülnék egy szakmailag alátámasztott válasznak, mert én eddig még nem láttam ilyet.
Erre tökéletes a beágyazott
Érdekelne, hogy ezt honnan veszed, hogy egy mobil/tablet kliensnek ugyanúgy kell kinéznie és ugyanúgy kell működnie, mint egy asztalinak?
A NativeScript-et
Még nem, React Native-vel
Más trendeket kell követnie
A mobil app hasonló, de mégis más igényspecifikációval rendelkezik. Itt van az a pont, hogy hiába angular, a túl komplex és nagy mértékű frontend oldali elágazások növelik a komplexitást, ezzel a hibalehetőségek számát, meg minden mást is.. nem segítenek, hanem kell egy másik módszert választani, amivel hatékonyabban és jobb minőségben ki lehet vitelezni egy fejlesztést.
Ha agyon animált mobilapp kell az ügyfélnek, akkor megint nem jó választás egy kvázi hardveres gyorsítás nélküli megoldás. Igen, tudom, a canvas mobilon is az (ha egyáltalán a canvas kielégítő), de akkor is távolabb van a core-tól, mint egy androidos view.
Vitatkoznék, hogy ki ér
Tessék, itt a lehetőség, vitatkozz! Mi alapján feltételezed, hogy az Angulart olyanok írták, akik értenek a böngészőhöz? Miért volt szükség a teljes újraírásra az 1.x és a 2.0 között? Mi garantálja, hogy bármelyik következő verzióban nem írják újra megint az alapoktól?
Az Angular dokumentációja szerint
Ha megnézzük az Angular kezdőlapját, van rajta pár kép, pár szöveg, pár link. Ezek teljesen átlagos elemek, mégsem jelenik meg az oldal Opera 12 vagy Firefox 29 alatt, pedig ezek a böngészők ismerik a diveket meg a link tag-eket.
Tehát a kérdés az, hogy az Angular készítői valóban értenek a böngészőkhöz?
Fentebb írtam, hogy attól
Haladni kell a korral. Ez egy ilyen szakma.
Az angular fejlesztők biztosan értenek a dolgukhoz, úgy, mint Te is ahhoz, amit csinálsz. Köztünk és Google között az a különbség, hogy mi követjük a trendet, ők meg diktálják!
Kérdések
Ha abból az állításomból
Mert bloghoz ott a WordPress, egy custom admin alkalmazáshoz meg ott egy rakat angularos komponens, amiből töredék idő alatt lehet virítani, mint nulláról kódolni az egészet.
Azt jelenti, hogy nem ragadok le a múlt évtizednél, hanem hajlandó vagyok ádozatot hozni azért, hogy saját magamon segítsek.
Ők is haladtak a korral. Megcsinálták az 1.x-et. Rájöttek, hogy mit lehetett volna jobban, tanultak a hibáikból, és csináltak egy 2.0.
Mert bloghoz ott a WordPress,
Kérdezek, mielőtt válaszolnék
Mind
Milyen formában adod át a
Elmondom azt, amit a
Hány felhasználós
Vannak persze kivételek, ha pl szinkronizálni akarod a webshop kosarat két kliens gép között, amelyek ugyanahhoz a felhasználóhoz tartoznak. Viszont ilyen esetben már üzleti logikáról beszélünk, nem kliens állapotról.
Állapot a szerveren
Ha viszont kliensoldalon tárolod, ami definíció szerint undefined, akkor jelentősen nő az adatvesztés esélye.
A szinkronizáció bármilyen szolgáltatásnál fontos lehet, akár webshop esetében, akár pénzügyi műveleteknél. Minimális tárolandó adatmennyiségről van szó, de ez annál fontosabb, hogy ne veszhessen el.
A kevés adat miatt a szerver oldali overhead is elhanyagolható.
Minimális tárolandó
Mi annyira fontos a kliens állapotában, ami nem veszhet el? Egyébként ha a sok közül elszáll egy szerver gép, akkor ugrott egy rakás kliens munkamenete.
Ez felhasználó szám függő. Sok felhasználós rendszereknél nem működik az, amit írsz. Minél több a felhasználó, annál kevésbé működik.
Mi annyira fontos a kliens
Te szeretsz bármit is kétszer
Legtöbbször nekem sima HTML alapú fórumoknál volt ilyen, hogy kétszer kellett valamit begépelnem, azt hiszem iwiw-nél. Egy js kliens simán megoldja, hogy szerver hiba esetén újraküldi, ha meg van bármilyen tárolási mód kliens oldalon, akkor elmentheti a böngészőbe, esetleg ha az üzleti logika része a piszkozat készítés, akkor meg el lehet menteni a szerverre írás közben 5 percenként. Innentől nem sokat ér az érved.
Az üzemeltetés nem biztos, hogy mindig meg tudja oldani. Nagyobb kockázat valamit egy gépre rakni, mint szétosztani sok ezer gép között (single point of failure).
Az szerver és munkamenet méret függő. Próbáld ki szimulált felhasználókkal a kódod, aztán kiderül, hogy nálad mennyi. Lehet, hogy 1M, lehet, hogy 10k. Blaze tudna erre komolyabban válaszolni (ha akarna), ő már tesztelt ilyet. Igazából ha kis szerver gépekből csinálsz clustert, akkor már jelentkezik, tehát nem kell valami egetverően magas felhasználó szám. Ezért gondolom a legtöbben inkább vertikálisan skáláznak és erősebb gépet vesznek, hogy ne fussanak bele ilyenbe. Az egy gépes rendszerekre lennék kíváncsi, hogy azoknál mikor jelentkezik, azt nem tudom.
Én csak a válaszidő grafikon
Azt esetleg meg tudnád
Gépen belül is létezik shared
Lockolni (emlékeim szerint) azért lockol a PHP session default implementációja egy gép esetén is (flock), tehát a lockon egy találkozás mindenképpen negatív hatású a vesztes request(ek) kiszolgálására. Ha ez gyakran történik (pl sok AJAX call), akkor annak lehet akár egy komolyabb impactja. De önmagában egy flocktól én nem várnám, hogy dominálja egy átlagos PHP script lefutását. Ha kíváncsi vagy, egy JMeterrel pl neki lehet egyszerűen szaladni a problémának.
* Finomhangolt többszálú programoknál ez viszont nagyon is fókuszban van: léteznek rendszerek, ahol gyakorlatilag a lockolás tiltott még heapben lévő referencián is. Near realtime rendszerek tipikusan ilyenek (pl trading rendszerek fastpath-a).
Köszi!A real time vagy
A real time vagy ahhoz közeli alkalmazások fejlesztésével még nem foglalkoztam. Nézegettem real time Linux disztrókat, de egyelőre most nem cél, hogy ebbe is beletanuljak. Később esetleg hobbi szinten drón irányításra, ilyesmire elszórakoznék vele, de nem valószínű, hogy komolyabban kelleni fog valaha is.
RT kernel más téma kicsit.
(...) Innentől nem sokat ér
Mi az, hogy az üzemeltetés nem tudja megoldani az adatok biztonságos tárolását? Hisz az a dolga.
Ezzel a hozzászólásoddal most eléggé alacsonyra tetted a mércét.
Mi az, hogy az üzemeltetés
Absztrakció
És akkor visszakanyarodtunk
Fejlődés
De ha a te utadon járunk (amit csak lehet, toljunk a kliensre), akkor sosem oldjuk meg a helyzetet, és nem fejlődünk.
Szerintem ebben a szálban nem
Én nem mondtam, hogy mindent. Sőt, azt se mondtam, hogy mindig a kliensen kell tárolni a session infót. Te vagy, aki azt mondja, hogy ez nem elfogadható. Itt mindenki csak azt cáfolta, amit állítasz, mégpedig jó okkal.
A particionálás jó dolog, de nem silver bullet. Pl probáltál már joinolni shardok között?
Modern
Felsoroltam az ellenérveimet a React-tel és társaival kapcsolatban (erőforrásigényes, lassú, speciális tudást ad, a böngészők szűkebb körén működik, mint egy natív megoldás, nagyobb az adatvesztés lehetősége, instabil verziózás), azok közül egyiket sem cáfolta meg senki.
Nem próbáltam még shardok között joinolni, mert nálunk erre nincs szükség. Nyilván van, ahol ez probléma, de ez egy szűk kisebbség, hisz nem mindenki milliós ügyfélszámmal dolgozik.
sosem oldjuk meg a helyzetet,
[...]
Ami újabb, az egyértelműen jobb?
Nyilván azért fizetnek a
nem
nem
sosem írtam ilyet
Előfordul, hogy elszáll a RAID és nem sikerül rebuild-elni. A munkamenetek meg tipikusan nem olyan jellegű adatok, amikről 10 percenként backup készül. Jó esetben egyáltalán nem készül róluk backup, mert senkit nem érdekel hosszú távon, ha elveszik egy munkamenet. Szemben ha a kliensen tárolod őket, akkor nincs ilyen probléma, mert csak a kliens gép elszállása, ami miatt elveszik egy munkamenet, a többi kliens meg boldog, mert nem veszik el a munkamenetük a session-ök tárolását végző gép(ek) hibája miatt, és a HTTP szerver is boldog, hogy nem kell stateful request-eket teljesítenie, és kikerestetni a több millió munkamenet közül, hogy melyik a felhasználójé, mert megkapja a kérés kiszolgálásához szükséges adatokat a klienstől a kéréssel együtt. A másik előnye ennek a megközelítésnek (amiről már szó volt), hogy nem kell erőforrásokat lockolni, hogy beírj egy munkamenetbe, és így növekvő munkamenet szám mellett sincs olyan probléma, hogy a lockok miatt lassulna a kiszolgálás, esetleg megrogyna a szerver túl sok kliens esetén. De tulajdonképp teljesen mindegy, hogy milyen érveket írunk, amikor write only módban vagy.
A mércét sajnos nem én tettem alacsonyra, hanem Ádám, amikor nem bannolt ki már 10 éve, amikor elkezdted széttrollkodni ezt az oldalt.
+1
Nekem vannak ötleteim
szerk:
Közben eszembe jutott, hogy nem lehet lemondani a szerzői jogról, tehát jogilag semmi akadálya az innen történő importálásnak amennyiben a cikk szerzője ehhez hozzájárul.
Közösség
A közösség az aktuális divatirányzatoknak megfelelően moderál. Ha mindig csak a magad igazát szeretnéd hallgatni, akkor egyszerűbb, ha alapítasz egy vallást, és megteszed magad főpapnak.
Minden más helyen találkozhatsz olyan véleményekkel, amik nem egyeznek a tieddel. Kitiltani internetes fórumról bárkit is nem túl hatékony döntés, hisz úgyis bármikor visszamegy.
Egy időben divat volt például személyreszabott tartalmat vagy reklámot adni az embereknek, csak aztán rájöttek, hogy ez nem túl hatékony, mert egysíkúvá válik a gondolkodás. Szóval szerintem érdemes meghallgatni a más véleményeket is, mert tanulhatunk belőle.
Felnevettem, mikor ezt
Bocs, nem bántani akarlak, tényleg, csak simán vicces :D.
Tényleg az. :D
Nemtom eldönteni hogy sírjak
A projekt érdekesen hangzik.
Én nem sietek, ha 10 évig
Nagyjából belenéztem a várható látogatottságba, üzemeltetési költségbe, reklámbevételbe, és csak úgy tudnám bevállalni a közös fejlesztést, hogy karitatív alapon megy mindenkitől. A fejlesztési költségek valószínűleg egyébként sosem térülnének meg, kivéve talán, ha valamit egy CMS-ben 1 nap alatt tákolnánk össze. Igazából nem is a fejlesztés a neheze a dolognak, mert azzal boldogulok egyedül is, ha muszáj. Inkább azt kéne átbeszélni egy arra való felületen, hogy mi miatt csődölt be a mostani oldal, és mik a megoldások ezekre a problémákra. A válaszokból nagyjából lejönne, hogy milyen feature-ök kellenek az oldalra, és az alapján már lehet fejleszteni. Erre mi lenne a legalkalmasabb felület szerinted? Lehetne google groups-ot csinálni és email-ben megvitatni, vagy még az jutott eszembe, hogy a feature-öknek csinálok egy git repo-t, a hozzá való gitter-en, esetleg issues-ban meg lehet vitatkozni a feature-ökről. Nekem egyébként az utóbbi szimpatikusabb, nem bírom a levél özönt...
A levélözönre én se vágyom.
Egyelőre csináltam neki egy
Személy szerint a következő hónapban kezdek el összerakni egy hasonló taggelős keresős rendszert itthoni használatra. Az jó kiindulási alap, ha elkészül, és úgyis kell néhány hónap, mire átbeszéljük, hogy pontosan mit is akarunk, van e egyáltalán értelme, stb.
Bár nem vagyok címeres tag,
- Lean canvas
- Business Model Canvas
Röviden, tömören
Amiért nekem tetszik: Minden héten legalább kétszer kitalálom a világ megváltó ötletet, és mielőtt bármibe is belefognék, csinálok egy canvast (az ötlettől függően a kettő közül a relevánsabbikat választom). A canvas készítése közben, ami adot esetben egy kevés kutató munkát is iégnyel:
- általában letisztul az elképzelésem
- összeszedem minden gondolatom
- kiderül, hogy 60 ugyanilyen megoldás létezik már
- semmi értelme az ötletnek
- nem is létezik a probléma
- nincs célközönség
stb, stb. Ha nem sikerül egy épkézláb canvast összerakni, akkor nem is érdemes beszélni következő lépésről.
Köszi, ránézek.
Hát ez el fog tartani egy
Én nem olvastam el semmi
Én már elkezdtem olvasni a
Gyere
Állapot vs skálázódás
A gyakorlatban ez globális szolgáltatáskiesést jelent. Vagyis az egyes történelem előtti eszközöket használó kliensek (de mindenképpen egy kisebbség) számára tapasztalható kellemetlenségeket átkonvertáltad egy globális, mindenkit érintő kockázattá, és problémává.
Léteznek módszerek ennek a problémának a kezelésére - pl particionálás -, de egyrészt minden problémát jobb elkerülni, mint kezelni, másrészt azok költsége (hardware, fejlesztői bér és üzemeltetés) és komplexitása messze lekörözi a kliens állapot kliensen történő menedzselésének költségét és kockázatát. Ezt kell megérteni. Hogy a kliens állapotot normálisan kezelni nem képes böngészőt használó felhasználók kedvéért alternatív megoldásokat szükséges-e kialakítani, az egy üzleti döntés, nem pedig IT.
Nagyon érintőlegesen kapcsolódó téma, de jól érzékelteti mennyire kritikus a skálázódási képesség, illetve az informatikai háttérrendszer cégműködésre való hatása: 2018-tól a szabályozók előírják a befektetési cégeknek (bankok, egyéb piacon jelenlévő cégek), hogy a megrendeléseket kezelő rendszereik a mindenkor rögzített legnagyobb másodpercenkénti loadjuk kétszeresét képesek kell legyenek kezelni rendszerleállás, data corruption, adatvesztés stb nélkül. Aki ezt nem tudja, kb lehúzhatja a rolót. Nincs ez másként egy egységsugarú webshopnál sem, csak nincs rajtuk akkora szabályozói nyomás ebben a tekintetben, mint a befektetési szolgáltató cégeken. Úgyhogy ez a "nincs még akkora a terhelésem, hogy ilyenekkel kelljen foglalkoznom" eléggé megkérdőjelezhető megközelítés. Nem kell egyből geo redundáns rendszerekben gondolkodni, de a skálázódási képesség benne kell legyen képletben. A skálázódási képesség a kulcsa egy cég növekedésének. Egy informatikai rendszerekből élő cégnél ez pedig egyértelműen az IT skálázódás képessége. Az IT skálázódás pedig a konkurensen hozzáférhető shared állapot lehetőség szerinti elkerüléséről, és minél inkább a stateless service-ek irányába tolódásáról szól (amennyire lehet). Weben erre egy kézenfekvő megoldás a kliens állapotát a kliensen tartani a szerveroldal helyett.
Hogy hány byte, amit mozgatni kell a gépek között, az már egy következő kérdés. Fontosabb, hogy kell-e, ha nem muszáj.
Teljes mértékben egyetértek,
Skála
Ez engem erősen az amatőr programozó első tipikus hibájára, az előre optimalizálásra emlékeztet.
Értem, tehát azért, mert
1) Nem, és nem is kell akkorák legyenek. BTW nálunk ez nem egy sokszáz gépből álló webes clusterben jön elő, hanem JMS brókerre publikálásnál.
2-3) Ezekre kitértem az előző hozzászólásomban. Pl angulart ismerő frontendest találsz sokat. Olyat, aki fel tud építeni egy masszívan skálázódó backendet már nehezebben, drágábban. Nem beszélve a fent említett egyéb költségekről.
4) Melyik az a bármilyen evolúciós állapotban lévő cég, amelyik megengedhet magának egy globális szolgáltatáskiesést, vagy összes felhasználót érintő belassulást? Jobb az, mint egy egy klienst érintő esetleges adatvesztés?
5) Kliensen nem kell skálázódni, pont ez a lényeg. Vannak erősebb, meg gyengébb gépek. De egy JS oldal kiszolgálásához nem kell 140W TDP-s i7 :) Nekem eldöcögnek simán az atom procis tabletemen, 5 éves telefonomon is.
Szilánk
Valóban, ezt írtam is
Az van, hogy a lockolás egy sorosító művelet az ugyanazon erőforráshoz hozzáférni kívánó rendszerek számára, illetve egy queuen keresztül idegen processek késleltetésének költségét kell megfizetni akkor is, ha különböző erőforrást szeretnének az egyes processek lockolni, de ugyanazon a lock manageren. Tévedés, hogy ez mindent megold varázsütésre.
Annyira nem bonyolult
Szóval nekünk sikerült, és ezt megosztom, hátha más is profitálhat belőle.
Gondolom majd ha beüt egy
Ez nem elosztott rendszer,
Szerintem nem kell teljesen
Ilyenkor persze a szerver oldalra teszik át a klienst és ugyanazzal a REST API-val fog kommunikálni, mint a JS-es kliens azzal szemben, amit Gábor ír. Az ő változata tipikusan 1 szerveres rendszerekre működőképes.
Miben segítettél magadon? Van
Tanultam. Rengeteget. Kész komponensekből dolgoztam, és mindig kerestem a jobbat. Nem állok neki lefejleszteni azt, ami már kész. Rengeteg időt spóroltam, így a végtermék tökéletesítésére tudtam mindig fordítani az időt, ahelyett datepickert írnék.
Semmi. És elég szomorú lenne, ha megelégedetten állnék 3 év után is a munkám előtt. Ez részemről azt jelenti, hogy nem fejelődök semmit. Mindig az újat és a jobbat keresem, nem elégszem meg azzal, ami rég volt. Így tesznek ők is (mármint az angularosok). Van jobb ötlet és koncepció a jelnleginél? Igen? Akkor hajrá!
Provokatív kérdések
Tanultam. Rengeteget. Kész komponensekből dolgoztam, és mindig kerestem a jobbat. Nem állok neki lefejleszteni azt, ami már kész. Rengeteg időt spóroltam, így a végtermék tökéletesítésére tudtam mindig fordítani az időt, ahelyett datepickert írnék.
Semmi. És elég szomorú lenne, ha megelégedetten állnék 3 év után is a munkám előtt. Ez részemről azt jelenti, hogy nem fejelődök semmit. Mindig az újat és a jobbat keresem, nem elégszem meg azzal, ami rég volt. Így tesznek ők is (mármint az angularosok). Van jobb ötlet és koncepció a jelnleginél? Igen? Akkor hajrá!
Szóval értem én, hogy tanultál, de az utóbbi tíz évben egy csomó időd elment az Angularra, hónapok, akár évek, amíg megtanultad, hogyan kell kezelni, mik a buktatók stb. Közben kénytelen voltál kidobni a korábbi komponenseket.
Ez idő alatt én például a meglevőket tudtam csiszolni. Ha úgy vesszük, minimum annyi előnyöm van, az a pár hónap vagy év, amit te az Angularra szántál. Miben jobb az, amit most te csinálsz? Hatékonyabb? Gyorsabb?
Tehát mit tanultál és miben lettél jobb?
Értem, tehát volt egy
Ezen a szinten saját komponens készletem soha nem volt. Minek is kellett volna, mikor ott volt a rengeteg bejáratott cucc, közösséggel a háta mögött. Tehát, nem dobtam el semmit az angular miatt. Megtanultam hatékonyan használni az újdonságokat, amivel mérhető mennyiségű időt, pénzt és energiát spóroltam meg, nem csak magamnak.
Én nem az egyetlen sajátomat használom, hanem kategóriájában az X darab komponens közül kipróbálok párat - ha nincs egy mindig használatos, jól bevált valami, és a relevánsabbat integrálom, ha kell felülethez igazítom. Bower és/vagy npm package már van mindenhez, így még a verziókezelésről sem kell gondoskodnom.
A szép az egészben az, hogy nem kellenek hónapok, évek, hogy megtanuld használni, elég hozzá pár hét max 1-2 hónap egy projecten.
- plusz egy sor a CV-ben
- mérhetően gyorsabban és profibban lehet dolgozni angularral, mint saját kóddal, ha csak a data binding funkciója lenne az egyedüli, már megérte volna használni
- milyen kontextusban gyorsabb? Gyorsabban lehet vele haladni; nem biztos, hogy gyorsabb, de az sem, hogy lassabb egy nem angularos/reactos alkalmazáshoz képest
- reguláris és publikus a működése, ezáltal olyan lehetőségeket ad, amit saját rendszerrel nem bizots, hogy megoldasz (pl.: react native; közös core-t tudsz csinálni a web alkalmazásodnak, és a mobil alkalmazásodnak)
- új csapattag esetén nem kell oktatást tartanom a saját rendszerről
Szumma szumma, én sírva fakadok a tavaly előtti kódomtól is, és két év múlva is sírva fogok fakadni a mostani megoldásaimon. Miért? Mert mindig lehet jobban csinálni!
Az alábbi tények közül most
1) A mindenkori legkeresettebb framework-ök technológiák
1/a) ismerete növeli a fejlesztő piaci értékét
1/b) alkalmazása nagyban megkönnyíti egy projecten a kieső erőforrás pótlását
2) Saját cucc lefejlesztése, tesztelése, javítása, továbbfejlesztése, betanítása nagyságrendileg több ideig tart, mint polcról levenni egy mindenki által ismert megoldást
3) Nagyságrendileg több idő nagyságrendileg több pénzébe kerül a megrendelőnek
4) Belső framework betanítása minden egyes new joinernél növeli a ramp-up idejét, ezzel költségét
5) Belső framework tudást a programozó nem tud továbbvinni következő munkahelyére, ezért az nem igazán javítja a munkaerőpiaci pozícióját
6) Az a project, ami nem javítja a munkaerőpiaci pozíciót
6/a) kevésbé keresett a fejlesztők részéről, ezért nehezebb, költségesebb a staffing (nem kicsit)
6/b) magas fluktuációval kénytelen számolni
A hatos ponthoz hozzátenném, hogy egy alkalmazott pótlásának költsége átlagosan a 7-8 havi munkabérével egyezik meg. Az erőforráshiány okozta költség adott esetben pedig minden hónapban a hiányzó kolléga bérének többszöröse.
Ezek egyike se az én személyes véleményem, hanem tények. Továbbá vedd észre, hogy ebben egy betű technikai tartalom sincs. Ha már szakmailag megalapozatlan az a pár mondat, amit idéztél tőlem :)
Állapot a szerveren: dolgoztál már elosztott, konkurens rendszereken? Tudod, hogy a webes alkalmazások többsége ilyen (skálázás, load balancing, HA, redundancia)? És hogy a szerveroldali állapotot irtani próbálja mindenki, mert akkora probléma?
A demagógia eszközei: mind pipa :)
Érvek?
Akkor nézzük tételesen:
1, Ha elolvasod és átgondolod a "HTML" és "Működés" fejezeteket, akkor nyilvánvaló lesz, hogy a webes fejlesztést framework-ök nélkül az esetek 99%-ában el lehet végezni.
2, 3, 4, 5, 6, Ugyancsak a "Működés"-ben fejtem ki, hogy a kész sablonok alapján (a sablonozáshoz vannak kész eszközök, ezeket is felsoroltam) a megfelelő DOM részek cseréje pár kilobájtnyi kódból megoldható. Ennyi kód elkészítése, karbantartása és betanítása gyakorlatilag nulla egy cég életében.
Amit írsz, nem csak szakmailag, hanem üzletileg is megalapozatlan, az alatta lévő bekezdésben kifejtettek miatt. A frontend nem a megrendelőnek dolgozik, hanem a felhasználóknak. Az, hogy ebből a megrendelő profitál, a munka következmény, de nem oka.
Inkább toljunk mindent a kliensre, ami definíció szerint undefined? Azaz fogalmunk sincs, mi van ott, egy teljesen kontrollálatlan környezet. Már a backend is ekkora bajban van?
HG, az az igazság, hogy
Szakmailag akkor vagy vitaképes technológiák összehasonlításában, ha mindkettő mellett és ellen is képes vagy érvelni, ismered mindkettő előnyeit és hatrányait, ha tudsz értelmes példákat hozni rá mikor melyiket használnád. Lásd janoszen válaszát példának. Ez nálad teljesen hiányzik, kizárólag valami ellen vagy hajlandó véleményt formálni.
Konkrétan a kontextusából kiragadtad, amit janoszen és én is írtunk, majd közölted, hogy azok hülyeségek. És amikor az ember visszarakja kontextusba a saját irományát, akkor közlöd, hogy nem arra kaptál választ, amit írtál. Hát sorry, akkor nem kellett volna más kontextusban idézni, és hülyeségnek beállítani.
Amiket pontokba szedve írtam, azokkal is vitatkozol. Holott aki valamennyire is rálát a munkaerőpiacra, azok számára ezek alighanem alapvetések. Én csak idén két olyan jelöltet interjúztam, akik azért hagyták ott az egyik legjobban fizető, és legnevesebb itthoni céget, mert csak ott használható technológiákat kell megtanulni, és úgy érzik csökkent a job market pozíciójuk. Volt is benne valami.
A backend állapottal kapcsolatban meg ajánlom olvass kicsit a software architektúrákról.
A Weblabor állapota 2017-ben
Sajnos. :D Nem is értem miért
Kamikaze
Ezzel a tagmondattal nálunk egyenesen lehülyézted a teljes cégvezetést és az összes fejlesztőt, úgyhogy ne küldj önéletrajzot. :-D
Viccet félretéve: ha egy cég megfinanszírozza, hogy egy nagyon komplex webalkalmazás teljes frontendjét kb 6 fejlesztő kb 1 év(!) alatt újraírja React alatt, akkor csak nem olyan rossz az a cucc.. És elég sok ilyen van, nem mi egyedül.
Nyilván a Manyika néni őstermelőt bemutató 3 statikus html-ből álló weboldalt kár lenne React v Angular FE - el ellátni. De nem csak ilyen oldalak vannak.
Tisztelet
Ezzel a tagmondattal nálunk egyenesen lehülyézted a teljes cégvezetést és az összes fejlesztőt, úgyhogy ne küldj önéletrajzot
Az egyébként törvényszerű, hogy van egy cégvezetés meg egy rakás frontend kollega, és ők mindig jó döntéseket hoznak?
cáfolni..
2. Nem nekünk / bárkinek kell cáfolni a Te állításaid, hanem neked kéne kellően alátámasztani, mert Te állítasz olyanokat, amivel eddig senki sem ért egyet.
Egyébként saját magad hozod kellemetlen helyzetbe, ha mindent így próbálsz kifordítani. Szó sem volt "párhuzamos" jóváhagyásról. :)
Vagy esetleg Te egy előfizetős szolgáltatást, amit jópár előfizető használ és sok pénzt keres vele, beszüntetnél 1 évre azért, mert új frontend technológiára váltasz? :-D
Ha nem, akkor bizony előfordul, hogy "van még a régiből, míg készül az új".
De egyrészt, ha a cégvezető(k) tulajdonos is, akkor marha egyszerűen úgy is lehet közelíteni a kérdéshez, hogy "az ő pénze, ha azt akarja, akkor még egy statikus oldal is react-es lesz". Nálunk mondjuk ez nem így van, több ember egyetértése volt ez a döntés (is).
Másrészt amíg sok (legtöbb) technológiai és üzleti tényt egyszerűen divatnak nevezel és köpködsz rá, hogy "fúj de ördögtől való", addig semmi értelme veled erről vitatkozni. Nem is akarod érteni, hogy az a döntés miért lehet jó.
Az egyik, hogy egy áramszünet
Nem feltétlen ha localstorage-be mentik. Alapvetően az nem gond, ha a munkamenetet a kliensre viszik át, sőt nagy oldalaknál egyenesen kötelező a jobb skálázódás miatt. Azzal lehet probléma, ha túl sok ideig nem történik szinkronizálás a szerverrel, és így egy 10 perces írás elveszik, vagy hasonlók.
Ezt nem hiszem, hogy a fejlesztő dolga lenne eldönteni. A megrendelőnek persze fel lehet ajánlani, hogy mobilra meg ie6-ra is optimalizálod az oldalt felárért.
Ez bármilyen szoftverre igaz, felesleges ezen rugózni. A kliens oldalon nem hiszem, hogy annyira számítana, hogy hányas verzióval csinálták meg a GUI-t, a szoftver frissítés biztonsági javításoknál kötelező jellegű csak.
Senki sem mondta, hogy aszinkron kódot fejleszteni nem jár kompromisszumokkal. Egyébként a szabvány módosításokkal részemről megoldódott a probléma, elég jól használható, én sem tákolom tovább a saját megoldásomat a témában. Szerintem inkább a közösség erősségét mutatja, hogy félre tudták tenni a nézeteltéréseiket és újra egyesült a két projekt. Nyilván sosem lesz egy java, de nem is az a cél ezzel a nyelvvel. Egyébként hogy jön ez a kliens oldalhoz?
Nem vagy te egy kicsit paranoiás, hogy minden külső függőségtől meg akarsz szabadulni? Persze projekttől függően érdemes mérlegelni, hogy mi az, ami belefér, és mi az, ami nem, de a legtöbb projekt nem az a szint, aminél ne lehetne bármelyik komolyabb keretrendszert vagy programnyelvet használni. Nem banki vagy nemzetbiztonsági szoftvert fejlesztünk.
Ezt én sem feltétlenül tartom jónak.
Ha ez kritikus az üzlet szempontjából (pl statisztikát készítesz róla), akkor persze lehet a szerveren tárolni az állapotnak ezt a részét, de tipikusan ez a kliensre tartozik, és semmi köze a szervernek ahhoz, hogy egy listában ki hogyan próbál éppen választani. Egy bizonyos látogató szám felett pedig a szervert kinyírja az ebből fakadó többlet terhelés.
Ahogy nézem még mindig az XSLT-re pörögtél rá. Ha jól skálázódó oldalt akarsz vele, akkor tárold cookie-ban a kliens állapotát, ahonnan a szerver is ki tudja olvasni, és bele tudja írni az adat modelbe, ami alapján sablonozol. A másik megoldás, hogy rejtett űrlap mezőkbe teszed minden űrlapnál ezeket az adatokat. A lényeg, hogy nem tárolhatod szerveren, hanem minden kéréssel el kell mennie a szervernek amire szüksége van belőle.
Nem feltétlenül 1 év múlva, de 2-3 év alatt azért megfordulhat a világ. Egy komoly fejlesztő alkalmazkodni szokott ehhez, és megtanulja az új dolgok használatát. Én komolytalannak számítok, mert a react és az angular is hidegen hagynak és sikítva menekülök ha kliens oldali fejlesztésről van szó. Egyszerűen elegem lett abból, hogy a 20 év alatt, amióta követem a kliens oldali dolgokat nem sikerült megoldani, hogy egy-egy feature ugyanúgy működjön minden böngészőben. Ennek persze részben az is az oka, hogy a böngésző fejlesztők versenyeznek egymással, és új feature-öket alkotnak, néha ugyanazt egymással párhuzamosan, a szabványosítók meg sok évvel mögöttük kullognak. Szerintem sosem fog változni a helyzet, nem látok megoldást erre a problémára.
Az új keretrendszereknél lehet mérlegelni, hogy kell e ez neked, nem muszáj felülni a hype vonatra. Ha nem látod semmi előnyét és a réginél megmaradt a support, javítják a hibákat, akkor nyugodtan lehet maradni a réginél.
Ha vanilla js-ben jó, akkor írd meg abban, de ha sokféle böngészőt akarsz támogatni, akkor előbb utóbb ott kötsz ki, hogy egy saját keretrendszert írsz, tehát újra feltalálod a kereket és egy csomó időt és pénzt áldozol arra, amit elég lenne letölteni a githubról és használni. Persze, ha neked ez a hobbid, hogy keretrendszereket írj (nekem pl az volt egy ideig), akkor csináld nyugodtan, csak ezt nem szabad összekeverni az üzletnek azon részével, ami arról szól, hogy gyorsan összeszórsz valamit kész keretrendszerekkel, ami kielégíti az ügyfél igényeit. Az esetek 99.9%-a ilyen fejlesztés, a maradékot, ahol nem lehet külső függőség, mert kockázatot jelent, azt meg úgyis haverék cégére bízzák.
Amit addig tanultál nem felejted el addig, nyugodtan fejlesztheted tovább az extra feature-ökkel az oldalt a régi keretrendszerrel. Egy időt után meg úgyis jön az arculatváltás, mert az újabb a jobb a vásárlók szerint is, azt meg már csinálhatod az új keretrendszerrel.
Pontosabban egy valamiben azért jobb a helyzet, mint korábban: a fejlesztők már adatokban gondolkodnak.
Én úgy gondolom, hogy első a HTML, CSS és vanilla JS legalább alap szinten. Ha már az alapokkal tisztában vannak, akkor lehet elgondolkodni azon, hogy van e értelme egyik vagy másik keretrendszer használatának, és hogy könnyebbé teszi e a munkájukat. Sok esetben igen, más esetben felesleges az általuk nyújtott absztrakció, és csak overengineering feeling-je van a dolognak. Kell valamekkora tapasztalat, hogy fel tudja mérni az ember, mire van szüksége a fejlesztéshez.
Én személy szerint ha megjelenik egy agyonhypeolt új technológia, akkor mindig megnézem, hogy nekem erre szükségem van e, vagy hogy miben könnyítené meg a munkámat, és az alapján döntök, nem amiatt választok egy keretrendszert egy projekthez, mert valaki azt mondja, hogy most éppen ez a divat. A dolog másik oldala, hogy az éppen divatos rendszerekre van a legtöbb munka, szóval ha állást keresel vagy nem te mondod meg, hogy mit használsz, hanem a főnököd a cégnél, akkor jobb ismerni őket. Nem minden esetben te vezeted a projektet, vagy tudod meggyőzni a projekt vezetőjét arról, ami szerinted a legjobb lenne, és ha alkalmazott vagy, esetleg éppen állást keresel, akkor vagy alkalmazkodsz, vagy kénytelen leszel másik szakmát választani.
Én itt részemről befejeztem a flame wart, inkább másra fordítom az energiákat, amit erre pazarolnék.
Dolgozol azt veszel
Verziók: Az angular 2 igazából 4-es verizó :D
2.4 után ugrottak feljebb megintcsak minorról majorra. Ez a lifecyclek rövidítése miatt történik, ígéretek szerintem sokkal nagyobb major verzió updatek lesznek ritkábban. Legalábbis angular ezzel indokolt, így gondolom nem lesz React 37 decemberre.
Node: Ezt a szerveres js motiváció hozta, aztán lehetetett a fájlokkal manipulálni, így egy rakás korábbi vergődős lib-et leváltották a build toolok. Ha már a szimpla sarki fűszeres website, akkor is jobban szeretek sass-al dolgozni, mert nem kell annyit pötyögni. Az pedig nem volt egy nagy élmény mikor licencelhettük a compass-t erre... Aztán hogy ez deploy-ra már csak sima css megy ki, rendben van, nem kötelező szerveren buildelni.
Kavarodás: Némileg félreérthető, de itt az onClick nem a klasszikus html onclick. "Unlike browser DOM elements, React elements are plain objects". Vue-nál pl @click, angularnál (click) stb...
Menő: Ezt szerintem félreérted a hozzászólásból, meg nyilván a neve miatt pukkasztó jelző. A menő itt azt jelenti hogy a cégek ezzel foglalkoznak, azaz a dolgozóik is. Tehát ha vki jelentkezik egy állásra, azzal nem sokra megy ha fejből felmondja a w3c-t. Aktív futó projektek vannak, jön a kolléga és örülünk ha minél gyorsabban bele tud kezdeni az angularos/react/vue stb. projektbe. Jó dolog a jquery meg a vanilla js, de egy agyvérzés esélyes ha azzal próbálkoznánk a legtöbb esetben. Mint írtad, a termék leszállítása a cél, időre. Ezek a toolok pedig ebben segítenek.
Összeségében:
Értem én mire gondolsz és jobb (vagy legalábbis egyszerűbb) hely volt a web. Az hogy új dolgok jönnek ki, új eszközök nem egyenértékű hogy át kell állni, meg hogy újra kell írni, csak azért mert fun. Vannak akik üldözik a hype-ot, és mindent minden héten újra akarnak írni, új tool, új language stb. Ők a legtöbb esetben kevésbé produktívak, de ismeretük széles.
De ami elterjedt fejlesztő cégeknél, azzal egy elhelyezkedni kívánó embernek ajánlott foglalkoznia, tanulnia. Így kap munkát, megélhetést.
Köszönöm a választ
Fejlesztői szempontból okozhat problémát, lásd fentiek, de szerintem ez hozzáállás kérdése, és aki akarja, meg tudja oldani.
Angular: kettes vagy négyes, teljesen mindegy. Igérhetnek bármit, de sosem tudod, hogy mikor lesz akkora váltás, mint az egyes és a kettes között. Egyszer megcsinálták, ez előfordulhat akármikor. Innentől kezdve erre építeni hazárdjáték, és egy normális cégvezető sem engedi meg, ha normálisan van tájékoztatva.
CSS: nekem sosem volt szükségem semmilyen külső eszközre a CSS-eim elkészítéséhez, pedig vettem már rész jópár nagy projektben. A kulcs, hogy az ember a lehető legegyszerűbb kódot írja meg. Így a definícióim nagyon rövidek, az egyes elemek megjelenítését legfeljebb két-három definíció határozza meg. Azt vettem észre, hogy ha valaki ennél bonyolultabban oldja meg, az általában nem ért hozzá.
Kavarodás: tudom, hogy nem klasszikus onclick, de akkor is a viselkedés és a markup keveredik. Ráadásul nem tudom, mennyire jó ötlet beleépíteni egy komponensbe az eseménykezelőjét, ugyanis ez csökkentheti a későbbi felhasználási lehetőségeit, mert előre megmondja, hogyan kell viselkednie.
Menő: A kulcs a divat. Most menő valami, két év múlva nem lesz az. Ha egy cég üzemszerűleg X keretrendszerrel dolgozik, akkor két év múlva nehezebben fog átállni Y-ra, mert televan monomániás X fejlesztőkkel. Amit én javaslok, az ennél rugalmasabb.
Angular: kettes vagy négyes,
Szerintem a tájékoztatás megfelelő volt, már hónapokkal korábbról. És még ma is simán építhetsz korábbi változatokra, javítások még jó ideig érkeznek az 1-eshez is.
Egyébként a verziókra teljesen felesleges hivatkozni. Több programozási nyelvben előfordult a verzióváltás, lásd PHP 5-6?-7 esetén, de volt Python 2-3, és a sort folytathatnánk. Ezen nem érdemes rugózni. Azért van verzióváltás mert szükségessé vált a fejlesztők szerint.
Azt már megbeszéltük, szerintem elégszer, miért hasznos keretrendszerekkel dolgozni. Gyors fejlesztés, költséghatékony, könnyű rá új embert felvenni, ad egy struktúrát a kódodnak, nem kell feltalálni dolgokat, nem kell a keretrendszer fejlesztésére embert felvenni, azt karbantartani, mert a keretrendszer fejlesztői ezt megteszik.
Szerintem a tájékoztatás
Az Angular 1.x-ről 2-re váltásnál gyakorlatilag egy új terméket kaptak a felhasználók, és a régi kódjaik az újjal egyáltalán nem működtek.
2, Ha az 1.x esetében rájöttek a fejlesztők, hogy valamit annyira elrontottak, hogy teljesen újra kell írni, az nem feltétlenül a profizmusukat mutatja. Mi garantálja, hogy a következő verzióknál nem fognak hasonló döntésre jutni?
Másrészt a fórumtéma HTML és a Működés bekezdésében leírtak alapján ma már bármilyen kliensoldali keretrendszer használata ódivatú, kontraproduktív és felesleges. Azt annyival egészíteném ki, hogy nem muszáj persze az állapotot szerveroldalon tárolni, lehet kliensen is, csak nem célszerű.
De ha valaki mindig csak keretekben gondolkodik, erre sosem jön rá, mert a keretek megölik az innovációt.
Egyébként abszolút igazad van, ha gyárad van, és valamit nagy tételben állítasz elő, akkor a keretrendszerek használata nagyon fontos. Csak épp a robotok mindig azt tudják elkészíteni, amire kiképezték őket. Ha egy gyárban Audi Quattrot gyártanak, akkor ott sosem fog készülni Mercedes. Rugalmatlan.
Míg azok a cégek, akik az innovációban hisznek, lehet, hogy nem fognak akkora mennyiséget előállítani, viszont, amit készítenek, az akár minden tekintetben jobb lehet a tömegtermelt példányoknál. Ez is egy valós üzleti stratégia.
Minden major verzió váltásban
Ezzel egyetértek.
Ezzel meg nem.
Minden major verzió váltásban
Ezzel meg nem.
Az állításom első részére itt van a bizonyíték előttem: a megjelenítés másfél kilobájt, az eseménykezelés öt, az inicializáció ugyancsak másfél. Nyolc kilobájt a teljes kód, és ezzel bármilyen interaktív webalkalmazást el lehet készíteni, animációkkal, minden kutyafülével együtt. Emellé teszünk egy végtelen görgetőt, az három kilobájt, és mindenki boldog lehet. Ezen felül egy deka javascriptet sem kell írni.
Természetesen adat alapú az egész, az adatok származhatnak egyesével külső forrásból, és az oldalnak csak az a része frissül, ahol változott bármi is.
Ez az igazi webkettő : )
Attól, hogy néhányan nem
Egyikkel sem. Nincs kedvem most kifejteni, majd talán máskor.
Amikor valahol már gigabites internet van, akkor nem hiszem, hogy lenne bármi értelme kb-okat számolni. Vannak erre külön versenyek, ha ezt érzed fontosnak, akkor nevezz be!
A web 2 egész mást jelent. link Persze abban egyetértek, hogy hasznos szétválasztani az adatot és a megjelenést.
PHP esetében az alapok nem
Backward incompatible changes Nem olvastam el, mert nem foglalkozok PHP-val, de nekem hosszúnak tűnt a lista.
De ugyan ez igaz Python 2 vs 3 esetén is. Van ami működik, van ami nem.
Változások
Nyilván aki nem használ egy
Te nem (saját) framework-öt
Tudom, ti nem használtok semmit PHP-ból, ami 4.x feletti feature. Tegyük fel, hogy ez erény. Ettől még a PHP se nem backward kompatibilis, se nem konzisztens. Még Javanál is sikerült 1-2 furcsaságba beleszaladni (pl tört számok kerekítése), pedig ott aztán nagyon figyelnek a backward compatibilityre. Úgyhogy olyan nincs, hogy nem számítunk semmire verzióváltásnál (és többek között ezért is kell a sok automata teszt, hogy a verzióváltás realitás legyen)...
Úgyhogy olyan nincs, hogy nem
+1, ha valami nagyon komoly kódot írsz, akkor esetleg még a nyelvet is érdemes lehet tesztelni. Én legalábbis js-nél és php-nál is belefutottam már apróbb nyelvi hibákba, pl "+0 <> -0", stb. Meg persze a kliens oldali js-nél rémálom a vanilla js-t közös nevezőre hozni, mert mindegyik böngésző máshogy implementál dolgokat. A w3c szabványosítás valamit javított a helyzeten, de szerintem ez örök probléma lesz, vagy megáll a böngészők fejlődése.
Állapot
Az átlag weboldal/-szolgáltatás elképesztő mennyiségű javascript kóddal dolgozik, amelynek jórészt az a szerepe, hogy az állapotot menedzselje: például kirajzol egy lenyíló menüt kattintásra, lekér adatokat a szervertől, amivel itt-ott frissíti a tartalmat stb. Egyrészt ezek a különböző rendszerekben különféleképp vannak megvalósítva, hol egyszerűbben, hol bonyolultabban, másrészt a fejlesztők tudása is tág határok között változik, a végeredmény pedig általában egy nagy kuszaság, ami ráadásul lassú is. Ezt nehezíti, hogy (ha használnak) az objektumorientáltság miatt a fő állapot egyes alállapotai nem látnak egymásra, azaz a fő állapot nem rekonstruálható egy lépésből, hanem az egyes alállapotokat kezelő objektumok megfelelő paraméterekkel meghívott láncolataként.
Minek ez a sok varázslás?
Hehe, sajnos most idő hiányában nincs időm tovább fejtegetni, majd nyaralás után.
Ezt nekem akartad írni? Nem
Jó nyaralást :)
Ha js-t akarsz használni,
Ha nem belsős oldalt írsz egy cégnek, hanem mondjuk webshopot, ilyesmit, amihez széleskörű böngésző támogatás kell, akkor én is jobb szeretek a HTML-nél maradni, mert egyszerűbb vele dolgozni. Persze ha van keretrendszered, ezer shimmel, akkor ugyanúgy js-ben is megoldható a dolog.
Az állapot kliensen tartása attól függ, hogy mit kell tudnia az oldalnak. Ha nagy terhelésre kell felkészíteni a rendszert, akkor jobban skálázódó oldalt lehet írni így. Ha szükség van arra, hogy több gépről belépve szinkronizálva ugyanazt lássa az ügyfél, pl online játékoknál, akkor nyilván a szerveren kell tartani az állapotot valamilyen formában. Egy szimpla webshopnál egyikre sincs szükség általában, annál ha js-el oldod meg, akkor simán maradhat a kliensen mondjuk cookie-ban, localstorage-ben, stb., hogy miket pakolt be az illető a kosárba, amit még nem küldött el. Statisztikai célból persze erről is lehet infot adni a szervernek, de nem életbevágó ott tárolni a kosarakat.
Talán 1 éve foglalkoztam egy
Egyébként a kliens oldali keretrendszerek egyik feladata az is, hogy a böngészők közti különbségeket elfedjék. Elég jól megoldják az "if (MSIE)" jellegű problémákat.
A hibakezelésre sajnos nem
Mielőtt beljebb mennénk:
https://blog.sentry.io/2016/0
window.onerror
helyett: kapd el a hibákat ott, ahol le akarod kezelni őket.Csináltam egy V8 Error API
Most hogy így szóba került, azt hiszem csinálom majd egy pár napig ezt a hibakezelős projektet. Úgyis át akartam írni ES6-os osztályokra, meg jó lenne, ha a nagyobb böngészőket tudná parsolni.
Kliensoldalon eljutottunk oda
Így végülis a szerver lehet több terhelést kap a HTML előállításától, mint az egyéb üzleti folyamatok támogatásától.
Ezzel szemben a te megoldásod kitesz minden listát a kliensre, habár lehet nem is használod.
Nehogymár kiderüljön, hogy az OOP is mehet a francba! Ha nehezen tudnak kommunikálni az egységek, akkor az rosszul van megtervezve. Te hogy rekonstruálsz egy lépésből? Sok funkcióval kiolvasod a $_SESSION ből a - tegyük fel - jól szervezett adatstruktúrát úgy, hogy belepakolod global változókba?
Így végülis a szerver lehet
Pedig kliensoldalon inkább
Ezzel a válaszoddal egy kiragadott mondatra reagálsz, az azt követő a lényeg:
Mindegy, hogy objektum, komponens, bármi, a lényeg az egységbezáráson és az SRP-n van. Ha egy alkalmazás egyégei nem tudnak megfelelően kommunikálni, akkor az nincs jól kitalálva. A megfelelő szónak ebben az esetben elég sok jelentése lehet:
- Egy view szerepkörrel ellátott egység ne kérjen adatot semmilyen szerviztől
- Egy szerviz metódus ne használjon render funkciókat
- Bárhonnan ne érjek el bármit
Ha a két React komponensem nem tud kommunikálni, akkor felteszem a kérdést:
- Jó egyáltalán, ha ők kommunikálnak?
- Ha logikailag kommunikálhatnának, de nem tudnak, akkor az React hibája, vagy az enyém?
Az az overhead, amit a komponensek közti kommunikáció megvalósítása okoz, az normális keretek között az alkalmazás felépítésének a minőségét erősítheti. Nem varázslásról van szó, hanem rákényszerülsz arra, hogy a window.get('valami') alkalmazás szinten bármilyen formában bárhonnan elérhető metódusod helyett találd meg mindennek a helyét.
Ellenkező esetben a spagettit eheted csőtésztával, zöld paradicsommal és óriás, mócsingos húsgolyókkal. Jól laksz tőle, de nem finom...
Kommunikáció
Azért kell kommunikálniuk,
Újratöltés
Mit csinálsz abban az
?
Hogyan?
Így
Tehát ugyanazt csinálod mint
Miként
Igen, de szerintem 692kb difi
Kezdettől fogva olyan problémára próbálod ráhúzni a Reactot és társait, amire neked nem jó, ennek lehet több oka:
- már csak azért sem akarod, hogy jó legyen
- nem éri meg lecserélni
- nem ismered eléggé
Fogalmam sincs mennyi időt szántál rá, de sanszos, hogy annyit, mint a Silexes topicra, amiből az derült ki, hogy egy semmire való callbackhell agyonhypolt featureökkel.
A helyzet az, hogy mindegyik rendszer több annál, mint amit néhány tutoriálból leszűrsz.
Neked nem jó sem az angular, sem a silex, sem keretrendszer. A válasz egyszerű, ne használd, nem a te problémádat oldja meg. Én ezt megértem, és én sem állnék neki baltával erdőt írtani, sőt lánfűrésszel fogpiszkálót aprítani sem. De ha egy erdőhöz felbérelek egy profi csapatot, akik jó pénzért kirtják, és felköbözik a fát, akkor én elégedett vagyok!
Ez az érem másik oldala!
Nettó
Szóval összegezve 10 éve
Pont azért használunk ezer shim-et, polyfill-t meg keretrendszereket kliensen, hogy csak egy kódot kelljen írni a három helyett. Nyilván ennek van annyi hátránya, hogy a gagyi samsungos felhasználóknak lassú az oldal, de ha van benne annyi pénz, akkor megéri mobilra optimalizálni nekik, ha meg nincs benne pénz, akkor így jártak, majd megnézik otthon asztali gépnél vagy egy komolyabb mobillal, ami elviszi a javascriptet.
Igen
Komolyan kérdezed, hogy miért
Nyílván a te rendszereddel krosszplatform vagyok. Na ne...
Amúgy, tessék, mazsolázz.
Komolyan
A rendszerünk három rétegből áll:
1, megjelenítés
2, üzleti logika és állapot
3, adatforrások (API)
Ebből csak és kizárólag a megjelenítés van a kliensen, aminek két feladata az események elküldése a 2,-es rétegnek, valamint az onnan kapott adatok kirajzolása a képernyőre.
Alapvetően böngészőre épül az egész, és az, hogy az 1,-es réteg mit kap, függ attól, hogy mire képes. Ha buta a kliens, például kereső (google és társaik), akkor bizony HTML-t küldünk. Minden más esetben (böngészők) pedig adatokat, amelyek HTML-lé való transzformációját a kliensen végezzük el.
Mivel az állapotmenedzser csak a megváltozott komponenseket és azok tartalmát küldi el a kliensnek, a forgalom minimális. Mivel semmilyen állapot és üzleti logika nincs a kliensen, a kliensprogram végtelenül egyszerű, ezért olyan kicsi a mérete.
Tipikusan bizonyos speciális eseménykezelők beépítése miatt kell módosítani a klienst, ami meglehetősen ritka. Mivel minden üzleti logika a szerveren van, a tartalom és/vagy a dizájn lecserélése nem érinti a klienst.
Lehetőségünk van arra, hogy az adatforrásokat az API egyszerre szolgálja ki (a képernyőn megjelenő adatokat küldi ki), de akár arra is, hogy egyesével "csatornázzuk" be a kliensbe, így nagyon szépen lehet gyorstárazni.
A felépítésből adódik, hogy teljesen moduláris az egész, az állapotmenedzser és az adatforrások akár külön szerveren is lehetnek.
---
Nézzük az Angular featúráit:
Workaround létezik mindenre,
Innen szép a győzelem : )
Nem azt mondtam, hogy tényleg
Kíváncsi vagyok mikor adod
Negatív drukker, fuj!
Szóval SOS-ben javíts a hozzáállásodon, másképp azt fogom hinni, hogy "nem tiszteled eléggé A Családot"! :-D (A Keresztapa c. film)
Elnézést keresztapa. :D
Folytatás
A weboldal és a webes alkalmazás között a különbség, hogy az utóbbiban a tartalmat dinamikusan állítjuk elő, de a végeredmény egy-egy diszkrét pillanatban ugyanaz, egy statikus HTML kód. A háttérben (legyen akár kliens-, akár szerveroldal) van pár nyers adatforrás (pl. adatbázis), valamint az aktuális oldal állapota, ami jellemzően pártíz változó.
Az alkalmazáslogika azt mondja meg, hogy ezeknek a változóknak mi az értéke, és amikor megváltoznak, akkor ez a felhasználó képernyőjén fog tükröződni. Már bocsánat, de pártíz változó kezeléséhez minek keretrendszer?
Nálunk a kliens és a szerver között van egy interfész, egy json vagy xml adatstruktúra, ami tíz éve nagyjából változatlan (kikerült belőle pár redundáns apróság). Közben mind a backend, mind pedig a frontend le lett cserélve (méretükben jelentősen csökkentek, a sebességük pedig nőtt, szerveroldalon két-háromszorosára, mert az adatbázisokon nem nagyon lehet segíteni, kliensoldalon húsz-harmincszorosára).
Ez innováció. A kezünket nem köti semmi, csak saját magunk. A jól megválasztott sablonozás a lényeg: mi döntjük el, hogy kvázi natív sebességgel dolgozunk, de némileg több munkával, vagy pedig valamivel lassabb megjelenítéssel (ami persze észrevehetetlen), de kevés munkával. Ezekre egy általános tudással bárki rájöhet, míg UI keretrendszerek mellett csak nagyon nehezen, hisz abból sok jó nem jöhet ki, ha mondjuk elkezdesz dolgozni React-tel, és ha valahol lassú, akkor kókányolsz bele valamit.
---
A PHP-ben vannak valóban furcsaságok és inkonzisztenciák, de nem számottevő.
Diszkrét pillanat :)
Ez most egy definíció szeretne lenne, vagy csak valami életérzés? :)
Az ezekkel a mondatokkal a baj, hogy nehéz hozzá csatlakozni. Az igazságtartalmáról értelmetlen diskurálni, sőt, most nem is akarom megkérdőjelezni, ám mégis nehéz lenne azt mondani, hogy sikerült a különbség lényegét megfogni. Fizikában jártas kollégák biztos helyreteszik majd a hasonlatomat, de nekem rögtön az jutott eszembe, hogy amikor a csiga és a repülőgép sebességét egy diszkrét pillanatban nézzük, akkor azt tapasztaljuk, hogy egy helyben állnak. Ám sejtjük, hogy mégiscsak gyorsabb az egyik a másiknál.
Diszkrét
Szóval a framework rossz,
Továbbá kiemeled a layerek közötti interface fontosságát (xml, json alapú protocol a layerek között), mint a flexibilitás kulcsát (és milyen igazad van). Következő mondatban meg írod, hogy minek pár változó miatt framework (amit te magad is írtál és használtál). Nem a framework a lényeg, hanem a layerek közötti szeparáció. A framework pont ezt adja. Ha ez nem jelenik meg az architektúrádban, akkor ezeket a rétegeket összetaknyoltad, aminek fizeted a költségét rendszeresen (max nem veszed észre). Mert azt ugye nem gondoljuk, hogy front-enden nincsenek alkalmazás rétegek...?
Keretrendszer
Ha így vesszük, igen, mi is keretrendszert használunk, csak nem egy általánosat, hanem teljesen sajátot. Ebben minden úgy működik, ahogy nekünk kell, és nincs benne semmi fölösleges.
Az általános keretrendszerek ezzel szemben olyan megoldásokat használnak, amelyek általánosak, és a sok absztrakció miatt sok olyan kód is van benne, ami az adott szituációban szükségtelen. Ez növeli a karbantartás költségeit, mind a keretrendszer fejlesztői, mind pedig a használói körében. Tessék, ebben az esetben meg itt folyik el a pénz.
Hát valami ilyesmi a
A karbantartásba nem akarok belemenni, nagyon mást gondolunk róla :) (Nem is értem egy open-source framework karbantartása miért lenne a project költsége)
Front-end rétegek: valami felteszem kommunikál a backenddel, valami transzformál pl json->belső modell->DOM között, megjelenít, validál stb.
Az enterprise software nem a multi szinonimája. A lényeg az volt, hogy a PHP nem backward compatible. Azért hoztam csak fel, mert mondtad, hogy nincs vele sok gond. Hát ha létezik gyengéje a PHP-nak, ez a tulajdonsága az első sorban szerepel.
Költségek
Nekünk anno az Ext-tel volt rengeteg problémánk, a listboxaik, azon felül, hogy nagyon lassúak voltak, tele voltak hibával (hat vagy nyolcszoros volt öröklődési lánc), és rengeteg idő ment el a hegesztgetéssel. Végül megelégeltem, és kétszáz sorból újraírtam, ami mára feleennyire csökkent.
Zárójelben megjegyzem, kliens-szerver alkalmazásnál nem sok értelme van bármit is kliensoldalon validálni.
Egy nyílt forrású
Nyílt forrás
Úgy látszik, nyílt forrás és nyílt forrás között van különbség.
Mint az már szerintem
Az pedig, hogy milyen validációkat (és mennyit) végzel el kliens-oldalon, implementációs részlet, és nem eredendő velejárója a kliensoldali ellenőrzéseknek, így számomra ez sem érv a js validáció mellőzésére.
Élmény volt
Ötvenkétmillió mérés alapján az átlagos emberi reakcióidő 282 ezredmásodperc, azaz majdnem egyharmad másodperc. Ez azt jelenti, hogy felesleges ez alá menni, mert az emberek túlnyomó többsége nem fog tudni gyorsabban reagálni. Nem tudják megmondani, hogy valami azonnal, vagy pedig 0,3 másodperc alatt jelent meg. Tehát az azonnali ellenőrzés nem javít a felhasználói élményen, ha a válaszidő 282 ezredmásodperc alatt van.
Ezzel szemben a legtöbb operációs rendszerbeli animáció fél másodperc hosszú, ráadásul a műveleteket csak a befejezése után indítják el.
Ennyit a felhasználói élményről.
Azt remélem tudod, hogy a
Ha mindenre ráérnénk 282 ezredmásodpercenként "reagálni", akkor 3-4 fps-sel mennének a filmek, játékok, stb., ami azért elég abszurd lenne. Igazából a különbség még 30 (33 ezredmásoperc) és 60 (16-17 ezredmásodperc) fps között is bőven észlelhető.
Akkor szerinted ezen a kis "játékon" nem lehet eldönteni, hogy melyik szám villan fel utoljára?
Igaz
- A response time of 100ms is perceived as instantaneous.
- Response times of 1 second or less are fast enough for users to feel they are interacting freely with the information.
Tehát egytized másodperc alatt az ember nem érzékeli a különbséget, és ha egy másodpercen belül van válasz, az még abszolút elfogadható.A szerver oldali validáció
Ezt azért lehet jobban is
A kliens oldali (formai)
Értelem
A terhelést elhanyagolható mértékben csökkenti, de szerveroldalon ugyanúgy kell ellenőrizni, ráadásul korlátozott a használata, többek között a css lehetőségei miatt is.
Általában kipróbált
Az, hogy mi elhanyagolható erősen kontextus függő. Sűrűn látogatott oldalaknál számít az 1% is.
Értelem
A legjobb példa erre a
data-*
attribútumok bevezetése, amelyeknek minimum tízszer lassabb az elérése a hagyományos változókénál (hisz egy DOM fában kell keresni, ami nem a gyorsaságáról híres, nem véletlenül vezették be a nagy keretrendszerek a Shadow DOM-ot).De ugyanígy nem segített semmit sem a "szemantikus" elemek (
<article>
,<footer>
és társaik) bevezetése, hisz sem a felhasználó, sem pedig a keresők nem profitálnak belőle.Jogod van a véleményedhez.
új érted ajaxozni, majd
Tehát egytized másodperc
Én szerintem 90+ százalékban el tudom dönteni, hogy melyik szám villant fel előbb a 16 és a 33 ezredmásodperces közül. Az igaz, hogy mindkettő egészen azonnalinak érződik, de ez azért függ a kontextustól is.
Azért azt se felejtsd el idézni, hogy az említett tanulmány 1968-as, azóta pedig szerintem azért változtak az emberek elvárásai a (vizuális) visszajelzésekkel kapcsolatban. Valamint később írják a cikkben, hogy 13 ms-től kezdődően már észlelhető a különbség, és 75-100 ms-nél már becslés alapján is kell reagálunk, nem csak a vizuális infó alapján, mert az már túl lassú visszajelzés (nem tudom, ők honnan idézik az utóbbi részét).
Nem mondom, hogy egy űrlapnak kötelező 60 fps-sel renderelnie a hibákat, stb., de hogy reszponzívabbnak és folyamatosabbnak érződik az interakció, mint egy 30 fps-es renderelésű, egy 10 vagy annál kevesebb fps-es renderelésűnél meg pláne, az biztos. Azt döntse el (tesztelje le) mindenki magának, hogy a célcsoportja milyen válaszidőt vár el az alkalmazásától, és optimalizálja az alapján :)
Hibaüzenet per szekundum
Ha egy másodperc alatt
Azt sehol sem állítottam, hogy gyorsabban fogom feldolgozni az űrlapot vagy több hibaüzenetet tudok értelmezni, ha 100 ms helyett 13 ms alatt jelenik meg a hibaüzenet (mivel a reakcióidő magasabb ezeknél). Annyi a mondandóm, hogy minél közelebb van a program visszajelzési ideje a 13 ms-hez, annál reszponzívabbnak fog érződni, mert ilyen különbségeket még tud észlelni az emberek egy adott része.
Az más kérdés, hogy egy adott alkalmazásnál milyen válaszidőre van szükség. Ez célközönség és alkalmazásfüggő. A lényeg, hogy bármilyen visszajelzésnél változhat a vizuális élmény (UX) az eltelt idő függvényében egészen 13 ms-ig. (Tehát ne írjunk olyat a kezdők, vagy lustábbak kedvéért (akik még nem néztek utána ilyeneknek, vagy nem akarnak), hogy 0.3 másodperc vagy akár 0.1 másodperc alatti válaszidők között már nem érezhető a különbség. Nyilván nem az űrlapokhoz tartozik, de ha már előkerült a reakcióidő, akkor szerintem "gamerek" hada igazolná, hogy ég és föld különbséggel lehet játszani attól függően, hogy a játék 30 vagy 60 fps-es válaszidővel reagál.)
Ugye nem azt akarod mondani, hogy az emberre nem hatnak a különböző evolúciós faktorok (vagy akár csak az agyra)?
Ugyanakkor ismét nem állítottam, hogy '68-óta lényegében változott volna az emberi agy szerkezete, és ezért nagyságrendekkel több információt tudnánk ma feldolgozni, mint akkor. Annyit írtam, hogy az elvárásaink változtak meg a technológiával kapcsolatban. Ugyanúgy, mint ahogy régebben örültünk, ha volt betárcsázós internet, ma meg sokaknak eszükbe jut másik oldal keresése, ha néhány másodpercnél lassabban töltődik be egy oldal.
Reakció
Harmadszor, hiába lesz piszkosul reszponzív pl. az email formai validációja, ha ahhoz úgyis várni kell, hogy megtudd, szerepel-e már az adatbázisban, ilyen névvel lehet-e regisztrálni, szerepel-e az adott érték bizonyos határok között.
Negyedszer, dolgozhatsz kétszer, hisz szerveroldalon úgyis mindent le kell ellenőrizni, utána kliensoldalon meg kell jeleníteni a hibaüzenetet, és nem elég a required-re vagy a patternre megírni a css selectort, kell még class-t is készíteni.
Ötödször, ha valamilyen oknál fogva más platformon is el kell készíteni az alkalmazást, akkor ott is programozhatod le a kliensoldali ellenőrzést.
Lehet, hogy az igényed nőtt a több információra, de biológiailag nem változtál semmit. Egyébként meg szerinted véletlenül van annyi túlmozgásos, hiperaktív gyerek, akiket nem lehet lekötni pár percnél tovább semmivel? Pont az információtúladagolás az egyik oka ennek.
Felesleges
Ez lényegtelen ebből szempontból, valamint biológusok sem vagyunk, úgyhogy kár ezt feszegetni; ugyanakkor például a laktóz tolerancia az állatartással kézenfogva jelent meg az embereknél kb. tízezer éve (tudom, az még mindig nagyságrendekkel több a huszonpár évnél, de ez az elvárások szempontjából irreleváns).
Ki beszélt itt több információról? A visszajelzés sebességéről beszélünk; hogy gyorsabbnak érzünk-e egy 30 ms-es válaszidőt egy 100 ms-esnél.
Nem vagyok a téma szakértője, így erről kár nyilatkoznom, és nagyon offtopic is. (A véleményem mindenesetre az, hogy ha létezik ez a trend, akkor az "információtúladagolás" a legkevésbé lényegi okozója lehet ennek, ha egyáltalán okozza és nem csak korrelál vele).
Sebesség
Alá tudod valamivel támasztani, hogy nőtt az igény a visszajelzés gyorsaságára? Egyébként folyamatosan gyorsulnak a hardverek és az internet elérési sebessége, szóval ez a rész hardverből megvan.
Én egyetértek az első
Lassul
A mai huszonévesek is lesznek egyszer ötvenesek.
Ha az említett '68-as papír
Megegyezik
Ezzel szemben vannak más faktorok is, amik alapján döntünk, amikor egy webes szolgáltatást használunk.
Az emberek akkor fogják n szolgáltatás közül a leggyorsabbat választani, ha azok minden egyéb másban megegyeznek. Ha van két webes áruház, amelyikben a termékek árai megegyeznek, a kiszállítás díja megegyezik, akkor a vevő gondolkodás nélkül a gyorsabbikhoz fog menni.
De ha az egyik száz forinttal olcsóbb, akkor az egyszeri magyar állampolgár onnan fog vásárolni, hiába jóval lassabb.
Az ismerőseim egy részét Facebook Messengeren keresztül tudom elérni. Lemértem, a kezdőlapon a Messenger linkre kattintva tíz másodperc alatt töltődött be az utolsó beszélgetés tartalma (közben mind a négy magot körülbelül 50%-ban használta). Mivel nincs választási lehetőségem, ezt fogom használni. Hiába gyorsabb a Skype, ha Facebookon van fenn, akinek üzenni szeretnék – így nincs választási lehetőségem.
Ugyancsak ide tartozik, hogy ha van két hasonló szolgáltatás, amiből az egyiket ismerem, a másikat nem, akkor azt fogom választani, amelyiket ismerem, mert ott tudom, mire számíthatok, míg a másikat meg kell tanulni.
Tehát az UX szép dolog, csak kissé összetettebb annál, hogy a gyorsabb a jobb.
Tehát abban egyetértünk, hogy
Hatnak, csak itt
Ha erős szelekciós nyomás lenne, mondjuk megtizedelődne az emberiség emiatt, akkor 100 év elég lenne, hogy lemenjen az emberek reakcióideje. Mivel nincs, max nagyon enyhe, így nem igazán fog változni semmi ezen a téren valszeg 100k év múlva sem. Nyilván attól függ, hogy merre fejlődik tovább a technológia, és mennyire lesz nehéz az átlag embernek követni.
Ezt alá tudom támasztani az
Nem kéne ennyire pongyolán
A reakcióidővel szerintem ne foglalkozz, mert gőzöd sincs róla.
A reakcióidővel szerintem ne
Miért tenném?
Minta
Asszem egyszerre dolgozunk
Ezek miatt én úgy gondolom, hogy komoly tévedésben vagy mind UX, mind erőforráskihasználtság tekintetében.
Tévedés
A kliens megbízhatatlan, erről szól ez az egész fórumtéma.
A szerver pedig azért van, hogy dolgozzon. Nem tudom, miért akarsz mindenáron előre optimalizálni.
A szál korábbi ágában kifejtettem, hogy azért az elhanyagolható reszponzivitásért elég sok munkával kell fizetni. Így nem gondolom, hogy én lennék tévedésben UX vagy erőforrások kihasználtságával kapcsolatban.
Kevertem egy másik RTT-al.
Példa
Ilyesmi. Nem mondom, hogy ez
Én amúgy megint csak azzal vitatkozom, hogy "semmi értelme". Ez teljesen nyilvánvalóan nem igaz. 2017-ben egy rich webappnál, meg a mai frameworkök mellett ez a kijelentés egy kicsit meghaladott.
Egyébként ez egy jó példa arra, hogy valójában egy házon belüli framework nem bír olyan rugalmassággal, mint egy külsős, elterjedt megoldás. Bár azt is meg lehet úgy írni, hogy könnyen kiterjeszthető legyen. Azzal érvelsz, hogy ez mekkora meló a semmi benefitért, pedig ott van fent az ellenpélda. Ez nem premature optimisation... Egy form alapú rendszernél meg még erősen indokolt is.
Én azt kérdeztem, hogy te
data-*
attribútumokba teszik. Pár éve csináltam egy tesztet, aminek az eredményeit bemásoltam ide, a weblaborra, ha akarod, rá is kereshetsz, az eredménye az volt, hogy jQuery-ből adata-*
attribútumok elérése ezerszer lassabb, mintha ugyanezt natív változókkal oldanád meg.Ez nagyon amatőr megoldás. Olyan 2017-es.
Természetesen semmi értelme nincs ilyet használni. Értem én, hogy lehet ilyet csinálni, de mivel szerveroldalon úgyis kell ellenőrizni, és onnan is kell ugyanúgy hibaüzeneteket küldeni, nem spórolsz meg vele semmit. Láthatóan nem lesz gyorsabb, de egy újabb függőséget kapsz a nyakadba.
Kliensoldalon csak formai ellenőrzéseket tudsz amúgy is végezni.
Ezzel szemben az, amit én javaslok, nulla plusz munkával jár, egyszerűbb a HTML, egyszerűbb a CSS, és egy sor javascriptet sem kell hozzá írni.
Én így oldanám meg. Vannak
Amit linkeltem amúgy, abban a definíció volt a lényeg, nem az implementáció. Azt hittem ez nem kérdés.
Ok, itt a vége a vitának.
Ez kb. olyan, mint amikor valaki kijelenti, hogy a Föld lapos. Felesleges megpróbálni meggyőzni, mert olyan szinten ignorál minden tényt. Egyébként ha működik a módszere, akkor használja egészséggel, engem nem zavar, amíg nem kell belejavítanom később. Valószínűleg ezt a részét megúsztam, mert nem foglalkozom már egy ideje PHP-val, csak nagyon ritkán, ha könyörögnek. :D Én is voltam ebben a fázisban, azóta inkább bloggolok. Jobb, mint cikket írni a hülyeségeimről. :D
Nem akkora kunszt olyan
Nagyjából húsz éve van AJAX,
Ha nem probléma, hogy
Jelentős
Ezzel szemben egy ilyen validációnál párszáz bájtról beszélünk fejlécestül, mindenestül.
Volt már ez a sztori itt azt
Rég volt
Abban az időben még nem lehetett azt a toplistát előre legenerálni, esetleg más táblába tenni. Valószínűleg a fél világ azzal a játékkal múlatta az idejét.
Ezért egyszerűbb volt a toplistát elhagyni, hisz szemmel láthatólag nem is érdekelt senkit.
Ext.js
Zárt
Ha a ti keretrendszeretek nem
A fejlesztői költségek nem érdekelnek. Én mint keretrendszer használó szem előtt tartom a keretrendszer fejlődését és kalkulálok a lehetséges költségekkel, amik még mindig alacsonyabbak, mint hegeszteni a sajátot.
angular1 vs angular2: ha az angular1-es appodat megfelelő átgondoltsággal raktad össze, fájdalom mentesen átlehet állni angular2-re. Nekünk konkrétan annyiból állt az átállás az egyik projectünkön, hogy az angular1-es definíciókat angular2-es dekorátorokra cseréltük, plusz elvégeztük a megfelelő utómunkát. Nyílván itt keletkezett többletköltség, viszont van egy gyönyörűen struktúrált könnyen fejleszthető frontendünk.
Egyébként ha már egyszer a kilobájtokat számoltuk: az angular app JSON apival jóval kisebb adatforgalmat generál mint egy régi megoldás.
Specifikus
Pontosan milyen régi
Rosszul fogalmaztam. A "régi megoldás" nem jó kifejezés. Kizárólag oldal újratöltéssel működő megoldásra gondolok. Hogy értsd, direkt sarkítok: gombnyomásra változtatok egy szót egy. Melyik megoldás generál kisebb adatforgalmat? Újra töltöm az egész oldalt, vagy elkérem a két új szót egy kéréssel, és beállítom.
Miért?
HTML = újratöltés, JSON/XML =
HTML
Hogyan kezelitek a
Ahogy jólesik
Csak eszembe jutott, és
Tömörítve hasonló lesz
Enterprise
Tipikus példa erre a Google, akiknek a keresőalgoritmusa semmit nem fejlődött két évtizede, csak reszelgettek rajta itt-ott. Ugyanilyen állóvíz az internet, ami huszonöt éve technológiailag változatlanul ugyanarra alapul.
Ezek a keretrendszerek
Sajnos az utána következő érvekből számomra nem derült ki, hogy miért lenne abszurd ötlet? A szerveren renderelt markupnál is elvesznek a beírt adatok, ha újratöltöd az oldalt.
Azért én árnyalnám a helyzetet azzal, hogy ha van egy célközönsége a termékednek, akkor azért be tudod lőni, hogy milyen eszközökről illetve milyen minőségű kapcsolaton keresztül látogatják az oldalad. Ha pedig van egy meglévő oldalad, akkor az analitika alapján a számszerű eloszlásokat is ismered, és ennek függvényében tudsz kompromisszumokat kötni. Ha olyan weboldalt szeretnél, ami egy ezer éves böngészőben is jól használható, azt is meg lehet írni, de lemondani egy új technológiáról pont ugyanolyan, mint lemondani egy régebbi böngésző támogatásáról.
A fejlesztők teljes dilettanciáról tesznek bizonyítékot, amikor azt feltételezik, hogy mindenki a legújabb böngészőket használja.
Az, hogy az újabb böngészőkben a
createElement
gyorsabb, nem jelenti azt, hogy a régebbiekben lassabb lett volna azinnerHTML
állításnál.A semver módszerét követik, amiben egyébként szó nince ilyesmiről,
hogy a 0.x verziók béták. Ha érdekel major verzió ugrásának oka, ajánlom a témában a react posztját.
Ezek után nem lehet tudni, hogy mikor játsszák meg ugyanezt, mikor dobhatja ki a kukába az aktuális fejlesztését az adott cég, aki Angularra épít [...]
Senkit sem kényszerítenek, hogy dobja ki a meglévő kódját. Az Angular 1.x egy stabil keretrendszer, az Angular 2 (3, stb) pedig tulajdonképpen egy teljesen másik (ami ha jól tudom már követi a semver szabályait). Nem kötelező frissíteni rá.
A szerver oldali renderelés hiánya valóban egy fájó pont, de nem megoldhatatlan (persze ez csak egy a sok lehetséges megoldás közül). Egyébként újabban a google már képes js-t futtatni, szóval a jövőben csak javulhat a helyzet.
Az
async/await
milyen kompromisszumokra kényszeríti a fejlesztőt?Nekem sikerült "átvészelnem" ezt a "viharos" időszakot. Valójában egyáltalán nem volt az, a project stagnálása miatt a core fejlesztők kiváltak, és iojs névent ment tovább a project, majd miután a márkanevet birtokló Joyenttel sikerül megegyezni, újra nodejs név alatt mentek tovább. Azóta egyébként már a Node.js Foundation-é a márkanév, és fejlesztési döntések teljesen demokratikusak (és átláthatóak).
Továbbra sem kell. Aki pedig szeretne a neten jelen lenni, de egy havi 5 dolláros VM-be nem tud beruházni, ott komolyabb gondok is vannak. Ha neked menedzselt környezet kell, az sem sokkal drágább (heroku, illetve egyéb PaaS szolgáltatók).
Szerintem a node előnye pont az, hogy nem kell a szerveren egy másik nyelvet használni, a frontendes is bármikor meg tudja érteni, hogy mit csinál a backend kód. Pont hogy kevesebb a függőség.
Szerintem a reactos megközelítés kifejezetten a produktivitás előnyére vált. Egyébként a viselkedés továbbra is szétválasztható, nem kötelező ott helyben megírni az üzleti logikát (sőt, nem is ajánlott). Olvass utána a flux architektúrának, vagy a redux könyvtárnak bátran, nagyon tanulságos.
Az, hogy kliens oldalon manipulálod az adatokat, nem mentesít az alól, hogy szerver oldalon validálni kell azokat (linkelhetném a bkk balhét, de úgyis mindenki ismeri a sztorit). Lehet egyébként ezt csinálni, a régebbi asp.net kb pont így működött, és borzalmas élményt adott (de ez csak személyes tapasztalat/vélemény)
Az inferno egy a react-hoz nagyon hasonló könyvtár, 9kb :). Egyébként szerintem el vagy tévedve, a JSX-es szintaktikában az
<button onClick={foo} />
egyReact.createElement('button', { onClick: foo })
-nak felel meg, nem generálódik tényleges HTML kód, pusztán egy virtuális DOM fa, amit az aktuális DOM fával összehasonlít a megjelenítő algoritmus, és csak a szükséges változtatásokat hajtja végre.Tehát ignoráljunk minden új technológiát? A react 2013 óta van itt, és nem úgy tűnik, mintha leáldozóban lenne. A fejlesztés során szerzett tapasztalataim alapján bárkinek tudom ajánlani, hogy építsen rá. Ha értesz egy kicsit is az angular/react-hoz, garantáltan lesz munkád, szóval szerintem ez elég erős csúsztatás, hogy a ezek csak hóbortok.
A szoftver sajnos nem egy statikus dolog, a valóság nem így működik. Ha a saját keretrendszerre gondolsz, akkor meg azt tudom válaszolni, hogy használj egy meglévőt, és akkor egyszer sem kell megírnod :).
Egy hulladék keretrendszerrel, és egy "fun" keretrendszerrel is meg lehet oldani a problémát, és ráadásul ugyanolyan jól, azonos idő alatt. Én azt választanám, amit élvezek is csinálni.
Ezzel így nem értek egyet, a React és a többi keretrendszer mellett meg kell tanulni a HTML/CSS/JS-t is (mondjuk én azt hittem, hogy ez utóbbi egy teljesen nyilvánvaló dolog).
Azaz lényegében fogalmunk
Egyrészt lehet a user agent alapján is sejteni valamit már szerver oldalon, ha meg van a kliens oldalon js, akkor le lehet vele tesztelni, hogy egy-egy feature működik e. Szóval a fogalmunk sincs nagyon erős túlzás.
Az inferno-t megnézem, nomen est omen. :D