Li-logs tsa nts'etsopele ea Habr-end: refactoring le ho nahanisisa

Li-logs tsa nts'etsopele ea Habr-end: refactoring le ho nahanisisa

Ke 'nile ka thahasella hore na Habr e hlophisitsoe joang ho tloha ka hare, hore na mosebetsi oa ho sebetsa o hlophisitsoe joang, hore na puisano e hlophisitsoe joang, ke litekanyetso life tse sebelisoang le hore na khoutu e ngotsoe joang ka kakaretso mona. Ka lehlohonolo, ke fumane monyetla o joalo, hobane haufinyane tjena ke ile ka ba karolo ea sehlopha sa habra. Ke sebelisa mohlala oa phetoho e nyane ea mofuta oa mobile, ke tla leka ho araba potso: ho joang ho sebetsa mona ka pele. Lenaneong: Node, Vue, Vuex le SSR e nang le sauce e tsoang ho lintlha tse mabapi le phihlelo ea botho ho Habr.

Ntho ea pele eo u hlokang ho e tseba ka sehlopha sa nts'etsopele ke hore ho na le ba fokolang ba rona. Ha hoa lekana - tsena ke likarolo tse tharo, mekokotlo e 'meli le moetapele oa tekheniki oa bohle Habr - Baxley. Ha e le hantle, ho boetse ho na le tester, moqapi, Vadim ba bararo, lefielo la mohlolo, setsebi sa papatso le Bumburums tse ling. Empa ho na le bafani ba tšeletseng feela ba tobileng mehloling ea Habr. Sena ke ntho e sa tloaelehang - morero o nang le bamameli ba lidolara tse limilione tse ngata, oo ka ntle o shebahalang eka ke khoebo e kholo, ha e le hantle e shebahala e le qalo e monate ka ho fetisisa e nang le mokhatlo o hlophisitsoeng o ka khonehang.

Joalo ka lik'hamphani tse ling tse ngata tsa IT, Habr o fana ka maikutlo a Agile, litloaelo tsa CI, 'me ke phetho. Empa ho ea ka maikutlo a ka, Habr joalo ka sehlahisoa e ntse e hola ka maqhubu ho feta khafetsa. Kahoo, bakeng sa mabelo a 'maloa ka tatellano, re khouta ntho e itseng, ho rala le ho hlophisa bocha, ho roba ntho ebe re e lokisa, ho rarolla litekete le ho theha tse ncha, re hata ka har'a rake ebe re ithunya maotong, e le hore qetellong re lokolle tšobotsi eo. tlhahiso. 'Me joale ho tla nako e itseng e khutsitseng, nako ea ntlafatso, nako ea ho etsa se ka har'a "bohlokwa-e seng ka potlako" quadrant.

Ehlile ke lebelo lena la "off-season" le tla tšohloa ka tlase. Lekhetlong lena e kenyelelitse ntlafatso ea mofuta oa mobile oa Habr. Ka kakaretso, k'hamphani e na le tšepo e kholo bakeng sa eona, 'me nakong e tlang e lokela ho nkela sebaka sa zoo eohle ea Habr's incarnations 'me e be tharollo ea bokahohleng. Ka letsatsi le leng ho tla ba le sebopeho se ikamahanyang le maemo, PWA, mokhoa o kantle ho marang-rang, tloaelo ea basebelisi le lintho tse ling tse ngata tse khahlisang.

Ha re behe mosebetsi

Ka nako e 'ngoe, sebakeng se tloaelehileng sa ho ema, e mong oa pele o ile a bua ka mathata a moralo oa karolo ea maikutlo ea mofuta oa mobile. Re nahanne ka sena, re hlophisitse kopano e nyane ka sebopeho sa psychotherapy ea sehlopha. E mong le e mong o ne a chenchana ho bua moo ho utloisang bohloko, ba ile ba ngola ntho e ’ngoe le e ’ngoe pampiring, ba utloela bohloko, ba utloisisa, ntle le hore ha ho motho ea opang liatla. Sephetho e bile lethathamo la mathata a 20, a hlakisitseng hore mobile Habr o ne a ntse a e-na le tsela e telele le e meutloa ea katleho.

Ke ne ke amehile haholo ka katleho ea tšebeliso ea lisebelisoa le seo ho thoeng ke sebopeho se boreleli. Letsatsi le leng le le leng, tseleng ea hae ea mosebetsi oa lapeng, ke ne ke bona mohala oa ka oa khale o leka ka matla ho hlahisa lihlooho tse 20 ho fepa. E ne e shebahala tjena:

