Habr n'ihu-ọgwụgwụ ndekọ ndekọ onye nrụpụta: imegharị na ịtụgharị uche

Habr n'ihu-ọgwụgwụ ndekọ ndekọ onye nrụpụta: imegharị na ịtụgharị uche

Enwere m mmasị mgbe niile ka esi ahazi Habr site n'ime, ka esi ahazi usoro ọrụ, ka esi ahazi nkwukọrịta, ụkpụrụ ndị a na-eji na otu esi ede koodu ebe a. Ọ dabara nke ọma, enwetara m ohere dị otú ahụ, n'ihi na n'oge na-adịbeghị anya m ghọrọ akụkụ nke otu habra. N'iji ihe atụ nke obere refactoring nke nsụgharị mobile, m ga-agbalị ịza ajụjụ a: gịnị ka ọ dị ka ịrụ ọrụ ebe a n'ihu. Na mmemme: Node, Vue, Vuex na SSR nwere ihendori sitere na ndetu banyere ahụmịhe nkeonwe na Habr.

Ihe mbụ ị kwesịrị ịma gbasara otu mmepe bụ na ọ dị ole na ole n'ime anyị. Ezughị ezu - ndị a bụ ihu atọ, azụ abụọ na ụzọ teknụzụ niile Habr - Baxley. Enwere, n'ezie, nwekwara onye nyocha, onye mmebe, Vadim atọ, broom ọrụ ebube, ọkachamara ahịa na ndị ọzọ Bumburums. Mana enwere naanị ndị enyemaka isii na isi mmalite Habr. Nke a bụ nnọọ obere - oru ngo na a multimillion-dollar na-ege ntị, nke si n'èzí dị ka a ibu enterprise, n'ezie yiri a mma mmalite na flattest nhazi Ọdịdị kwere omume.

Dị ka ọtụtụ ụlọ ọrụ IT ndị ọzọ, Habr na-ekwupụta echiche Agile, omume CI, na nke ahụ bụ ihe niile. Mana dị ka mmetụta m siri dị, Habr dị ka ngwaahịa na-etolite karịa na ebili mmiri karịa na-aga n'ihu. Ya mere, maka ọtụtụ sprints n'usoro, anyị na-eji nlezianya na-edepụta ihe, chepụta na imegharị ya, mebie ihe ma dozie ya, dozie tiketi ma mepụta ndị ọhụrụ, kwụpụ na rake ma gbaa onwe anyị n'ụkwụ, ka anyị wee hapụ njirimara ahụ n'ikpeazụ. mmepụta. Ma mgbe ahụ, a na-abịa ụfọdụ nkwụsịtụ, oge mmepe, oge ime ihe dị na "mkpa-adịghị ngwa ngwa" quadrant.

Ọ bụ kpọmkwem sprint "off-oge" a ga-atụle n'okpuru. Oge a ọ gụnyere nrụgharị nke ụdị mkpanaka nke Habr. N'ozuzu, ụlọ ọrụ ahụ nwere olile anya dị elu maka ya, na n'ọdịnihu ọ ga-eji dochie anụ ọhịa dum nke Habr's incarnations ma ghọọ ngwọta cross-platform zuru ụwa ọnụ. Otu ụbọchị, a ga-enwe nhazi mgbanwe, PWA, ọnọdụ offline, nhazi onye ọrụ na ọtụtụ ihe ndị ọzọ na-atọ ụtọ.

Ka anyị tọọ ọrụ ahụ

N'otu oge, na nkwụsị nkịtị, otu n'ime ndị ahụ n'ihu kwuru banyere nsogbu dị na nhazi nke nkọwa akụkụ nke nsụgharị mobile. N'iburu nke a n'uche, anyị haziri nzukọ micro-n'ụdị nke otu psychotherapy. Onye ọ bụla na-atụgharị n'otu n'otu na-ekwu ebe ọ na-ewute ya, ha dekọrọ ihe niile na akwụkwọ, nwee ọmịiko, ha ghọtara, ma e wezụga na ọ dịghị onye kụrụ aka. Nsonaazụ bụ ndepụta nke nsogbu 20, nke mere ka o doo anya na mobile Habr ka nwere ogologo ụzọ ogwu na-aga nke ọma.

