Hostimi të pavarura të burimeve të palëve të treta: të mira, të këqija, të këqija

Në vitet e fundit, gjithnjë e më shumë platforma për optimizimin e projekteve frontend ofrojnë mundësi për hostimin e pavarur ose proxy të burimeve të palëve të treta. Akamai lejon përcaktimin e parametrave specifikë për URL-të e krijuara vetë. Cloudflare ka teknologjinë Edge Workers. Fasterzine mund të rishkruajë URL-të në faqet në mënyrë që ato të tregojnë për burime të palëve të treta, që ndodhen në domenin kryesor të faqes.

Hostimi të pavarura të burimeve të palëve të treta: të mira, të këqija, të këqija

Nëse dihet se shërbimet e palëve të treta që përdoren në projektin tuaj nuk ndryshojnë shumë shpesh dhe se procesi i dorëzimit të tyre tek klientët mund të përmirësohet, atëherë për siguri po mendoni për proksimin e këtyre shërbimeve. Me këtë qasje, ju mund ta "afroni" këto burime me përdoruesit dhe të fitoni kontroll më të plotë mbi këshillimin e tyre në anën e klientit. Kjo, për më tepër, mbron përdoruesit nga ndonjë shqetësim që mund të shkaktohet nga "rënia" e shërbimit të palëve të treta ose degradimi i performancës së tij.

I mirë: Rritja e performancës

Hostimi i pavarur i burimeve të huaja përmirëson performancën në një mënyrë mjaft të dukshme. Shfletuesi nuk ka nevojë të kontaktojë disa herë për DNS, nuk i nevojitet të krijojë një lidhje TCP dhe të kryejë një dorëzim TLS në një domen të palëve të treta. Si e ndikon hostimi i pavarur i burimeve të huaja në performancë mund të shihet duke krahasuar dy imazhet e mëposhtme.

Hostimi të pavarura të burimeve të palëve të treta: të mira, të këqija, të këqija
Burimet e palëve të treta ngarkohen nga burime të jashtme (marrë këtu)

Hostimi të pavarura të burimeve të palëve të treta: të mira, të këqija, të këqija
Burimet e palëve të treta ruhen aty ku ndodhen edhe materialet e tjera të faqes (marrë këtu)

Situatën e përmirëson dhe fakti që shfletuesi do të përdorë mundësitë për shumëfishimin dhe prioritizimin e të dhënave në lidhjet HTTP/2, të cilat tashmë janë krijuar me domenin kryesor.

Nëse burimet e palëve të treta nuk ruhen në faqen tuaj, ato do të ngarkohet nga një domen tjetër, që do të thotë se nuk mund të prioritizohen. Kjo do të çojë në një garë ndërmjet tyre për bandën e klientit. Kjo mund të rezultojë në një kohë ngarkimi për materialet që janë kritikisht të rëndësishme për formimin e faqes, që do të jetë shumë më e gjatë se koha që mund të arrihet në rrethana ideale. Ja një fjalim mbi HTTP/2-prioritizimin, ku e gjithë kjo shpjegohet shumë mirë.

Mund të supozohet se përdorimi i atributeve në lidhjet me burime të jashtme preconnect do të ndihmojë në zgjidhjen e problemit. Megjithatë, nëse ka shumë lidhje me domains të ndryshme, kjo mund, në të vërtetë, të mbingarkojë linjën e komunikimit në momentin më të rëndësishëm.

Nëse hostoni burimet e jashtme vetë, mund të kontrolloni se si saktësisht këto burime i jepen klientit. Ishte fjala për këtë:

  • Mund tĂ« sigurohet pĂ«r aplikimin e algoritmit tĂ« kompresimit tĂ« tĂ« dhĂ«nave, qĂ« i pĂ«rshtatet mĂ« sĂ« miri çdo shfletuesi (Brotli/gzip).
  • Mund tĂ« rritet koha e caching tĂ« burimeve, qĂ« zakonisht, madje edhe te ofruesit mĂ« tĂ« njohur, nuk Ă«shtĂ« veçanĂ«risht e madhe (pĂ«r shembull, vlera pĂ«r etiketĂ«n GA Ă«shtĂ« vendosur nĂ« 30 minuta).

Mund të zgjasni madje treguesin TTL për burimin, për shembull, deri në një vit, duke përfshirë materialet përkatëse në strategjinë tuaj të menaxhimit të caching (hash-et e URL-ve, versionimi dhe kështu me radhë). Rreth kësaj do të flasim më poshtë.

