Habr rangitaki kaiwhakawhanake mua-mutunga: refactoring me te whakaata

Habr rangitaki kaiwhakawhanake mua-mutunga: refactoring me te whakaata

I nga wa katoa e hiahia ana ahau ki te ahua o te hanganga o Habr mai i roto, me pehea te hanganga o te rerenga mahi, pehea te hanganga o nga whakawhitiwhiti korero, he aha nga paerewa e whakamahia ana me pehea te tuhi i te waehere ki konei. Waimarie, i whai waahi ahau, no te mea kua uru ahau ki te roopu habra. Ma te whakamahi i te tauira o te refactoring iti o te putanga pūkoro, ka ngana ahau ki te whakautu i te patai: he aha te ahua o te mahi i konei i mua. I roto i te kaupapa: Node, Vue, Vuex me SSR me te ranu mai i nga korero mo te wheako whaiaro i Habr.

Ko te mea tuatahi e hiahia ana koe ki te mohio mo te roopu whanaketanga he tokoiti o matou. Kare e ranea - e toru enei o mua, e rua nga tuara me te kaiarahi hangarau o Habr - Baxley katoa. Ko te tikanga, he kaiwhakaatu ano, he kaihoahoa, e toru nga Vadim, he purumi merekara, he tohunga hokohoko me etahi atu Bumburums. Engari e ono noa nga kaikauru tika ki nga puna a Habr. He tino onge tenei - he kaupapa me te mano tini miriona taara, mai i waho te ahua o te hinonga nui, i roto i te mooni, he rite tonu te ahua o te whakaoho pai me te hanganga whakahaere tino pai.

Pērā i te maha atu o nga kamupene IT, e kii ana a Habr i nga whakaaro Agile, nga mahi CI, me era atu. Engari e ai ki aku kare-a-roto, ko Habr hei hua kei te piki ake i roto i nga ngaru i te haere tonu. Na, mo te maha o nga sprints i roto i te rarangi, ka kaha taatau ki te tohu i tetahi mea, te hoahoa me te hoahoa ano, ka pakaru tetahi mea ka whakatika, ka whakatau i nga tikiti me te hanga i nga mea hou, ka eke ki runga i te rake ka kopere i o tatou waewae, kia pai ai te tuku i te waahanga ki roto. hangahanga. Na ka tae mai he wa mokemoke, he wa whakatikatika, he wa ki te mahi i nga mea kei roto i te waahanga "nui-kaore i te akiaki".

Koia tonu tenei omaoma "wa-waa" ka korerohia i raro nei. I tenei wa i whakauruhia he refactoring o te putanga pūkoro o Habr. I te nuinga o te waa, he nui te tumanako o te kamupene, a, i te wa kei te heke mai me whakakapi te katoa o te zoo o Habr incarnations ka waiho hei otinga whakawhiti-a-ao. He ra ka puta te whakatakotoranga urutau, PWA, aratau tuimotu, whakaritenga kaiwhakamahi, me te maha atu o nga mea whakamere.

Me whakarite te mahi

I tetahi wa, i tetahi tuunga noa, ka korero tetahi o mua mo nga raru o te hoahoanga o te waahanga korero o te putanga pūkoro. I runga i tenei whakaaro, i whakaritea e matou he hui moroiti ki te whakatakotoranga o te whakamaarama hinengaro roopu. Ka huri nga tangata katoa ki te korero ki hea te mamae, ka tuhia nga mea katoa ki te pepa, ka aroha, ka mohio, engari kaore he tangata i pakipaki. Ko te hua ko te rarangi o nga raru e 20, i marama ai he huarahi roa, he tataramoa hoki to Habr pūkoro ki te angitu.

I tino awangawanga ahau mo te pai o te whakamahi rauemi me te mea e kiia nei he atanga maeneene. I nga ra katoa, i runga i te huarahi mahi-whare-whare, ka kite ahau i taku waea tawhito e tino ngana ana ki te whakaatu i nga upoko 20 i roto i te whangai. He penei te ahua:

Habr rangitaki kaiwhakawhanake mua-mutunga: refactoring me te whakaataAtanga Habr pūkoro i mua i te refactoring