Li-logs tsa nts'etsopele ea Habr-end: refactoring le ho nahanisisaMobile Habr interface pele refactoring

Ho etsahalang moo? Ka bokhutšoanyane, seva se ile sa sebeletsa leqephe la HTML ho motho e mong le e mong ka tsela e ts'oanang, ho sa tsotellehe hore na mosebedisi o kene kapa che. Ebe moreki JS e laeloa mme e kopa data e hlokahalang hape, empa e lokiselitsoe tumello. Ke hore, ka ‘nete re entse mosebetsi o le mong habeli. Khokahano e ile ea fifala, 'me mosebelisi a khoasolla li-kilobyte tse ling tse makholo. Ka botlalo, ntho e 'ngoe le e 'ngoe e ne e bonahala e tšosa le ho feta.

Li-logs tsa nts'etsopele ea Habr-end: refactoring le ho nahanisisaSekema sa khale sa SSR-CSR. Tumello e khoneha feela ka mekhahlelo ea C3 le C4, ha Node JS e sa phathahane ho hlahisa HTML mme e ka etsa likopo tsa moemeli ho API.

Mehaho ea rona ea mehleng eo e hlalositsoe ka nepo ke e mong oa basebelisi ba Habr:

Mofuta oa mobile ha o na thuso. Ke bolela joalo ka ha ho le joalo. Motsoako o mobe oa SSR le CSR.

Re ile ra tlameha ho e lumela, ho sa tsotellehe hore na e ne e le masoabi hakae.

Ke ile ka lekola likhetho, ka theha tekete ea Jira e nang le tlhaloso boemong ba "ho hobe hona joale, e etse hantle" mme ka senya mosebetsi ka matla a pharaletseng:

  • sebelisa hape data,
  • fokotsa palo ea li-redraws,
  • tlosa likopo tse kopitsoang,
  • etsa hore mokhoa oa ho kenya o hlake haholoanyane.

Ha re sebeliseng data hape

Ka khopolo, ho fana ka lehlakoreng la seva ho etselitsoe ho rarolla mathata a mabeli: ho se utloe bohloko ka mefokolo ea enjine ea ho batla ho latela SPA indexing le ho ntlafatsa metric FMP (e ntse e mpefala TTI). A classic boemo hore qetellong e thehiloe ho Airbnb ka 2013 selemo (e ntse e le Backbone.js), SSR ke ts'ebeliso e ts'oanang ea isomorphic JS e sebetsang tikolohong ea Node. Seva e romella feela sebopeho se hlahisitsoeng e le karabo ho kopo. Ebe ho khutlisetsa metsi 'meleng ka lehlakoreng la bareki, ebe ntho e' ngoe le e 'ngoe e sebetsa ntle le ho kenya leqephe hape. Bakeng sa Habr, joalo ka lisebelisoa tse ling tse ngata tse nang le litaba tsa mongolo, ho fana ka seva ke ntho ea bohlokoa ho aheng likamano tsa botsoalle le lienjineri tsa ho batla.

Ho sa tsotellehe taba ea hore ho se ho fetile lilemo tse fetang tse tšeletseng ho tloha ha theknoloji e qala, 'me nakong ena metsi a mangata a hlile a phalla tlas'a borokho lefats'eng la pele-pele, ho bahlahisi ba bangata khopolo ena e ntse e koahetsoe ke sephiri. Ha rea ​​ka ra ema ka thoko 'me ra kenya kopo ea Vue ka tšehetso ea SSR ho hlahisa, re haelloa ke lintlha tse nyane: ha rea ​​ka ra romela boemo ba pele ho moreki.

Hobaneng? Ha ho karabo e tobileng potsong ena. Mohlomong ba ne ba sa batle ho eketsa boholo ba karabelo ho tsoa ho seva, kapa ka lebaka la mathata a mang a meralo, kapa ha ea ka ea tloha feela. Ka tsela e 'ngoe, ho lahla boemo le ho sebelisa hape ntho e' ngoe le e 'ngoe eo seva e e entseng ho bonahala e nepahetse ebile e le molemo. Ha e le hantle, mosebetsi o monyenyane - boemo bo kentsoe feela moelelong oa ts'ebetso, 'me Vue e e eketsa ka bo eona ho sebopeho se hlahisitsoeng e le phetoho ea lefats'e: window.__INITIAL_STATE__.

E 'ngoe ea mathata a hlahileng ke ho se khone ho fetolela meaho ea cyclic ho JSON (litšupiso tse chitja); e ile ea rarolloa ka hore feela ho behoe meaho e joalo sebakeng sa eona e bataletseng.