Ihe kacha emetụ m n'obi bụ maka ịdị mma nke iji akụrụngwa yana ihe a na-akpọ interface dị nro. Kwa ụbọchị, n'ụzọ ụlọ-ọrụ-ụlọ, ahụrụ m ekwentị ochie m ka ọ na-achọsi ike igosipụta isi akụkọ 20 na ndepụta. Ọ dị ka nke a:

Habr n'ihu-ọgwụgwụ ndekọ ndekọ onye nrụpụta: imegharị na ịtụgharị ucheMobile Habr interface tupu ịmegharị ya

Kedu ihe na-eme ebe a? Na nkenke, ihe nkesa na-ejere onye ọ bụla ozi ibe HTML n'otu ụzọ ahụ, n'agbanyeghị ma onye ọrụ abanyela ma ọ bụ na ọ banyeghị. Mgbe ahụ onye ahịa JS na-eburu ma rịọ data dị mkpa ọzọ, mana emezigharịrị maka ikike. Ya bụ, anyị rụrụ otu ọrụ ugboro abụọ. Ihe nhụta ahụ na-amagharị, onye ọrụ ebudatara ezigbo narị mmezi kilobytes. N'ụzọ zuru ezu ihe niile lere anya ọbụna karịa creepy.

Habr n'ihu-ọgwụgwụ ndekọ ndekọ onye nrụpụta: imegharị na ịtụgharị ucheAtụmatụ SSR-CSR ochie. Ikike ga-ekwe omume naanị na ọkwa C3 na C4, mgbe Node JS anaghị arụ ọrụ n'ịmepụta HTML ma nwee ike ịrịọ proxy na API.

Otu onye n'ime ndị ọrụ Habr kọwara ụkpụrụ ụlọ anyị nke oge ahụ nke ọma:

Ụdị mkpanaka ahụ bụ ihe efu. M na-ekwu ya dị ka ọ dị. Njikọ dị egwu nke SSR na CSR.

Anyị aghaghị ịnakwere ya, n'agbanyeghị otú o si wute ya.

Achọpụtara m nhọrọ ndị ahụ, mepụta tiketi na Jira nwere nkọwa na ọkwa nke "ọ dị njọ ugbu a, mee ya nke ọma" wee mebie ọrụ ahụ na nnukwu ọrịa strok:

  • iji data ọzọ,
  • wedata ọnụ ọgụgụ redraw,
  • wepụ arịrịọ oyiri,
  • mee ka usoro nbudata ahụ pụta ìhè.

Ka anyị were data ọzọ

Na tiori, ihe nkesa-n'akụkụ ka e mere iji dozie nsogbu abụọ: ịghara ịta ahụhụ site na njedebe nke search engine na usoro nke Ndepụta nke SPA ma melite metrik FMP (na-apụghị izere ezere na-akawanye njọ TTI). Na a kpochapụwo dịruru ná njọ na n'ikpeazụ Emebere ya na Airbnb na 2013 afọ (ka dị na Backbone.js), SSR bụ otu ngwa JS isomorphic na-agba na gburugburu Node. Ihe nkesa ahụ na-eziga naanị nhazi nke emepụtara dị ka nzaghachi nye arịrịọ ahụ. Mgbe ahụ rehydration na-apụta n'akụkụ ndị ahịa, mgbe ahụ, ihe niile na-arụ ọrụ na-enweghị nbudata ibe. Maka Habr, dịka maka ọtụtụ akụrụngwa ndị ọzọ nwere ọdịnaya ederede, ịsụgharị ihe nkesa bụ ihe dị oke mkpa n'ịmelite mmekọrịta enyi na enyi na igwe ọchụchọ.