He aha kei konei? Hei poto, he rite tonu te mahi a te kaimau ki te wharangi HTML ki nga tangata katoa, ahakoa kua takiuru te kaiwhakamahi, kaore ranei. Na ka utaina te kiritaki JS ka tono ano i nga raraunga e tika ana, engari ka whakatikahia mo te whakamana. Arā, e rua nga wa i mahi ai matou i taua mahi ano. Ka korikori te atanga, ka tango te kaiwhakamahi i te pai rau kiropaita pai. I roto i nga korero mo nga mea katoa, he ahua tino whakamataku.

Habr rangitaki kaiwhakawhanake mua-mutunga: refactoring me te whakaataKaupapa SSR-CSR tawhito. Ka taea anake te whakamanatanga i nga wahanga C3 me C4, ina karekau a Node JS i te pukumahi ki te whakaputa HTML ka taea te tono takawaenga ki te API.

Ko ta maatau hoahoanga o tera wa i tino tika te korero e tetahi o nga kaiwhakamahi Habr:

Ko te putanga pūkoro he crap. Kei te penei taku korero. He huinga whakamataku o SSR me TKT.

Me whakaae matou, ahakoa te pouri.

I aromatawaihia e ahau nga whiringa, i hanga he tiiti ki Jira me te whakaahuatanga i te taumata "he kino inaianei, mahia tika" me te whakakore i te mahi i roto i nga whiu whanui:

  • whakamahi ano i nga raraunga,
  • whakaitihia te maha o nga tuhi ano,
  • whakakorehia nga tono taarua,
  • kia marama ake te tukanga uta.

Me whakamahi ano i nga raraunga

I roto i te ariā, kua hoahoatia te whakaputa taha-tumau ki te whakaoti rapanga e rua: kia kaua e pa ki nga herenga miihini rapu mo SPA taupū me te whakapai ake i te ine FMP (e kore e kore e kino haere TTI). I roto i te tauari matarohia e te mutunga i hangaia i Airbnb i te tau 2013 tau (kei runga tonu i te Backbone.js), ko te SSR te tono JS isomorphic e rere ana i te taiao Node. Ka tukuna noa e te tūmau te whakatakotoranga i hangaia hei whakautu ki te tono. Na ka puta te rehydration ki te taha o te kiritaki, katahi ka mahi nga mea katoa me te kore e utaina ano te whaarangi. Mo Habr, mo te maha atu o nga rauemi kei roto i nga tuhinga tuhinga, he mea tino nui te whakamaarama a te tūmau ki te hanga hononga hoa ki nga miihini rapu.

Ahakoa te mea kua neke atu i te ono nga tau kua pahemo mai i te taenga mai o te hangarau, a, i tenei wa kua tino rere te nui o te wai i raro i te piriti i te ao o mua, mo te maha o nga kaiwhakawhanake kei te huna tonu tenei whakaaro ki te huna. Kaore matou i tu ki tahaki ka huri i tetahi tono Vue me te tautoko SSR ki te hanga, ka ngaro tetahi korero iti: kaore i tukuna e matou te ahua tuatahi ki te kaihoko.

He aha? Karekau he whakautu tika mo tenei patai. Kaore ranei ratou i pai ki te whakanui ake i te rahi o te whakautu mai i te kaimau, na te maha atu o nga raru o te hoahoanga, kaore ranei i eke. I tetahi ara, i tetahi atu ranei, ka maka atu i te kawanatanga me te whakamahi ano i nga mea katoa i mahia e te kaimau te ahua tika me te whai hua. He iti noa te mahi - ka werohia noa te kawanatanga ki te horopaki mahi, ka taapiri aunoatia e Vue ki te tahora kua hangaia hei taurangi ao: window.__INITIAL_STATE__.

Ko tetahi o nga raruraru kua puta ake ko te kore e kaha ki te huri i nga hanganga huringa ki JSON (tohutoro porohita); i whakatauhia ma te whakakapi noa i aua hanganga ki o ratou ahua papatahi.

I tua atu, i te wa e pa ana ki nga ihirangi UGC, me mahara koe me tahuri nga raraunga ki nga hinonga HTML kia kore ai e pakaru te HTML. Mo enei kaupapa ka whakamahia e matou he.