Ho phaella moo, ha u sebetsana le litaba tsa UGC, u lokela ho hopola hore data e lokela ho fetoloa ho mekhatlo ea HTML e le hore e se ke ea senya HTML. Bakeng sa merero ena re sebelisa he.

Ho fokotsa li-redraws

Joalokaha u ka bona setšoantšong se ka holimo, molemong oa rona, mohlala o le mong oa Node JS o etsa mesebetsi e 'meli: SSR le "proxy" ho API, moo tumello ea mosebedisi e hlahang teng. Boemo bona bo etsa hore ho se khonehe ho fana ka tumello ha khoutu ea JS e ntse e sebetsa ho seva, kaha node e na le khoele e le 'ngoe,' me mosebetsi oa SSR o lumellana. Ka mantsoe a mang, seva ha e khone ho romela likopo ho eona ha callstack e ntse e tšoarehile ka ntho e itseng. Ho ile ha fumaneha hore re ntlafalitse mmuso, empa sebopeho ha sea ka sa emisa ho sisinyeha, kaha data ho moreki e ne e tlameha ho nchafatsoa ho nahanoa ka nako ea mosebelisi. Re ne re hloka ho ruta kopo ea rona ho beha lintlha tse nepahetseng boemong ba pele, re ela hloko ho kena ha mosebedisi.

Ho ne ho e-na le litharollo tse peli feela bothateng:

  • hokela data ea tumello ho likopo tsa li-cross-server;
  • arola likarolo tsa Node JS ka maemo a mabeli a arohaneng.

Tharollo ea pele e ne e hloka tšebeliso ea mefuta-futa ea lefats'e ho seva, 'me ea bobeli e ile ea eketsa nako ea ho qetela ea ho qeta mosebetsi bonyane khoeli.

Joang ho etsa khetho? Hangata Habr o tsamaea tseleng ea ho hanyetsa ho fokolang. Ka mokhoa o sa reroang, ho na le takatso e akaretsang ea ho fokotsa potoloho ho tloha mohopolong ho ea ho mohlala ho ea bonyane. Mokhoa oa maikutlo mabapi le sehlahisoa o batla o re hopotsa litaba tsa booking.com, 'me phapang feela ke hore Habr o nka maikutlo a basebelisi ka botebo le ho feta mme o tšepa uena, joalo ka moqapi, ho etsa liqeto tse joalo.

Ho latela mohopolo ona le takatso ea ka ea ho rarolla bothata kapele, ke ile ka khetha mefuta e fapaneng ea lefats'e. 'Me, hangata ho etsahala, u tlameha ho li lefella kapele kapa hamorao. Re ile ra lefa hoo e ka bang hang-hang: re ile ra sebetsa mafelo-beke, ra hlakola liphello, ra ngola lefu la sefuba mme a qala ho arola seva ka dikarolo tse pedi. Phoso e ne e le bothoto haholo, 'me phoso e e amang ho ne ho se bonolo ho e hlahisa. E, ke ntho e hlabisang lihlong bakeng sa sena, empa ka tsela e 'ngoe kapa e' ngoe, ho khoptjoa le ho bobola, PoC ea ka e nang le mefuta-futa ea lefats'e leha ho le joalo e kene tlhahisong 'me e sebetsa ka katleho ha e ntse e emetse ho fallela mohahong o mocha oa "node tse peli". Ena e ne e le mohato oa bohlokoa, hobane sepheo se ile sa finyelloa - SSR e ithutile ho fana ka leqephe le loketseng ho sebelisoa, 'me UI e ile ea khutsa haholoanyane.

Li-logs tsa nts'etsopele ea Habr-end: refactoring le ho nahanisisaSebopeho sa Mobile Habr ka mor'a mohato oa pele oa refactoring

Qetellong, meralo ea SSR-CSR ea mofuta oa mobile e lebisa setšoantšong sena:

Li-logs tsa nts'etsopele ea Habr-end: refactoring le ho nahanisisa"Tso-node" SSR-CSR potoloho. Node JS API e lula e itokiselitse I / O ea asynchronous mme ha e thibetsoe ke ts'ebetso ea SSR, kaha ea morao-rao e fumaneha ka mokhoa o fapaneng. Potso ketane #3 ha e hlokehe.

Ho tlosa likopo tse kopitsoang

Ka mor'a hore ho etsoe maqheka ana, phetolelo ea pele ea leqephe leo ha ea ka ea hlola e baka lefu la sethoathoa. Empa ts'ebeliso e tsoelang pele ea Habr ka mokhoa oa SPA e ntse e baka pherekano.

