Habr front-end developer logs: refactoring and reflecting

Habr front-end developer logs: refactoring and reflecting

Nahaliana ahy foana ny fomba nandrafetana an'i Habr avy ao anatiny, ny fomba firafitry ny workflow, ny fomba firafitry ny fifandraisana, ny fenitra ampiasaina ary ny fomba fanoratana amin'ny ankapobeny eto. Soa ihany fa nahazo fahafahana toy izany aho, satria vao haingana aho no anisan'ny ekipa habra. Amin'ny fampiasana ny ohatry ny refactoring kely amin'ny dikan-teny finday, dia hiezaka ny hamaly ny fanontaniana aho: manao ahoana ny miasa eto aloha. Ao amin'ny fandaharana: Node, Vue, Vuex ary SSR miaraka amin'ny saosy avy amin'ny fanamarihana momba ny traikefa manokana amin'ny Habr.

Ny zavatra voalohany tokony ho fantatrao momba ny ekipa fampandrosoana dia ny vitsy amintsika. Tsy ampy - ireo dia telo anoloana, roa lamosina ary ny fitarihana ara-teknika ny Habr - Baxley rehetra. Mazava ho azy fa misy ihany koa ny tester, ny mpamorona, ny Vadim telo, ny kifafa mahagaga, ny manam-pahaizana momba ny varotra ary ny Bumburums hafa. Saingy enina ihany no mpandray anjara mivantana amin'ny loharanon'i Habr. Tsy fahita firy izany - tetikasa iray misy mpihaino an-tapitrisa dolara, izay avy any ivelany dia toa orinasa goavam-be, raha ny marina dia toa fanombohana mahafinaritra miaraka amin'ny rafi-pandaminana azo atao.

Tahaka ny orinasa IT maro hafa, Habr dia manambara hevitra Agile, fomba fanao CI, ary izay ihany. Saingy araka ny fahatsapako, ny Habr amin'ny maha-vokatra azy dia mivoatra kokoa amin'ny onjam-peo fa tsy mitohy. Noho izany, ho an'ny sprints maromaro misesy, dia mazoto mametraka zavatra isika, manamboatra sy manamboatra, manapaka zavatra ary manamboatra azy, mamaha tapakila ary mamorona vaovao, manitsaka rake ary mitifitra ny tenantsika amin'ny tongotra, mba hamoahana ny endri-javatra amin'ny farany. famokarana. Ary avy eo dia tonga ny fahatoniana, vanim-potoana fanavaozana, fotoana hanaovana izay ao amin'ny kianja "zava-dehibe-tsy maika".

Io sprint "tsy vanim-potoana" io indrindra no horesahina etsy ambany. Tamin'ity indray mitoraka ity dia nahitana fanavaozana ny dikan-teny finday Habr. Amin'ny ankapobeny, ny orinasa dia manana fanantenana lehibe amin'izany, ary amin'ny ho avy dia tokony hanolo ny zoo manontolo amin'ny fahatongavan'i Habr ho nofo izy ary ho lasa vahaolana amin'ny sehatra iraisam-pirenena. Indray andro any dia hisy layout adaptive, PWA, fomba ivelan'ny aterineto, fanaon'ny mpampiasa, ary zavatra mahaliana maro hafa.

Andeha isika hametraka ny asa

Indray mandeha, tamin'ny fijoroana mahazatra, ny iray tamin'ireo voalohany dia niresaka momba ny olana amin'ny rafitry ny singa fanehoan-kevitra amin'ny dikan-teny finday. Miaraka amin'izany ao an-tsaina, dia nikarakara fivoriana mikro amin'ny endrika psychotherapy vondrona. Samy nifandimby nilaza hoe aiza no maharary, noraketiny an-taratasy ny zava-drehetra, nangoraka, azony, afa-tsy hoe tsy nisy nitehaka. Ny vokatra dia lisitr'ireo olana 20, izay nanazava fa ny finday Habr dia mbola manana lalana lava sy sarotra mankany amin'ny fahombiazana.