Te whakaiti i te tuhi ano

Ka taea e koe te kite mai i te hoahoa i runga ake nei, i roto i ta maatau take, ka mahia e tetahi tauira Node JS e rua nga mahi: SSR me te "kaitauwaenga" i roto i te API, kei reira te mana o te kaiwhakamahi. Ko tenei ahuatanga kaore e taea te whakamana i te wa e rere ana te waehere JS i runga i te tūmau, i te mea he miro kotahi te node, a he tukutahi te mahi SSR. Arā, kaore e taea e te tūmau te tuku tono ki a ia ano i te wa e pukumahi ana te callstack ki tetahi mea. I puta mai kua whakahoutia e matou te kawanatanga, engari kaore i mutu te atanga, na te mea me whakahou nga raraunga i runga i te kaihoko me te whakaaro ki te huihuinga kaiwhakamahi. I hiahia matou ki te whakaako i ta maatau tono ki te whakauru i nga raraunga tika ki te ahua tuatahi, me te whai whakaaro ki te takiuru o te kaiwhakamahi.

E rua noa nga otinga mo te raru:

  • whakapirihia nga raraunga whakamana ki nga tono whakawhiti-tumau;
  • wehea nga paparanga Node JS kia rua nga waahanga motuhake.

Ko te otinga tuatahi ko te whakamahi i nga taurangi o te ao i runga i te tūmau, me te tuarua i whakawhānuihia te wa mutunga mo te whakaoti i te mahi i te iti rawa i te marama.

Me pehea te whiriwhiri? He maha nga wa ka neke a Habr i te ara o te aukati iti. I runga i te opaki, he hiahia nui ki te whakaiti i te huringa mai i te whakaaro ki te tauira ki te iti. Ko te tauira o te waiaro ki te hua he ahua maumahara ki nga panui o booking.com, ko te rereketanga anake ko te kaha ake o te whakaaro a Habr ki nga urupare a nga kaiwhakamahi me te whakawhirinaki ki a koe, hei kaiwhakawhanake, ki te whakatau i aua whakatau.

I muri i tenei arorau me taku ake hiahia kia tere te whakaoti rapanga, i whiriwhiria e au nga taurangi o te ao. A, i te nuinga o nga wa, me utu e koe mo ratou i muri mai. I utua e matou tata tonu: i mahi matou i te wiki, ka whakatika i nga hua, ka tuhi pou tirotiro ka timata ki te wehewehe i te tūmau kia rua nga wahanga. He tino poauau te hapa, a ko te pepeke e pa ana ki a ia ehara i te mea ngawari ki te whakaputa uri. Ae, he mea whakama tenei, engari i tetahi huarahi, i tetahi atu, tutuki me te aue, ko taku PoC me nga taurangi o te ao i uru ki te mahi me te mahi angitu i te wa e tatari ana mo te neke ki te hoahoanga "rua-node" hou. He mahi nui tenei, na te mea i tutuki okawa te whainga - I ako a SSR ki te whakaputa i tetahi wharangi kua reri-ki-te-whakamahi, a kua tino marino te UI.

Habr rangitaki kaiwhakawhanake mua-mutunga: refactoring me te whakaataAtanga Habr pūkoro i muri i te wahanga tuatahi o te refactoring

I te mutunga, ko te hoahoanga SSR-CSR o te putanga pūkoro ka arahi ki tenei pikitia:

TuhingaHabr rangitaki kaiwhakawhanake mua-mutunga: refactoring me te whakaata"rua-node" ara iahiko SSR-CSR. Kei te reri tonu te API Node JS mo te I/O tukutahi, a, kaore i te aukatihia e te mahi SSR, na te mea kei roto te waahanga o muri i tetahi tauira motuhake. Ko te mekameka patai #3 kaore e hiahiatia.

Te whakakore i nga tono taarua

Whai muri i nga mahi raweke, kua kore te whakaputanga tuatahi o te wharangi i whakapataritari i te mate mate. Engari ko te whakamahi ano i te Habr i roto i te aratau SPA ka raru tonu.

I te mea ko te putake o te rere o te kaiwhakamahi ko nga whakawhitinga o te puka rarangi tuhinga → tuhinga → korero me te rereke, he mea nui ki te arotau i te kohi rawa o tenei mekameka i te tuatahi.