▍Mbrojtja nga ndĂ«rprerjet e funksionimit tĂ« shĂ«rbimeve tĂ« jashtme ose nga çaktivizimi i tyre

Një aspekt tjetër interesant i hostimit të burimeve të jashtme është se kjo lejon të zbuten rreziqet që lidhen me ndërprerjet e shërbimeve të jashtme. Supozoni se zgjidhja e jashtme që po përdorni për testimin A/B është realizuar në formën e një skripti bllokues, i ngarkuar në seksionin e kokës së faqes. Ky skript ngarkohet ngadalë. Nëse ngarkimi i skriptit përkatës dështon, faqja do të jetë bosh. Nëse ngarkimi i saj do të marrë shumë kohë, faqja do të shfaqet me një vonesë të madhe. Apo, supozoni se projekti përdor një bibliotekë, e cila ngarkohet nga një burim CDN i jashtëm. Supozojmë se ky burim ka pësuar një dështim ose është bllokuar në një vend të caktuar. Një situatë e tillë do të çonte në prishjen e logjikës së punës së faqes.

Për të mësuar se si funksionon faqja juaj në kushte të papërshtatshme të një shërbimi të jashtëm, mund të përdorni seksionin SPOF në webpagetest.org.

Hostimi të pavarura të burimeve të palëve të treta: të mira, të këqija, të këqija
Seksioni SPOF në webpagetest.org

▍ÇfarĂ« mendoni pĂ«r problemet me cache-in e materialeve nĂ« shfletues? (kĂ«shillĂ«: ky Ă«shtĂ« njĂ« mit)

Mund t'i dukej se përdorimi i CDN-ve publik do të çonte automatikisht në performancë më të mirë të burimeve, pasi këto shërbime kanë rrjeta mjaft cilësore dhe janë të shpërndara në të gjithë botën. Por, në të vërtetë, gjithçka është pak më e komplikuar.

Le tĂ« supozojmĂ« se kemi disa faqe tĂ« ndryshme: website1.com, website2.com, website3.com. TĂ« gjitha kĂ«to faqe pĂ«rdorin bibliotekĂ«n jQuery. Ne e lidhim atĂ« me to, duke pĂ«rdorur CDN, pĂ«r shembull — googleapis.com. Mund tĂ« pritet qĂ« shfletuesi ta ngarkojĂ« njĂ« herĂ« dhe ta ruajĂ« nĂ« cache bibliotekĂ«n, e mĂ« pas ta pĂ«rdorĂ« atĂ« gjatĂ« punĂ«s me tĂ« tre faqet. Kjo mund tĂ« zvogĂ«lojĂ« ngarkesĂ«n nĂ« rrjet. Ndoshta, kjo do tĂ« ndihmojĂ« pĂ«r tĂ« kursyer diku dhe tĂ« ndihmojĂ« nĂ« pĂ«rmirĂ«simin e performancĂ«s sĂ« burimeve. MegjithatĂ«, nga njĂ« pikĂ«pamje praktike, gjithçka duket ndryshe. PĂ«r shembull, nĂ« Safari Ă«shtĂ« zbatuar njĂ« funksion i quajtur Intelligent Tracking Prevention: nĂ« cache pĂ«rdoren çelĂ«sa dyfishtĂ«, qĂ« bazohen nĂ« burimin e dokumentit dhe nĂ« burimin e burimeve tĂ« jashtme. Ja njĂ« artikull i mirĂ« nĂ« kĂ«tĂ« temĂ«.

Studime të vjetra Yahoo dhe Facebook, si dhe më të reja studim Pola Calvano, tregojnë se burimet nuk ruhen në cache-t e shfletuesit aq gjatë sa mund të presim: "Ekziston një diferencë e rëndësishme midis kohës së cache-it të burimeve të veta dhe atyre të jashtme të projektit. Këtu flasim për CSS dhe për fontet në web. Saktësisht, koha e cache-it për 95% të fontëve të vet është mbi një javë, ndërsa koha e cache-it për 50% të fontëve të jashtëm është më pak se një javë! Kjo u jep zhvilluesve të web-it arsye të forta për të mbajtur ndarë skedarët e fontëve!".

Si rezultat, nëse do të mbani materiale të huaja, nuk do të vini re probleme me performancën, të shkaktuara nga cache-imi në shfletues.

Tani, kur kemi shqyrtuar pikat e forta të hostimit të burimeve të jashtme, le të flasim për atë se si të dallojmë një zbatim të mirë të këtij qasjeje nga një të keqe.

E keqe: djalli fshihet në detaje