Tena nanahy aho ny amin'ny fahombiazan'ny fampiasana loharanon-karena sy ilay antsoina hoe interface tsara. Isan'andro, amin'ny lalana an-trano-asa-trano, hitako ny findaiko taloha miezaka mafy mampiseho lohateny 20 ao amin'ny fahana. Toa toy izao ilay izy:

Habr front-end developer logs: refactoring and reflectingMobile Habr interface tsara alohan'ny refactoring

Inona no mitranga eto? Raha fintinina, dia nitovy tamin'ny fomba nitovy tamin'ny rehetra ny nanompoan'ny mpizara ny pejy HTML ho an'ny rehetra, na niditra na tsia ilay mpampiasa. Avy eo ny mpanjifa JS dia fenoina ary mangataka ny angona ilaina indray, saingy amboarina ho an'ny fanomezan-dΓ lana. Izany hoe, indroa izahay no nanao asa mitovy. Nivezivezy ny interface, ary naka kilobytes fanampiny zato ny mpampiasa. Amin'ny an-tsipiriany ny zava-drehetra dia toa vao mainka nahatsiravina.

Habr front-end developer logs: refactoring and reflectingTetika SSR-CSR taloha. Ny fanomezan-dΓ lana dia tsy azo atao afa-tsy amin'ny dingana C3 sy C4, rehefa tsy sahirana amin'ny famoronana HTML ny Node JS ary afaka mangataka proxy amin'ny API.

Ny maritranontsika tamin'izany fotoana izany dia nofaritan'ny iray amin'ireo mpampiasa Habr marina:

Ny dikan-teny finday dia adala. Lazaiko toy izay. Fifangaroan'ny SSR sy CSR mahatsiravina.

Tsy maintsy niaiky izany izahay, na dia nampalahelo toy inona aza izany.

Nanombatombana ireo safidy aho, namorona tapakila tao Jira miaraka amin'ny famaritana amin'ny ambaratonga hoe "ratsy izao, ataovy tsara" ary nopotehiko ny asa tamin'ny tsipika midadasika:

  • mampiasa indray ny angona,
  • mampihena ny isan'ny redraw,
  • esory ny fangatahana dika mitovy,
  • ataovy mazava kokoa ny fizotran'ny entana.

Andao hampiasaina indray ny angona