Habr rangitaki kaiwhakawhanake mua-mutunga: refactoring me te whakaataKo te hoki ki te whangai whakairinga ka whakapataritari i te tono raraunga hou

Kaore he take ki te keri hohonu. I roto i te mata o runga ka kite koe kei te tono ano te tono ki te rarangi o nga tuhinga ka huri whakamuri, a i te wa o te tono kaore matou e kite i nga tuhinga, ko te tikanga ka ngaro nga raraunga o mua ki tetahi waahi. Te ahua nei kei te whakamahi te waahanga rarangi tuhinga i tetahi ahuatanga o te rohe ka ngaro i te wa ka ngaro. Ko te tikanga, i whakamahia e te tono te ahua o te ao, engari ko te hoahoanga a Vuex i hangaia ma te upoko: ka herea nga waahanga ki nga wharangi, ka herea ki nga huarahi. I tua atu, he "tuku" nga waahanga katoa - ko ia haerenga i muri mai ki te wharangi ka tuhi ano i te waahanga katoa:

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

I te katoa, he kōwae ta matou Rarangi Tuhinga, kei roto nga momo momo Tuhinga me te kōwae WhārangiTuhinga, he putanga roa o te ahanoa Tuhinga, momo TuhingaKatoa. I te nuinga o te waa, ko tenei whakatinanatanga kaore he mea whakamataku i a ia ano - he tino ngawari, ka kii pea tetahi he maamaa, engari he tino mohio. Mena ka tautuhi ano koe i te waahanga i nga wa katoa ka huri koe i te huarahi, katahi ka taea e koe te noho me tera. Heoi, ko te neke i waenga i nga whangai tuhinga, hei tauira /whangai → /katoa, ka whakamanahia ki te maka atu i nga mea katoa e pa ana ki te whangai whaiaro, na te mea kotahi noa ta matou Rarangi Tuhinga, me whakauru koe i nga raraunga hou. Ma tenei ka arahi ano tatou ki te taarua o nga tono.

Ka kohia e ahau nga mea katoa i taea e au te keri mo te kaupapa, ka hangaia e au he hanganga kawanatanga hou ka tukuna atu ki aku hoa mahi. He roa nga korero, engari i te mutunga ko nga tohenga tautoko i nui ake i nga feaa, ka timata ahau ki te whakatinana.

Ko te arorau o te otinga ka tino kitea i roto i nga waahanga e rua. Tuatahi ka ngana tatou ki te wetewete i te waahanga Vuex mai i nga wharangi ka here tika ki nga huarahi. Ae, he iti ake nga raraunga kei roto i te toa, ka iti ake te uaua o nga kaitoro, engari kaore matou e utaina nga tuhinga kia rua. Mo te putanga pūkoro, koinei pea te tautohetohe tino kaha. Ka penei te ahua:

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

Engari ka pewhea mena ka whiti nga rarangi tuhinga i waenga i nga huarahi maha me te aha mena ka hiahia taatau ki te whakamahi ano i nga raraunga ahanoa Tuhinga ki te whakaputa i te wharangi panui, ka huri hei TuhingaKatoa? I tenei keehi, he pai ake te whakamahi i taua hanganga:

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

Rarangi Tuhinga i konei he momo putunga tuhinga noa iho. Ko nga tuhinga katoa i tangohia i te wa o te waahi kaiwhakamahi. Ka tino tupato matou ki a raatau, na te mea ko nga waka tenei i tangohia ma te mamae i tetahi waahi o te metro i waenga i nga teihana, a kaore matou e pai ki te whakahoki ano i tenei mamae ki te kaiwhakamahi ma te akiaki i a ia ki te uta i nga raraunga kua oti ia ia. kua tikiake. He ahanoa TuhingaId he huinga TT noa (me te mea he "hononga") ki nga taonga Tuhinga. Ma tenei hanganga ka taea e koe te karo i te taarua raraunga noa ki nga huarahi me te whakamahi ano i te ahanoa Tuhinga i te wa e whakaputa ana i te wharangi panui ma te whakakotahi i nga raraunga roa ki roto.