Kërcimi i burimeve të jashtme në domenin tuaj nuk mund të bëhet automatikisht, pa u kujdesur për cache-imin e duhur të këtyre burimeve.

Një nga problemet kryesore këtu është koha e cache-it. Për shembull, informacionet për versionet përfshihen në emrat e skripteve të jashtme më ose pak si kjo: jquery-3.4.1.js. Një skedar i tillë në të ardhmen nuk do të ndryshojë, si rezultat, kjo nuk do të shkaktojë ndonjë problem me memorizimin e tij.

Por nëse nuk zbatohet një skemë versionimi për punën me skedarët, skriptet e memorizuara, përmbajtja e të cilave ndryshon me emrin e skedarit të pandryshuar, mund të bëhen të vjetruara. Kjo mund të bëhet një problem serioz, pasi, për shembull, nuk lejon që ndryshimet e sigurisë të futen automatikisht në skriptet, të cilat klientët duhet t'i marrin sa më shpejt. Zhvilluesi do të duhet të përpiqet të përditësojë këto skripte në memorie. Për më tepër, kjo mund të shkaktojë dështime në funksionimin e aplikacionit, të shkaktuara nga fakti se kodi i përdorur nga klienti nga memorie është i ndryshëm nga versioni i ri të kodit, për të cilin është menduar pjesa serverike e projektit.

Megjithatë, nëse flasim për materiale që përditësohen shpesh (menaxherët e etiketimeve, zgjidhjet për testimin A/B), atëherë memorizimi i tyre nga mjetet CDN është një detyrë, e cila, megjithatë, është shumë më e komplikuar. Shërbime si Commanders Act, zgjidhjet për menaxhimin e etiketimeve, kur publikojnë versione të reja, përdorin web-hooks. Kjo jep mundësinë për të organizuar një pastrim të memorie në CDN, ose, edhe më mirë, mundësinë për të thirrur përditësimin e hash-it ose versionit të URL-të.

▍ShpĂ«rndarja adaptuese e materialeve pĂ«r klientĂ«t

Për më tepër, kur flasim për memorizimin, duhet të marrim parasysh edhe faktin se cilësimet e memorizimit të përdorura në CDN mund të mos jenë të përshtatshme për disa burime të jashtme. Për shembull, këto burime mund të përdorin teknologjinë e sniffing të agjentëve të përdoruesve (user agent sniffing, adaptive serving) për të ofruar versione të materialeve të optimizuara veçanërisht për këto shfletues. Këto teknologji, për të zbuluar kapacitë e shfletuesit, mbështeten në shprehje të rregullta, ose në një bazë të dhënash, e cila përmban informacion rreth titujve HTTP. User-Agent. Duke mësuar se me cilin shfletues kanë të bëjnë, ata u japin atyre materialet e përshtatura për ta.

KĂ«tu mund tĂ« pĂ«rmendim dy shĂ«rbime. I pari — googlefonts.com. I dyti — polyfill.io. ShĂ«rbimi Google Fonts ofron, pĂ«r njĂ« burim tĂ« caktuar, kodin e ndryshĂ«m CSS, i cili varet nga mundĂ«sitĂ« e shfletuesit (duke dhĂ«nĂ« lidhje pĂ«r burimet woff2, duke pĂ«rdorur unicode-range).

Ja rezultatet e disa kërkesave ndaj Google Fonts, të kryera nga shfletues të ndryshëm.

Hostimi të pavarura të burimeve të palëve të treta: të mira, të këqija, të këqija
Rezultati i kërkesës në Google Fonts, e kryer nga Chrome

Hostimi të pavarura të burimeve të palëve të treta: të mira, të këqija, të këqija
Rezultati i kërkesës në Google Fonts, e kryer nga IE10

Polyfill.io i jep vetëm polifill-at që i nevojiten shfletuesit. Kjo bëhet për arsye të performancës.

Për shembull, le t'i hedhim një sy asaj që do të ndodhë nëse kryejmë këtë kërkesë nga shfletues të ndryshëm: https://polyfill.io/v3/polyfill.js?features=default

Në përgjigje të një kërkese të tillë, të kryer nga IE10, do të vijë 34 Kb të dhëna. Ndërsa përgjigjja nga Chrome do të jetë bosh.

E keqe: disa konsiderata për privatësinë

Ky pikë është i fundit në rend, por jo në rëndësi. Bëhet fjalë se hostimi i pavarur i burimeve të tretë në domenin kryesor të projektit ose në subdomenin e tij mund të dëmtojë privatësinë e përdoruesve dhe të ndikojë negativisht në projektin kryesor të uebit.