Amin'ny teoria, ny famandrihana amin'ny lafiny server dia natao hamahana olana roa: tsy hijaly amin'ny fetran'ny milina fikarohana amin'ny lafiny SPA indexing ary manatsara ny metrika FMP (miharatsy hatrany TTI). Amin'ny scenario mahazatra izay farany natsangana tao amin'ny Airbnb tamin'ny 2013 taona (mbola ao amin'ny Backbone.js), SSR dia fampiharana JS isomorphic mitovy amin'ny mandeha ao amin'ny tontolo Node. Ny mpizara dia mandefa tsotra izao ny drafitra novokarina ho valin'ny fangatahana. Avy eo dia misy ny rehydration amin'ny lafiny mpanjifa, ary avy eo dia mandeha ny zava-drehetra tsy misy famerenana pejy. Ho an'i Habr, toy ny ho an'ny loharano maro hafa miaraka amin'ny votoatin'ny lahatsoratra, ny fandefasana server dia singa manan-danja amin'ny fananganana fifandraisana am-pirahalahiana amin'ny milina fikarohana.

Na dia eo aza ny zava-misy fa enin-taona mahery no lasa hatramin'ny nahatongavan'ny teknolojia, ary nandritra izany fotoana izany, rano be dia be no tena nidina ambanin'ny tetezana eo amin'ny lafiny anoloana izao tontolo izao, ho an'ny developer maro io hevitra io dia mbola rakotry ny tsiambaratelo. Tsy nijanona izahay ary namoaka fampiharana Vue miaraka amin'ny fanohanan'ny SSR amin'ny famokarana, tsy misy antsipiriany kely: tsy nandefa ny fanjakana voalohany tamin'ny mpanjifa izahay.

Nahoana? Tsy misy valiny marina amin'io fanontaniana io. Na tsy te hampitombo ny haben'ny valin'ny mpizara izy ireo, na noho ny olana ara-javakanto maro hafa, na tsy nesorina fotsiny izany. Amin'ny fomba iray na amin'ny fomba hafa, ny fandroahana fanjakana sy ny fampiasana indray izay rehetra nataon'ny mpizara dia toa mety sy mahasoa. Ny asa dia tena tsy misy dikany - tsindrona tsotra izao ny fanjakana ao anatin'ny tontolon'ny famonoana, ary ampidirin'i Vue ho azy amin'ny lamina novokarina ho fari-piainana manerantany: window.__INITIAL_STATE__.

Ny iray amin'ireo olana nipoitra dia ny tsy fahafahana manova ny rafitra cyclic ho JSON (andinin-tsoratra boribory); voavaha tamin'ny fanoloana tsotra izao ny rafitra toy izany tamin'ireo trano fisaka.

Ankoatra izany, rehefa mifandray amin'ny votoaty UGC, dia tokony ho tsaroanao fa ny angon-drakitra dia tokony hiova fo amin'ny sampana HTML mba tsy handrava ny HTML. Ho an'ireo tanjona ireo dia ampiasainay he.

Manamaivana ny famerenana indray

Araka ny hitanao amin'ny kisary etsy ambony, amin'ny tranga misy antsika, ny ohatra iray Node JS dia manao asa roa: SSR sy "proxy" ao amin'ny API, izay misy ny fanomezan-dΓ lana ho an'ny mpampiasa. Ity toe-javatra ity dia tsy afaka manome alalana raha mandeha amin'ny mpizara ny code JS, satria ny node dia kofehy tokana, ary ny fiasan'ny SSR dia synchronous. Izany hoe, tsy afaka mandefa fangatahana amin'ny tenany fotsiny ny mpizara raha mbola sahirana amin'ny zavatra ny callstack. Hita fa nanavao ny fanjakana izahay, saingy tsy nitsahatra ny fihetsehana ny interface, satria tsy maintsy nohavaozina ny angon-drakitra momba ny mpanjifa raha jerena ny fivorian'ny mpampiasa. Mila nampianatra ny fampiharana anay izahay mba hametraka ny angon-drakitra marina amin'ny fanjakana voalohany, amin'ny fiheverana ny fidiran'ny mpampiasa.

Tsy nisy afa-tsy vahaolana roa tamin'ilay olana:

  • ampidiro ny angon-drakitra fanomezan-dΓ lana amin'ny fangatahana cross-server;
  • zarao ny sosona Node JS ho roa misaraka.

Ny vahaolana voalohany dia nitaky ny fampiasana variables manerantany amin'ny mpizara, ary ny faharoa dia nanitatra ny fe-potoana hamitana ny asa amin'ny iray volana farafahakeliny.

Ahoana no hanaovana safidy? Matetika i Habr no mandeha amin'ny lalan'ny fanoherana faran'izay kely indrindra. Amin'ny fomba tsy ara-potoana, misy faniriana ankapobeny hampihena ny tsingerina avy amin'ny hevitra mankany amin'ny prototype ho faran'izay kely indrindra. Ny modelin'ny toe-tsaina manoloana ny vokatra dia somary mampahatsiahy ny postulates ao amin'ny booking.com, ny hany mahasamihafa azy dia ny Habr dia mandray ny valin'ny mpampiasa ho matotra kokoa ary matoky anao, amin'ny maha-mpamorona azy, handray fanapahan-kevitra toy izany.

Taorian'io lojika io sy ny faniriako manokana hamaha haingana ny olana dia nisafidy ny fari-piainana manerantany aho. Ary, araka ny mitranga matetika, tsy maintsy mandoa azy ireo ianao na ho ela na ho haingana. Nandoa vola saika avy hatrany izahay: niasa tamin'ny faran'ny herinandro izahay, nanadio ny vokany, nanoratra lahatsoratra mortem ary nanomboka nizara roa ny mpizara. Hadalana be ilay fahadisoana, ary tsy mora ny mamerina ilay bibikely. Ary eny, mahamenatra izany, fa amin'ny fomba iray na amin'ny fomba hafa, tafintohina sy mitaraina, ny PoC-ko miaraka amin'ny fari-piainana manerantany dia niditra tao amin'ny famokarana ary niasa soa aman-tsara teo am-piandrasana ny fifindran'ny maritrano vaovao "roa-node". Dingana lehibe izany, satria tamin'ny fomba ofisialy dia tratra ny tanjona - nianatra nanatitra pejy vonona tanteraka ny SSR, ary nanjary tony kokoa ny UI.

Habr front-end developer logs: refactoring and reflectingMobile Habr interface tsara taorian'ny dingana voalohany ny refactoring

Amin'ny farany, ny rafitra SSR-CSR amin'ny dikan-teny finday dia mitondra amin'ity sary ity:

οΏΌHabr front-end developer logs: refactoring and reflecting"Two-node" SSR-CSR circuit. Ny API Node JS dia vonona foana amin'ny I/O asynchronous ary tsy voasakana amin'ny asan'ny SSR, satria ity farany dia hita amin'ny ohatra misaraka. Tsy ilaina ny rojo fanontaniana #3.

Fanafoanana ny fangatahana dika mitovy

Taorian'ny fanodinkodinana dia tsy niteraka androbe intsony ny famoahana voalohany ny pejy. Saingy ny fampiasana bebe kokoa ny Habr amin'ny fomba SPA dia mbola niteraka fisafotofotoana.

Satria ny fototry ny fikorianan'ny mpampiasa dia ny fiovan'ny endrika lisitry ny lahatsoratra β†’ lahatsoratra β†’ fanehoan-kevitra ary ny mifamadika amin'izany, dia zava-dehibe ny nanatsara ny fanjifana loharanon'ity rojo ity tamin'ny voalohany.

Habr front-end developer logs: refactoring and reflectingMiteraka fangatahana angona vaovao ny fiverenana amin'ny famahanana hafatra

Tsy nilaina ny nihady lalina. Ao amin'ny screencast etsy ambony dia hitanao fa ny fampiharana dia mangataka indray ny lisitry ny lahatsoratra rehefa miverina, ary mandritra ny fangatahana dia tsy mahita lahatsoratra isika, izay midika fa ny angon-drakitra teo aloha dia nanjavona any ho any. Toa mampiasa fanjakana eo an-toerana ny singa lisitry ny lahatsoratra ary very izany amin'ny fandravana. Raha ny marina, ny fampiharana dia nampiasa fanjakana eran-tany, fa ny maritrano Vuex dia natsangana: ny modules dia mifamatotra amin'ny pejy, izay mifamatotra amin'ny lalana. Ankoatr'izay, ny maody rehetra dia "azo ampiasaina" - ny fitsidihana manaraka ny pejy tsirairay dia namerina namerina ny maody manontolo:

ArticlesList: [
  { Article1 },
  ...
],
PageArticle: { ArticleFull1 },

Amin'ny fitambarany dia nanana module izahay Lisitry ny lahatsoratra, izay misy karazana zavatra Article ary module PageArticle, izay dikan-teny miitatra amin'ilay zavatra Article, toa karazana ArticleFull. Amin'ny ankapobeny, ity fampiharana ity dia tsy mitondra zavatra mahatsiravina amin'ny tenany - tena tsotra, mety hisy hilaza mihitsy aza hoe tsy misy dikany, fa tena azo takarina. Raha averinao ny maody isaky ny manova ny lalana ianao dia afaka miaina miaraka aminy mihitsy aza. Na izany aza, mifindra eo anelanelan'ny fahana lahatsoratra, ohatra /feed β†’ / rehetra, dia azo antoka fa hanary ny zava-drehetra mifandraika amin'ny fahana manokana, satria iray ihany izahay Lisitry ny lahatsoratra, izay ilainao hametrahana angona vaovao. Izany indray dia mitarika antsika amin'ny dika mitovy amin'ny fangatahana.

Rehefa nanangona ny zava-drehetra azoko nohadihadiana momba ny lohahevitra aho, dia namorona rafi-panjakana vaovao aho ary nanolotra izany tamin'ny mpiara-miasa tamiko. Naharitra ela ny fifanakalozan-kevitra, saingy tamin'ny farany dia nihoatra noho ny fisalasalana ny hevitra mankasitraka, ary nanomboka nampihatra izany aho.

Ny lojikan'ny vahaolana dia ambara tsara indrindra amin'ny dingana roa. Voalohany dia manandrana manaisotra ny maody Vuex amin'ny pejy isika ary mamatotra mivantana amin'ny lalana. Eny, hisy angon-drakitra bebe kokoa ao amin'ny fivarotana, ho lasa sarotra kokoa ny getters, saingy tsy hampiditra lahatsoratra indroa izahay. Ho an'ny dikan-teny finday, ity angamba no tohan-kevitra matanjaka indrindra. Ho toy izao izany:

ArticlesList: {
  ROUTE_FEED: [ 
    { Article1 },
    ...
  ],
  ROUTE_ALL: [ 
    { Article2 },
    ...
  ],
}

Ahoana anefa raha afaka mifanipaka eo amin'ny lalana maro ny lisitry ny lahatsoratra ary ahoana raha te hampiasa angon-drakitra zavatra isika Article hanova ny pejy lahatsoratra, mamadika azy ho ArticleFull? Amin'ity tranga ity dia mety kokoa ny mampiasa rafitra toy izany:

ArticlesIds: {
  ROUTE_FEED: [ '1', ... ],
  ROUTE_ALL: [ '1', '2', ... ],
},
ArticlesList: {
  '1': { Article1 }, 
  '2': { Article2 },
  ...
}

Lisitry ny lahatsoratra ity dia karazana fitehirizana lahatsoratra fotsiny. Lahatsoratra rehetra nalaina nandritra ny fotoam-piasan'ny mpampiasa. Mikarakara azy ireo amin'ny fitandremana fatratra izahay, satria io dia fifamoivoizana izay mety nalaina tamin'ny fanaintainana any amin'ny toerana iray ao amin'ny metro eo anelanelan'ny fiantsonana, ary azo antoka fa tsy te-hamerina an'io fanaintainana io amin'ny mpampiasa indray izahay amin'ny fanerena azy hampiditra angon-drakitra efa azony. alaina. Zavatra iray ArticlesIds dia andiana ID fotsiny (toy ny hoe "rohy") amin'ny zavatra Article. Ity rafitra ity dia ahafahanao misoroka ny fanaovana kopia angona mahazatra amin'ny lalana sy ny fampiasana indray ilay zavatra Article rehefa mamadika pejy lahatsoratra amin'ny alalan'ny fampifangaroana angona miitatra ao anatiny.

Nanjary mangarahara kokoa ihany koa ny fivoahan'ny lisitry ny lahatsoratra: ny singa iterator dia miverimberina amin'ny alΓ lan'ny array miaraka amin'ny ID lahatsoratra ary misintona ny singa teaser lahatsoratra, mandalo ny Id ho toy ny prop, ary ny singa zaza, indray, dia maka ny angona ilaina avy amin'ny Lisitry ny lahatsoratra. Rehefa mankany amin'ny pejy famoaham-boky ianao dia mahazo ny daty efa misy Lisitry ny lahatsoratra, manao fangatahana izahay mba hahazoana ny angon-drakitra tsy hita ary ampidiro fotsiny amin'ny zavatra efa misy.

Nahoana no tsara kokoa io fomba fiasa io? Araka ny nosoratako etsy ambony, ity fomba ity dia malefaka kokoa amin'ny angon-drakitra alaina ary ahafahanao mampiasa azy indray. Fa ankoatr'izay dia manokatra lalana mankany amin'ny fahafaha-manao vaovao izay mifanaraka tsara amin'ny maritrano toy izany. Ohatra, fandatsaham-bato sy fametahana lahatsoratra ao amin'ny fahana rehefa miseho izy ireo. Azontsika atao fotsiny ny mametraka ny lahatsoratra farany ao anaty "fitehirizana" Lisitry ny lahatsoratra, tehirizo lisitra misaraka amin'ny ID vaovao ao ArticlesIds ary mampandre ny mpampiasa momba izany. Rehefa manindry ny bokotra "Asehoy ny famoahana vaovao" isika, dia hampiditra ID vaovao fotsiny eo am-piandohan'ny lisitry ny lahatsoratra ankehitriny ary hiasa saika mahagaga ny zava-drehetra.

Mahafinaritra kokoa ny misintona

Ny icing amin'ny mofomamy refactoring dia ny foto-kevitry ny taolam-paty, izay mahatonga ny dingan'ny fampidinana votoaty amin'ny Internet miadana kokoa ho tsy maharikoriko. Tsy nisy adihevitra momba ity raharaha ity; naharitra adiny roa ara-bakiteny ny lalana avy amin'ny hevitra mankany amin'ny prototype. Saika nisarika ny sain'ny tenany ny famolavolana, ary nampianarinay ny singanay mba handika ireo sakana div tsotra sy zara raha mikitroka eo am-piandrasana ny angona. Amin'ny ankapobeny, io fomba fampidinana entana io dia mampihena ny habetsahan'ny hormonina adin-tsaina ao amin'ny vatan'ny mpampiasa. Toy izao ny skeleton:

Habr front-end developer logs: refactoring and reflecting
Habraloading

ny fisaintsainana

Efa enim-bolana aho no niasa tao HabrΓ© ary mbola manontany ny namako hoe: ahoana no tianao any? Okay, mahazo aina - eny. Saingy misy zavatra mampiavaka ity asa ity amin'ny hafa. Niasa tamina ekipa tsy niraharaha tanteraka ny vokatra azony aho, tsy nahalala na tsy nahatakatra hoe iza no mpampiasa azy. Tsy mitovy anefa ny zava-drehetra eto. Eto ianao dia mahatsapa ho tompon'andraikitra amin'ny zavatra ataonao. Eo am-pamolavolana endri-javatra iray dia lasa tompony ianao amin'ny ampahany, mandray anjara amin'ny fivorian'ny vokatra rehetra mifandraika amin'ny asanao, manaova soso-kevitra ary mandray fanapahan-kevitra. Ny fanaovana vokatra izay ampiasainao isan'andro dia tena mahafinaritra, fa ny fanoratana kaody ho an'ny olona izay mety ho tsara kokoa noho ianao dia fahatsapana tsy mampino fotsiny (tsy misy esoeso).

Taorian'ny famoahana ireo fanovana rehetra ireo dia nahazo valiny tsara izahay, ary tena tsara tokoa izany. Manentana. Misaotra anao! Manorata bebe kokoa.

MamelΓ  ahy hampahatsiahy anao fa taorian'ny variables manerantany dia nanapa-kevitra ny hanova ny maritrano izahay ary hametraka ny sosona proxy ho ohatra iray. Ny maritrano "node roa" dia efa nahatratra ny famoahana amin'ny endrika fitsapana beta ho an'ny daholobe. Afaka mifamadika amin'izany daholo izao ary manampy anay hanatsara ny Habr finday. Izay ihany ny anio. Ho faly aho hamaly ny fanontanianao rehetra amin'ny fanehoan-kevitra.

Source: www.habr.com

Add a comment