Ko te whakaputanga o te rarangi o nga tuhinga kua tino marama ake: ka huri te wahanga o te kaiwhakawhitiwhiti i roto i te huinga me nga ID tuhinga ka kumea te wahanga teaser tuhinga, ka tukuna te Id hei tautoko, a ko te waahanga tamaiti, ka tango i nga raraunga e tika ana mai i Rarangi Tuhinga. Ina haere koe ki te wharangi whakaputanga, ka whiwhi tatou i te ra o mua mai Rarangi Tuhinga, ka tono matou ki te tiki i nga raraunga ngaro me te taapiri noa ki te ahanoa o naianei.

He aha i pai ake ai tenei huarahi? Ka rite ki taku i tuhi i runga ake nei, he ngawari ake tenei huarahi mo nga raraunga kua tangohia ake ka taea e koe te whakamahi ano. Engari i tua atu i tenei, ka whakatuwherahia te huarahi ki etahi huarahi hou e uru pai ana ki taua hoahoanga. Hei tauira, ko te pooti me te uta i nga tuhinga ki roto i te whangai ka puta. Ka taea noa e maatau te tuku i nga panui hou ki roto i te "pupuhi" Rarangi Tuhinga, tiakina he rarangi motuhake o nga ID hou ki roto TuhingaId me te whakamohio ki te kaiwhakamahi mo taua mea. Ka paato tatou i te paatene "Whakaatuhia nga panui hou", ka whakauru noa i nga Id hou ki te timatanga o te rarangi o nga rarangi o naianei o nga tuhinga ka mahi nga mea katoa.

Kia pai ake te tango ake

Ko te tio i runga i te keke refactoring ko te ariā o nga koiwi, na te mea ka iti te whakarihariha ki te tango i nga ihirangi i runga ipurangi puhoi. Karekau he korerorero mo tenei take; e rua haora te roa o te huarahi mai i te whakaaro ki te tauira tauira. Ko te hoahoa i tuhi i a ia ano, a ka ako matou i o maatau waahanga ki te whakaputa i nga poraka div ngawari, tata nei e korikori ana i te wa e tatari ana mo nga raraunga. Ko te tikanga, ko tenei huarahi ki te utaina ka tino whakaiti i te nui o nga homoni ahotea i roto i te tinana o te kaiwhakamahi. Ko te ahua o te kōiwi penei:

Habr rangitaki kaiwhakawhanake mua-mutunga: refactoring me te whakaata
Habraloading

Te whakaata

E ono marama ahau e mahi ana i Habré, ka patai tonu aku hoa: he pai ki a koe i reira? Ka pai, he pai - ae. Engari tera ano tetahi mea e rerekee ai tenei mahi i etahi atu. I mahi ahau i roto i nga roopu kaore i tino aro ki o raatau hua, kaore i te mohio, i te mohio ranei ko wai o raatau kaiwhakamahi. Engari i konei he rereke nga mea katoa. I konei ka mohio koe he kawenga mo o mahi. I te tukanga o te whakawhanake i tetahi ahuatanga, ko koe tetahi waahanga hei rangatira, uru ki nga huihuinga hua katoa e pa ana ki o mahi, tuku whakaaro me te whakatau koe. Ko te hanga hua ka whakamahia e koe i nga ra katoa he tino hauhautanga, engari ko te tuhi i nga tohu mo nga tangata e pai ake ana ki a koe, he mea whakamiharo noa (kaore he tawai).

I muri i te tukunga o enei huringa katoa, i whiwhi urupare pai, a he tino pai. He mea whakahihiri. Mauruuru koe! Tuhia atu.

Me whakamahara ahau ki a koe i muri i nga taurangi o te ao ka whakatau matou ki te whakarereke i te hoahoanga me te tohatoha i te paparanga takawaenga ki tetahi tauira motuhake. Ko te hoahoanga "rua-node" kua tae ki te tuku i te ahua o te whakamatautau beta a te iwi. Inaianei ka taea e tetahi te huri ki reira ka awhina i a maatau ki te whakapai ake i te Habr pūkoro. Heoi ano mo tenei ra. Ka koa ahau ki te whakautu i o patai katoa i roto i nga korero.

Source: will.com

Tāpiri i te kōrero