Nëse sistemi juaj CDN është konfiguruar keq, gjithçka mund të përfundojë me dërgimin e cookie-ve të domenit tuaj në një shërbim të tretë. Nëse në nivelin e CDN nuk do të organizohet një filtrimi i duhur, atëherë cookie-t tuaj të sesionit, të cilat në kushte normale nuk mund të përdoren në JavaScript (me atributin httponly), mund të dërgohen në një host të jashtëm.

Kjo mund të ndodhi me ndjekës si Eulerian ose Criteo. Ndjekës të jashtëm mund të vendosin një identifikues unik në cookie. Nëse ishin pjesë e materialeve të faqeve, ata mund të lexojnë identifikuesin sipas dëshirës gjatë punës së përdoruesit me burime të ndryshme të uebit.

Në ditët e sotme, shumica e shfletuesve përfshijnë mbrojtje nga sjellja e tillë e ndjekësve. Si rezultat, tani ndjekësit përdorin teknologjinë CNAME Cloaking, duke u maskuar si skenar të tyre të ndryshëm. Në veçanti, ndjekësit i ofrojnë pronarëve të faqeve të shtojnë në konfigurimet e tyre CNAME për një domain, adresën e të cilit zakonisht duket si një grup rastësor simbolesh.

MegjithĂ«se nuk rekomandohet tĂ« bĂ«het qĂ« cookie-t e uebfaqes tĂ« jenĂ« tĂ« qasshme pĂ«r tĂ« gjitha subdomenet (pĂ«r shembull — *.website.com), kjo bĂ«het nĂ« shumĂ« faqe. NĂ« kĂ«tĂ« rast, cookie-t e tilla automatikisht dĂ«rgohen nĂ« njĂ« ndjekĂ«s tĂ« jashtĂ«m tĂ« maskuar. Si rezultat, privacy-nĂ«n as qĂ« mund tĂ« flasim.

Për më tepër, e njëjta gjë ndodh edhe me titujt HTTP Client-Hints, të cilat dërgohen vetëm në domenin kryesor, pasi ato mund të përdoren për krijimin e gora e përdoruesit . Sigurohuni që shërbimi juaj CDN të filtrojë siç duhet këto tituj.

Përfundime

NĂ«se planifikoni tĂ« implementoni shĂ«rbim hostimi pĂ«r burime tĂ« jashtme sĂ« shpejti — lejoni qĂ« t'ju jap disa kĂ«shilla:

  • Hostoni bibliotekat tuaja mĂ« tĂ« rĂ«ndĂ«sishme tĂ« JS, fontet dhe skedarĂ«t CSS vetĂ«. Kjo do tĂ« reduktojĂ« rrezikun e dĂ«shtimit tĂ« faqes ose uljes sĂ« performancĂ«s pĂ«r shkak se njĂ« burim jetik pĂ«r funksionimin e faqes Ă«shtĂ« bĂ«rĂ« i paaksesueshĂ«m pĂ«r shkak tĂ« njĂ« shĂ«rbimi tĂ« jashtĂ«m.
  • Para se tĂ« ruani burime tĂ« jashtme nĂ« CDN, sigurohuni qĂ« sistemi i emrave tĂ« skedarĂ«ve tĂ« pĂ«rdorĂ« njĂ« sistem versionimi, ose qĂ« mund tĂ« menaxhoni ciklin e jetĂ«s sĂ« kĂ«tyre burimeve duke zbrazur manualisht ose automatikisht cache-n e CDN kur publikohet njĂ« version i ri i skriptit.
  • Kujdesuni shumĂ« me konfigurimet e CDN, serverit proxy, dhe cache-it. Kjo do tĂ« parandalojĂ« dĂ«rgimin e cookie-ve tĂ« projektit tuaj ose titujve Client-Hints nĂ« shĂ«rbime tĂ« jashtme.

Të nderuar lexues! A shpërndani materiale të huaja në serverat tuaj që janë jashtëzakonisht të rëndësishme për funksionimin e projekteve tuaja?

Hostimi të pavarura të burimeve të palëve të treta: të mira, të këqija, të këqija
Hostimi të pavarura të burimeve të palëve të treta: të mira, të këqija, të këqija

Burimi: habr.com

Blini hosting tĂ« besueshĂ«m pĂ«r faqe interneti me mbrojtje nga DDoS, serverĂ« VPS VDS đŸ”„ Blini hosting tĂ« besueshĂ«m pĂ«r faqe interneti me mbrojtje nga DDoS, serverĂ« VPS VDS | ProHoster