N'agbanyeghị na ihe karịrị afọ isii agafeela kemgbe ọbịbịa nke nkà na ụzụ, na n'oge a, ọtụtụ mmiri na-efe efe n'ezie n'okpuru àkwà mmiri na n'ihu-ọgwụgwụ ụwa, n'ihi na ọtụtụ ndị mmepe echiche a ka kpuchie na nzuzo. Anyị eguzoghị n'akụkụ wee wepụta ngwa Vue na nkwado SSR na mmepụta, na-efu otu obere nkọwa: anyị ezipụghị onye ahịa mbụ steeti.

Gịnị kpatara? Enweghị azịza ziri ezi nye ajụjụ a. Ma ọ bụ na ha achọghị ịbawanye nha nzaghachi sitere na ihe nkesa, ma ọ bụ n'ihi ọtụtụ nsogbu ụlọ ndị ọzọ, ma ọ bụ na ọ naghị apụ. Otu ụzọ ma ọ bụ ọzọ, ịtụfu steeti na iji ihe ọ bụla nke ihe nkesa ahụ mere yiri ihe kwesịrị ekwesị ma baa uru. N'ezie, ọrụ ahụ bụ obere ihe - a na-agba steeti naanị n'ime ọnọdụ ogbugbu, na Vue na-agbakwunye ya na-akpaghị aka na nhazi nke emepụtara dị ka mgbanwe zuru ụwa ọnụ: window.__INITIAL_STATE__.

Otu n'ime nsogbu ndị bilitere bụ enweghị ike ịtụgharị usoro cyclic ka ọ bụrụ JSON (ntụaka okirikiri); A na-edozi ya site n'iji ndị ogbo ha dị larịị dochie ihe owuwu ndị dị otú ahụ.

Na mgbakwunye, mgbe ị na-emeso ọdịnaya UGC, ị kwesịrị icheta na ekwesịrị ịtụgharị data ahụ na ụlọ ọrụ HTML ka ọ ghara imebi HTML. Maka ebumnuche ndị a anyị na-eji he.

Na-ebelata redraw

Dịka ị nwere ike ịhụ site na eserese dị n'elu, n'ọnọdụ anyị, otu Node JS na-arụ ọrụ abụọ: SSR na "proxy" na API, ebe ikike onye ọrụ pụtara. Ọnọdụ a na-eme ka ọ ghara ikwe omume inye ikike mgbe koodu JS na-agba ọsọ na ihe nkesa, ebe ọ bụ na ọnụ ọnụ bụ otu eriri, na ọrụ SSR na-ejikọta. Ya bụ, ihe nkesa enweghị ike izipu arịrịọ n'onwe ya mgbe calltack na-eji ihe arụ ọrụ. Ọ tụgharịrị na anyị na-emelite steeti ahụ, mana interface ahụ akwụsịghị ịgbatị, ebe ọ bụ na ekwesịrị imelite data dị na onye ahịa na-eburu n'uche oge onye ọrụ. Anyị kwesịrị ịkụziri ngwa anyị itinye data ziri ezi na steeti mbụ, na-eburu n'uche nbanye onye ọrụ.

Enwere naanị ụzọ abụọ maka nsogbu ahụ:

  • tinye data ikike na arịrịọ ihe nkesa;
  • kewaa Node JS n'ígwé gaa n'ụdị abụọ dị iche iche.

Ngwọta mbụ chọrọ iji mgbanwe mgbanwe zuru ụwa ọnụ na ihe nkesa, na nke abụọ gbatịpụrụ njedebe maka imecha ọrụ ahụ ma ọ dịkarịa ala otu ọnwa.

Kedu ka esi eme nhọrọ? Habr na-agakarị n'okporo ụzọ nke obere nguzogide. N'ụzọ na-edoghị anya, enwere ọchịchọ n'ozuzu iji belata okirikiri site n'echiche gaa na prototype gaa na opekempe. Ụdị omume maka ngwaahịa a bụ ihe na-echetara postulates nke booking.com, naanị ihe dị iche bụ na Habr na-ewere nzaghachi onye ọrụ nke ukwuu ma tụkwasa gị obi, dịka onye mmepụta, ime mkpebi ndị dị otú ahụ.