Kaha motheo oa phallo ea basebelisi ke liphetoho tsa foromo lethathamo la lingoliloeng → sengoloa → maikutlo 'me ka tsela e fapaneng, ho ne ho le bohlokoa ho ntlafatsa tšebeliso ea lisebelisoa tsa ketane ena pele.

Li-logs tsa nts'etsopele ea Habr-end: refactoring le ho nahanisisaHo khutlela ho poso ho hlahisa kopo e ncha ea data

Ho ne ho sa hlokahale ho cheka ho teba. Ka skrineng e ka holimo u ka bona hore kopo e boetse e kopa lethathamo la lihlooho ha u khutlela morao, 'me nakong ea kopo ha re bone lihlooho, ho bolelang hore data e fetileng e nyamela kae-kae. Ho bonahala eka karolo ea lethathamo la lingoloa e sebelisa naha ea lehae mme e lahleheloa ke eona ha e senya. Ha e le hantle, kopo e sebelisitse naha ea lefats'e, empa mohaho oa Vuex o hahiloe ka hlooho: li-modules li tlameletsoe maqepheng, tseo le tsona li tlamelletsoeng litseleng. Ho feta moo, li-module tsohle li "lahloa" - ketelo e 'ngoe le e 'ngoe e latelang leqepheng e ngola mojule kaofela hape:

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

Ka kakaretso, re ne re e-na le mojule ArticlesList, e nang le dintho tsa mofuta Sehlooho se le mojule LeqepheSengoloa, eo e neng e le phetolelo e atolositsoeng ea ntho Sehlooho se, mohlomong Sehlooho se Felletse. Ka kakaretso, ts'ebetsong ena ha e na ntho e mpe ka boeona - e bonolo haholo, motho a ka 'na a re ha a na thuso, empa e utloahala haholo. Haeba u seta module nako le nako ha u fetola tsela, u ka phela le eona. Leha ho le joalo, ho falla pakeng tsa phepelo ea sengoloa, mohlala /fepa → /bohle, e tiisetsoa ho lahla ntho e 'ngoe le e' ngoe e amanang le lijo tsa botho, kaha re na le e le 'ngoe feela ArticlesList, eo u hlokang ho kenya data e ncha ho eona. Sena se boetse se re lebisa ho phetisetso ea likopo.

Ha ke se ke bokelletse ntho e 'ngoe le e' ngoe eo ke khonneng ho e cheka ka taba ena, ke ile ka theha sebopeho se secha sa mmuso mme ka se hlahisa ho basebetsi-'moho le 'na. Lipuisano li ne li le telele, empa qetellong likhang tse tšehetsang li ile tsa feta lipelaelo, eaba ke qala ho kenya tšebetsong.

Maikutlo a tharollo a senoloa hamolemo ka mehato e 'meli. Taba ea pele re leka ho theola mojule oa Vuex maqepheng ebe re tlama ka kotloloho ho litsela. E, ho tla ba le lintlha tse ling tse ngata ka lebenkeleng, li-getters li tla fetoha tse rarahaneng haholoanyane, empa re ke ke ra laela lihlooho habeli. Bakeng sa mofuta oa mobile, mohlomong ena ke khang e matla ka ho fetisisa. E tla shebahala tjena:

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

Empa ho thoe'ng haeba manane a lingoloa a ka kopana lipakeng tsa litsela tse ngata mme ho thoe'ng haeba re batla ho sebelisa data ea ntho hape Sehlooho se ho fana ka leqephe la poso, ho le fetola Sehlooho se Felletse? Tabeng ena, ho tla ba ho utloahalang ho sebelisa sebopeho se joalo:

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

ArticlesList mona ke mofuta oa polokelo ea lingoliloeng feela. Lingoliloeng tsohle tse jarollotsoeng nakong ea tšebeliso ea basebelisi. Re li tšoara ka hloko ka ho fetisisa, hobane sena ke sephethephethe se ka 'nang sa kopitsoa ka bohloko kae-kae metro pakeng tsa liteishene,' me ka sebele ha re batle ho baka bohloko bona ho mosebedisi hape ka ho mo qobella ho kenya data eo a seng a ntse a e-na le eona. downloaded. Ntho LingoloaIds ke feela letoto la li-ID (joalokaha eka ke "lihokelo") tsa lintho Sehlooho se. Sebopeho sena se u lumella ho qoba ho pheta-pheta data e tloaelehileng litseleng le ho sebelisa ntho hape Sehlooho se ha o fana ka leqephe la poso ka ho kopanya lintlha tse atolositsoeng ho lona.