N'ịgbaso mgbagha a na ọchịchọ nke onwe m iji dozie nsogbu ahụ ngwa ngwa, ahọpụtara m mgbanwe mgbanwe ụwa. Na, dị ka ọ na-emekarị, ị ga-akwụ ụgwọ maka ha ngwa ngwa ma ọ bụ emechaa. Anyị na-akwụ ụgwọ ihe fọrọ nke nta ka ọ bụrụ ozugbo: anyị na-arụ ọrụ na ngwụsị izu, kpochaa nsonaazụ ya, dere post nwụrụ wee malite kewaa ihe nkesa ahụ ụzọ abụọ. Njehie ahụ dị nnọọ nzuzu, na ahụhụ metụtara ya adịghị mfe imepụtagharị. Ma ee, ọ bụ ihe ihere maka nke a, mana otu ụzọ ma ọ bụ ọzọ, ịsụ ngọngọ na ịsụ ude, PoC m nwere mgbanwe zuru ụwa ọnụ na-abanye na mmepụta ma na-arụ ọrụ nke ọma mgbe ọ na-echere ịkwaga na ụlọ ọhụrụ "abụọ-ọnụ". Nke a bụ nzọụkwụ dị mkpa, n'ihi na emezuru ihe mgbaru ọsọ ahụ n'ụzọ nkịtị - SSR mụtara ịnapụta ibe a na-ejikere kpamkpam, UI wee dịkwuo jụụ.

Habr n'ihu-ọgwụgwụ ndekọ ndekọ onye nrụpụta: imegharị na ịtụgharị ucheMobile Habr interface mgbe ọkwa mbụ nke refactoring gasịrị

N'ikpeazụ, ihe owuwu SSR-CSR nke ụdị mkpanaka na-eduga na foto a:

Habr n'ihu-ọgwụgwụ ndekọ ndekọ onye nrụpụta: imegharị na ịtụgharị uche"Ụdị ọnụ abụọ" SSR-CSR sekit. Node JS API na-adị njikere mgbe niile maka I/O asynchronous na ọrụ SSR anaghị egbochi ya, ebe ọ bụ na nke ikpeazụ dị n'ụdị dị iche. Anya ajụjụ #3 adịghị mkpa.

Na-ewepụ arịrịọ oyiri

Mgbe emechara mmegharị ahụ, nsụgharị mbụ e mere ibe ahụ anaghịzi akpasu ọrịa Akwụkwụ na-adọ. Mana iji Habr na ọnọdụ SPA ka na-akpata ọgba aghara.

Ebe ọ bụ na ndabere nke onye ọrụ eruba bụ mgbanwe nke ụdị ndepụta akụkọ → edemede → kwuru na nke ọzọ, ọ dị mkpa ịkwalite oriri akụrụngwa nke yinye a na mbụ.

Habr n'ihu-ọgwụgwụ ndekọ ndekọ onye nrụpụta: imegharị na ịtụgharị ucheỊlaghachi na ntanetị nzi ozi na-akpalite arịrịọ data ọhụrụ

Ọ dịghị mkpa igwu miri emi. Na nseta ihuenyo dị n'elu ị nwere ike ịhụ na ngwa ahụ na-arịọghachi ndepụta nke akụkọ mgbe ị na-atụgharị azụ, na n'oge arịrịọ anyị ahụghị akụkọ ahụ, nke pụtara na data gara aga na-apụ n'anya ebe. Ọ dị ka akụkụ ndepụta isiokwu na-eji steeti mpaghara wee tufuo ya na ibibi. N'ezie, ngwa a na-eji steeti zuru ụwa ọnụ, ma e wuru Vuex architecture n'isi: a na-ejikọta modul na ibe, nke n'aka nke ya na-ejikọta na ụzọ. Ọzọkwa, modul niile bụ “enwere ike ịtụfu” - nleta ọ bụla na-esote na ibe ahụ degharịrị modul ahụ niile:

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