Sephetho sa lethathamo la lingoliloeng se boetse se hlakile haholoanyane: karolo ea iterator e pheta-pheta ka har'a sehlopha sa li-ID tsa sengoloa ebe e hula karolo ea sengoloa, e fetisa Id joalo ka prop, 'me karolo ea ngoana, le eona, e fumana lintlha tse hlokahalang ho tsoa ho. ArticlesList. Ha u ea leqepheng la khatiso, re fumana letsatsi le seng le ntse le le teng ho tloha ArticlesList, re etsa kopo ea ho fumana lintlha tse sieo ebe re li kenya feela nthong e teng.

Ke hobane'ng ha mokhoa ona o le molemo? Joalokaha ke ngotse ka holimo, mokhoa ona o bonolo haholoanyane mabapi le data e jarollotsoeng mme e u lumella ho e sebelisa hape. Empa ntle le sena, e bula tsela ea menyetla e mecha e lumellanang hantle le moaho o joalo. Mohlala, ho khetha le ho kenya lingoloa ho fepa ha li hlaha. Re ka beha litaba tsa morao-rao ka har'a "polokelo" ArticlesList, boloka lethathamo le arohaneng la li-ID tse ncha ho LingoloaIds mme o tsebise mosebedisi ka yona. Ha re tobetsa konopo ea "Show new publications", re tla kenya li-ID tse ncha qalong ea lethathamo la lingoloa tsa hajoale, 'me tsohle li tla sebetsa ka boselamose.

Ho etsa hore download e be monate le ho feta

The icing on the refactoring cake ke khopolo ea skeletons, e leng se etsang hore mokhoa oa ho khoasolla litaba ho Internet butle o se ke oa nyonyeha. Ho ne ho se na lipuisano tabeng ena; tsela ea ho tloha mohopolong ho ea ho mohlala e ile ea nka lihora tse peli. Moralo o ile oa itlhahisa, 'me re ile ra ruta likarolo tsa rona ho fana ka li-block tsa div tse bonolo, tse sa thekeseleng ha re ntse re emetse data. Ka mokhoa o ikhethileng, mokhoa ona oa ho jarisa o hlile o fokotsa bongata ba lihormone tsa khatello 'meleng oa mosebelisi. Skeleton e shebahala tjena:

Li-logs tsa nts'etsopele ea Habr-end: refactoring le ho nahanisisa
Habraloading

Ho nahanisisa

Ke 'nile ka sebetsa Habré ka likhoeli tse tšeletseng' me metsoalle ea ka e ntse e botsa: hantle, u e rata joang moo? Ho lokile, phutholohile - ho joalo. Empa ho na le ho hong ho etsang hore mosebetsi ona o fapane le o mong. Ke ne ke sebetsa lihlopheng tse neng li sa tsotelle sehlahisoa sa tsona ka ho felletseng, li sa tsebe kapa li utloisisa hore na basebelisi ba tsona ke bo-mang. Empa mona tsohle li fapane. Mona u ikutloa u ikarabella bakeng sa seo u se etsang. Ha u ntse u etsa karolo, u fetoha mong'a eona ka mokhoa o itseng, u nka karolo libokeng tsohle tsa sehlahisoa tse amanang le ts'ebetso ea hau, etsa litlhahiso le ho iketsetsa liqeto. Ho etsa sehlahisoa seo u se sebelisang letsatsi le leng le le leng u le mong ho monate haholo, empa ho ngola khoutu bakeng sa batho bao mohlomong ba leng betere ho feta ho uena ke maikutlo a makatsang (ha ho na ho phoqa).

Ka mor'a ho lokolloa ha liphetoho tsena kaofela, re ile ra fumana maikutlo a nepahetseng, 'me e ne e le monate haholo. Hoa khothatsa. Kea leboha! Ngola ho feta.

E-re ke u hopotse hore ka mor'a mefuta-futa ea lefats'e re ile ra etsa qeto ea ho fetola meralo le ho arola karolo ea proxy ka mohlala o fapaneng. Mohaho oa "node tse peli" o se o fihlile tokollong ka mokhoa oa tlhahlobo ea beta ea sechaba. Joale mang kapa mang a ka fetohela ho eona mme a re thusa ho ntlafatsa Habr ea mobile. Ke phetho bakeng sa kajeno. Ke tla thabela ho araba lipotso tsohle tsa hau ho maikutlo.

Source: www.habr.com

Eketsa ka tlhaloso