Na mkpokọta, anyị nwere modul Ndepụta akụkọ, nke nwere ụdị ihe Nkeji edemede na modul Isiokwu ibe, nke bụ ihe gbatịrị agbatị nke ihe ahụ Nkeji edemede, ọ dị ka Akụkọ zuru oke. N'ozuzu, mmejuputa a anaghị ebu ihe ọ bụla dị egwu n'onwe ya - ọ dị nnọọ mfe, mmadụ nwere ike ikwu na-enweghị isi, ma ọ dị oke nghọta. Ọ bụrụ na ịtọgharịa modul ahụ oge ọ bụla ị gbanwere ụzọ, mgbe ahụ ị nwere ike ibi na ya. Agbanyeghị, ịkwaga n'etiti ndepụta akụkọ, dịka ọmụmaatụ / ndepụta → / niile, na-ekwe nkwa ịtụfu ihe niile metụtara nri nkeonwe, ebe ọ bụ na anyị nwere naanị otu Ndepụta akụkọ, nke ị chọrọ itinye ọhụrụ data. Nke a na-edugakwa anyị ọzọ na ntinye nke arịrịọ.

Mgbe m chịkọtachara ihe niile m nwere ike igwu n'isiokwu ahụ, m chepụtara usoro nhazi steeti ọhụrụ ma nyefee ya ndị ọrụ ibe m. Mkparịta ụka ndị ahụ dị ogologo, ma n'ikpeazụ arụmụka na-akwado karịa obi abụọ, m wee malite mmejuputa.

A na-ekpughe echiche nke ngwọta nke ọma na usoro abụọ. Mbụ anyị na-agbalị decouple Vuex modul site na ibe na jikọọ ozugbo na ụzọ. Ee, a ga-enwe ntakịrị data na ụlọ ahịa, getters ga-aghọ ntakịrị mgbagwoju anya, ma anyị agaghị ebu isiokwu ugboro abụọ. Maka ụdị mkpanaka, nke a nwere ike ịbụ arụmụka kacha sie ike. Ọ ga-adị ka nke a:

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

Mana gịnị ma ọ bụrụ na ndepụta akụkọ nwere ike ịgbakọ n'etiti ọtụtụ ụzọ yana gịnị ma ọ bụrụ na anyị chọrọ iji data ihe ọzọ mee ihe Nkeji edemede iji nye ibe akwụkwọ ozi, na-atụgharị ya Akụkọ zuru oke? N'okwu a, ọ ga-abụ ihe ezi uche dị na ya iji ụdị usoro a:

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

Ndepụta akụkọ ebe a ọ bụ naanị ụdị ebe nchekwa akụkọ. Akuko niile ebudatara n'oge nnọkọ onye ọrụ. Anyị na-elekọta ha nke ọma, n'ihi na nke a bụ okporo ụzọ nke nwere ike budata site na mgbu ebe na metro n'etiti ọdụ ụgbọ mmiri, na anyị achọghị n'ezie ime ka ihe mgbu na onye ọrụ ọzọ site na ịmanye ya ibu data na o nwere ugbua. ebudatara. Ihe AkụkọIds bụ naanị n'usoro nke ID (dị ka a ga-asị na "njikọ") na ihe Nkeji edemede. Ihe owuwu a na-enye gị ohere izere ịmegharị data nke a na-ahụkarị na ụzọ na iji ihe ahụ eme ihe Nkeji edemede mgbe ị na-enye ibe akwụkwọ ozi site na ijikọ data agbatịkwuru n'ime ya.

Nsonaazụ nke ndepụta nke akụkọ abụrụla nke ọma: akụrụngwa iterator na-atụgharị site na nhazi ya na ID edemede wee dọta akụrụngwa teaser isiokwu, na-agafe Id dị ka ihe mkpuchi, yana akụkụ ụmụaka, n'aka nke ya, na-ewepụta data dị mkpa site na. Ndepụta akụkọ. Mgbe ị gara na ibe mbipụta, anyị ga-enweta ụbọchị dị adị site na Ndepụta akụkọ, anyị na-arịọ arịrịọ iji nweta data efu ma tinye ya na ihe dị ugbu a.

Gịnị mere usoro a ji dị mma? Dịka m dere n'elu, usoro a dị nro karịa n'ihe gbasara data ebudatara ma na-enye gị ohere iji ya ọzọ. Ma e wezụga nke a, ọ na-emepe ụzọ maka ụfọdụ ohere ọhụrụ dabara adaba nke ọma n'ime ụlọ dị otú ahụ. Dịka ọmụmaatụ, ịtụ vootu na itinye akụkọ n'ime ndepụta ka ha pụtara. Anyị nwere ike itinye akwụkwọ ọhụrụ na "nchekwa" Ndepụta akụkọ, Chekwaa ndepụta dị iche iche nke ID ọhụrụ n'ime AkụkọIds ma gwa onye ọrụ gbasara ya. Mgbe anyị pịrị bọtịnụ “Gosi akwụkwọ ọhụrụ”, anyị ga-etinye ID ọhụrụ na mmalite nke ndepụta isiokwu dị ugbu a na ihe niile ga-arụ ọrụ nke ọma.

Na-eme ka nbudata na-atọ ụtọ karịa

Icing na achicha na-emegharị ahụ bụ echiche nke skeletons, nke na-eme ka usoro nbudata ọdịnaya na ịntanetị dị ngwa ngwa na-asọ oyi. Enweghị mkparịta ụka n'okwu a; ụzọ si n'echiche gaa na prototype were awa abụọ n'ụzọ nkịtị. Nhazi ahụ sere onwe ya, anyị kụzikwaara ihe ndị mejupụtara anyị ka ha na-eme ihe dị mfe, na-enweghị ike ime ka div blocks na-eche data. N'ikwu ya n'ụzọ ọzọ, ụzọ a na-ebu ibu na-ebelata oke homonụ nchekasị n'ime ahụ onye ọrụ. Ọkpụkpụ ahụ dị ka nke a:

Habr n'ihu-ọgwụgwụ ndekọ ndekọ onye nrụpụta: imegharị na ịtụgharị uche
Nbudata

Na-atụgharị uche

Anọ m na-arụ ọrụ na Habré ọnwa isii ma ndị enyi m ka na-ajụ: nke ọma, kedu ka ọ masịrị gị ebe ahụ? Ọ dị mma, ahụ iru ala - ee. Ma e nwere ihe na-eme ka ọrụ a dị iche na ndị ọzọ. M na-arụ ọrụ na otu ndị na-enweghị mmasị kpamkpam na ngwaahịa ha, amaghị ma ọ bụ ghọta ndị ọrụ ha bụ. Ma ebe a ihe niile dị iche. Ebe a ị na-eche maka ihe ị na-eme. Na usoro nke ịmepụta atụmatụ, ị ga-abụ onye nwe ya, sonye na nzukọ ngwaahịa niile metụtara ọrụ gị, nye ndụmọdụ ma mee mkpebi n'onwe gị. Ime ngwaahịa ị na-eji kwa ụbọchị n'onwe gị dị ezigbo mma, mana ide koodu maka ndị nwere ike ịka gị mma bụ naanị mmetụta dị egwu (enweghị mkparị).

Mgbe ahapụchara mgbanwe ndị a niile, anyị nwetara nzaghachi dị mma, ọ dịkwa oke mma ma mara mma. Ọ na-akpali akpali. Daalụ! Deekwuo.

Ka m chetara gị na mgbe mgbanwe zuru ụwa ọnụ anyị kpebiri ịgbanwe architecture na ekenye proxy oyi akwa n'ime a iche iche ihe atụ. Ihe owuwu ụlọ “ọnụ abụọ” erutela ntọhapụ n'ụdị nnwale beta ọha. Ugbu a onye ọ bụla nwere ike ịgbanwe na ya wee nyere anyị aka ime ka mobile Habr ka mma. Nke ahụ bụ maka taa. M ga-enwe obi ụtọ ịza ajụjụ gị niile na nkọwa.

isi: www.habr.com

Tinye a comment