Өзін-өзі орналастырушы үшінші тарап ресурстары: жақсы, жаман, ұсқынсыз

Соңғы жылдары алдыңғы қатарлы жобаларды оңтайландыруға арналған көбірек платформалар үшінші тарап ресурстарын өздігінен орналастыру немесе проксимен қамтамасыз ету мүмкіндіктерін ұсынады. Akamai орнатуға мүмкіндік береді нақты параметрлер өздігінен жасалған URL мекенжайлары үшін. Cloudflare-де Edge Workers технологиясы бар. Fasterzine болады қайта жазу Беттердегі URL мекенжайлары сайттың негізгі доменінде орналасқан үшінші тарап ресурстарына нұсқайды.

Өзін-өзі орналастырушы үшінші тарап ресурстары: жақсы, жаман, ұсқынсыз

Егер жобаңызда пайдаланылған үшінші тарап қызметтері жиі өзгермейтінін және оларды клиенттерге жеткізу үдерісін жақсартуға болатынын білсеңіз, онда сіз мұндай қызметтерді проксимен қамтамасыз ету туралы ойлайтын шығарсыз. Бұл тәсілдің көмегімен сіз бұл ресурстарды пайдаланушыларыңызға өте жақсы жақындата аласыз және олардың клиент жағында кэштеуді толық бақылауға аласыз. Бұл, сонымен қатар, пайдаланушыларды үшінші тарап қызметінің «апатуынан» немесе оның өнімділігінің төмендеуінен туындаған қиындықтардан қорғауға мүмкіндік береді.

Жақсы: жақсартылған өнімділік

Басқа біреудің ресурстарын өздігінен орналастыру өнімділікті өте айқын түрде жақсартады. Браузер DNS-ке қайта кірудің қажеті жоқ, оған TCP қосылымын орнату және үшінші тарап доменінде TLS қол алысуын орындау қажет емес. Келесі екі цифрды салыстыру арқылы басқа біреудің ресурстарын өздігінен орналастыру өнімділікке қалай әсер ететінін көре аласыз.

Өзін-өзі орналастырушы үшінші тарап ресурстары: жақсы, жаман, ұсқынсыз
Үшінші тарап ресурстары сыртқы көздерден жүктеледі ( мұнда)

Өзін-өзі орналастырушы үшінші тарап ресурстары: жақсы, жаман, ұсқынсыз
Үшінші тарап ресурстары сайттың қалған материалдарымен бірдей жерде сақталады ( мұнда)

Жағдай сонымен қатар браузердің негізгі доменмен орнатылған HTTP/2 қосылымынан деректерді мультиплекстеу және басымдық беру мүмкіндігін пайдаланатындығымен жақсарады.

Егер сіз үшінші тарап ресурстарын орналастырмасаңыз, олар негізгіден басқа доменнен жүктелетіндіктен, оларға басымдық беру мүмкін емес. Бұл олардың клиенттің өткізу қабілеті үшін бір-бірімен бәсекелесуіне әкеледі. Бұл идеалды жағдайларда қол жеткізуге болатын уақыттан әлдеқайда ұзағырақ бетті құру үшін маңызды мазмұнды жүктеу уақытына әкелуі мүмкін. осында Мұның бәрін өте жақсы түсіндіретін HTTP/2 басымдылығы туралы сөйлесіңіз.

Сыртқы ресурстарға сілтемелерде атрибуттарды пайдалану деп болжауға болады preconnect мәселені шешуге көмектеседі. Дегенмен, егер әртүрлі домендерге осы сілтемелер тым көп болса, ол ең маңызды сәтте байланыс желісін шамадан тыс жүктеуі мүмкін.

Егер сіз үшінші тарап ресурстарын өзіңіз орналастырсаңыз, бұл ресурстардың клиентке нақты қалай берілгенін басқара аласыз. Атап айтқанда, біз мыналар туралы айтып отырмыз:

  • Әрбір шолғышқа сәйкес келетін деректерді қысу алгоритмі (Brotli/gzip) пайдаланылғанына көз жеткізуге болады.
  • Сіз әдетте ұзақ емес ресурстарды кэштеу уақытын ұлғайта аласыз, тіпті ең танымал провайдерлерде де (мысалы, GA тегі үшін сәйкес мән 30 минутқа орнатылған).

Сіз тіпті кэштеуді басқару стратегияңызға сәйкес мазмұнды қосу арқылы ресурс үшін TTL мерзімін ұзарта аласыз (URL хэштері, нұсқалар және т.б.). Бұл туралы төменде айтатын боламыз.

▍Үшінші тарап қызметтерінің жұмысындағы үзілістерден немесе оларды өшіруден қорғау

Үшінші тарап ресурстарын өзін-өзі орналастырудың тағы бір қызықты аспектісі - ол үшінші тарап қызметтерінің үзілуіне байланысты тәуекелдерді азайтуға мүмкіндік береді. Сіз пайдаланып жатқан үшінші тараптың A/B тестілеу шешімі беттің бас бөлігінде жүктелетін блоктау сценарийі ретінде іске асырылған деп есептейік. Бұл сценарий баяу жүктеледі. Сәйкес сценарий жүктелмесе, бет бос болады. Егер жүктеуге өте ұзақ уақыт кетсе, бет ұзақ кідіріспен пайда болады. Немесе жоба үшінші тарап CDN ресурсынан жүктелген кітапхананы пайдаланады делік. Бұл ресурс сәтсіздікке ұшырады немесе белгілі бір елде бұғатталды деп елестетіп көрейік. Мұндай жағдай сайттың логикасын бұзуға әкеледі.

Кейбір сыртқы қызмет қолжетімсіз болғанда сайтыңыздың қалай жұмыс істейтінін білу үшін SPOF бөлімін қосуға болады webpagetest.org.

Өзін-өзі орналастырушы үшінші тарап ресурстары: жақсы, жаман, ұсқынсыз
webpagetest.org сайтындағы SPOF бөлімі

▍Браузерлердегі материалдарды кэштеу мәселелері туралы не деуге болады? (кеңес: бұл миф)

Қоғамдық CDN пайдалану автоматты түрде ресурс өнімділігін жақсартуға әкеледі деп ойлауыңыз мүмкін, өйткені бұл қызметтерде жеткілікті жоғары сапалы желілер бар және бүкіл әлем бойынша таратылады. Бірақ іс жүзінде бәрі біршама күрделірек.

Бізде бірнеше түрлі сайттар бар делік: website1.com, website2.com, website3.com. Бұл сайттардың барлығы jQuery кітапханасын пайдаланады. Біз оны оларға CDN арқылы қосамыз, мысалы - googleapis.com. Браузер кітапхананы бір рет жүктеп алып, кэштейді, содан кейін оны барлық үш сайтта пайдаланады деп күтуге болады. Бұл желідегі жүктемені азайтуы мүмкін. Мүмкін бұл сізге бір жерде ақша үнемдеуге мүмкіндік береді және ресурстардың жұмысын жақсартуға көмектеседі. Практикалық тұрғыдан алғанда, бәрі басқаша көрінеді. Мысалы, Safari-де деп аталатын мүмкіндік бар Интеллектуалды бақылаудың алдын-алу: Кэш құжаттың көзіне және үшінші тарап ресурсының көзіне негізделген қос кілттерді пайдаланады. осында осы тақырып бойынша жақсы мақала.

ескі зерттеулер Yahoo и Facebook, сондай-ақ жақынырақ зерттеу Пол Кальвано, ресурстардың браузер кэштерінде біз күткендей ұзақ сақталмайтынын көрсетеді: «Жобаның меншікті және үшінші тарап ресурстарын кэштеу уақыты арасында айтарлықтай алшақтық бар. Біз CSS және веб-қаріптер туралы айтып отырмыз. Атап айтқанда, жергілікті қаріптердің 95% кэш мерзімі бір аптадан астам, ал үшінші тарап қаріптерінің 50% кэш мерзімі бір аптадан аз! Бұл веб-әзірлеушілерге қаріп файлдарын өздері орналастыруға сенімді себеп береді!»

Нәтижесінде, егер сіз басқа адамдардың мазмұнын орналастырсаңыз, браузерді кэштеуден туындаған өнімділік мәселелерін байқамайсыз.

Енді біз үшінші тараптың өзін-өзі хостингінің күшті жақтарын қарастырған соң, осы тәсілдің жақсы іске асырылуын жаманнан қалай ажыратуға болатыны туралы сөйлесейік.

Жаман: Ібіліс егжей-тегжейде

Үшінші тарап ресурстарын өзіңіздің доменіңізге жылжыту мұндай ресурстардың дұрыс кэштелгенін қамтамасыз етпейінше автоматты түрде орындалмайды.

Мұндағы басты мәселелердің бірі – кэштеу уақыты. Мысалы, нұсқа ақпараты келесідей үшінші тарап сценарий атауларына кіреді: jquery-3.4.1.js. Мұндай файл болашақта өзгермейді, нәтижесінде бұл оның кэштеуінде ешқандай қиындық тудырмайды.

Бірақ файлдармен жұмыс істеу кезінде кейбір нұсқалар схемасы пайдаланылмаса, файл атауы өзгеріссіз қалған кезде мазмұны өзгеретін кэштелген сценарийлер ескіруі мүмкін. Бұл маңызды мәселе болуы мүмкін, өйткені ол, мысалы, автоматтандырылған қауіпсіздік патчтарын клиенттер мүмкіндігінше тезірек алуы қажет сценарийлерге қосуға мүмкіндік бермейді. Әзірлеуші ​​мұндай сценарийлерді кэште жаңартуға күш салуы керек. Бұған қоса, бұл кэштен клиентте пайдаланылатын код жобаның серверлік бөлігі әзірленген кодтың соңғы нұсқасынан ерекшеленетіндіктен, бұл қолданба сәтсіздігін тудыруы мүмкін.

Рас, егер біз жиі жаңартылатын материалдар туралы айтатын болсақ (тег менеджерлері, A/B тестілеуге арналған шешімдер), онда CDN құралдарын пайдаланып оларды кэштеу шешуге болатын тапсырма, бірақ әлдеқайда күрделі. Commanders Act, тегтерді басқару шешімі сияқты қызметтер жаңа нұсқаларды жариялау кезінде вебхуктарды пайдаланады. Бұл CDN-де кэшті тазартуды немесе, жақсырақ, хэшті немесе URL жаңартуын мәжбүрлеу мүмкіндігін береді.

▍Клиенттерге материалдарды бейімдеу

Сонымен қатар, кэштеу туралы айтатын болсақ, CDN-де пайдаланылатын кэштеу параметрлері кейбір үшінші тарап ресурстарына сәйкес келмеуі мүмкін екенін ескеруіміз керек. Мысалы, мұндай ресурстар сол шолғыштар үшін арнайы оңтайландырылған мазмұн нұсқалары бар арнайы браузерлерге қызмет көрсету үшін пайдаланушы агентінің иіскеу (бейімделетін қызмет көрсету) технологиясын пайдалана алады. Бұл технологиялар браузер мүмкіндіктерін анықтау үшін тұрақты өрнектерге немесе HTTP тақырыбы ақпаратының дерекқорына сүйенеді. User-Agent. Олар қай браузермен айналысып жатқанын білгеннен кейін, олар оған арналған материалдарды береді.

Мұнда сіз екі қызметті есте сақтай аласыз. Біріншісі - googlefonts.com. Екіншісі - polyfill.io. Google Fonts қызметі белгілі бір ресурс үшін браузердің мүмкіндіктеріне байланысты әртүрлі CSS кодын ұсынады (woff2 ресурстарына сілтемелерді пайдалана отырып, unicode-range).

Мұнда әртүрлі браузерлерден жасалған Google қаріптерінің бірнеше сұрауларының нәтижелері берілген.

Өзін-өзі орналастырушы үшінші тарап ресурстары: жақсы, жаман, ұсқынсыз
Chrome браузерінен Google қаріптері сұрауының нәтижесі

Өзін-өзі орналастырушы үшінші тарап ресурстары: жақсы, жаман, ұсқынсыз
IE10 нұсқасынан орындалған Google қаріптері сұрауының нәтижесі

Polyfill.io браузерге тек қажетті политолтырларды береді. Бұл өнімділік себептері бойынша жасалады.

Мысалы, әртүрлі браузерлерден келесі сұрауды іске қосқанда не болатынын қарастырайық: https://polyfill.io/v3/polyfill.js?features=default

IE10-дан орындалған мұндай сұрауға жауап ретінде 34 КБ деректер алынады. Ал оған Chrome-дан орындалған жауап бос болады.

Ашулы: кейбір құпиялылыққа қатысты ойлар

Бұл тармақ соңғы, бірақ маңызды емес. Мәселе мынада, жобаның негізгі доменінде немесе оның қосалқы доменінде үшінші тарап ресурстарын өздігінен орналастыру пайдаланушылардың құпиялылығына қауіп төндіруі және негізгі веб-жобаға теріс әсер етуі мүмкін.

CDN жүйеңіз дұрыс конфигурацияланбаса, доменіңіздің cookie файлдарын үшінші тарап қызметіне жіберуіңіз мүмкін. CDN деңгейінде дұрыс сүзу ұйымдастырылмаса, JavaScript-те әдетте пайдаланылмайтын сеанс cookie файлдары (бар httponly), шетелдік хостқа жіберілуі мүмкін.

Eulerian немесе Criteo сияқты трекерлермен дәл осылай болуы мүмкін. Үшінші тарап трекерлері cookie файлында бірегей идентификатор орнатқан болуы мүмкін. Егер олар сайт материалдарының бөлігі болса, пайдаланушы әртүрлі веб-ресурстармен жұмыс істеген кезде олар идентификаторды өз қалауы бойынша оқи алады.

Бұл күндері браузерлердің көпшілігі трекер әрекетінің осы түрінен қорғауды қамтиды. Нәтижесінде трекерлер қазір технологияны пайдаланады CNAME Cloaking, әр түрлі жобалар үшін өздерінің сценарийлері ретінде маскарады. Атап айтқанда, трекерлер сайт иелеріне белгілі бір домен үшін өз параметрлеріне CNAME қосуды ұсынады, оның мекенжайы әдетте кездейсоқ таңбалар жиынына ұқсайды.

Веб-сайт cookie файлдарын барлық қосалқы домендерге қолжетімді ету ұсынылмаса да (мысалы - *.website.com), мұны көптеген сайттар жасайды. Бұл жағдайда мұндай cookie файлдары автоматты түрде жасырын үшінші тарап трекеріне жіберіледі. Нәтижесінде біз енді ешқандай құпиялылық туралы айта алмаймыз.

Сондай-ақ, HTTP тақырыптарымен бірдей нәрсе болады Клиент-Кеңестер, олар тек негізгі доменге жіберіледі, өйткені оларды жасау үшін пайдалануға болады сандық саусақ ізі пайдаланушы. Сіз пайдаланатын CDN қызметі осы тақырыптарды дұрыс сүзетініне көз жеткізіңіз.

Нәтижелері

Егер сіз жақын арада үшінші тарап ресурстарының өзіндік хостингін енгізуді жоспарласаңыз, сізге бірнеше кеңестер беруге рұқсат етіңіз:

  • Ең маңызды JS кітапханаларыңызды, қаріптерді және CSS файлдарын орналастырыңыз. Бұл торап үшін маңызды ресурстың үшінші тарап қызметінің кінәсінен қолжетімсіз болуына байланысты сайттың істен шығу немесе өнімділіктің төмендеуі қаупін азайтады.
  • CDN-де үшінші тарап ресурстарын кэштеу алдында олардың файлдарына атау беру кезінде қандай да бір нұсқалық жүйенің пайдаланылғанын немесе жаңа нұсқасын жариялаған кезде CDN кэшін қолмен немесе автоматты түрде қалпына келтіру арқылы осы ресурстардың өмірлік циклін басқара алатыныңызға көз жеткізіңіз. сценарий.
  • CDN, прокси сервер және кэш параметрлері туралы өте сақ болыңыз. Бұл жобаңызға немесе тақырыптарыңызға cookie файлдарын жіберуді болдырмауға мүмкіндік береді Client-Hints үшінші тарап қызметтері.

Құрметті оқырмандар! Сіз өзіңіздің жобаларыңыздың жұмысы үшін өте маңызды басқа адамдардың материалдарын серверлеріңізге орналастырасыз ба?

Өзін-өзі орналастырушы үшінші тарап ресурстары: жақсы, жаман, ұсқынсыз
Өзін-өзі орналастырушы үшінші тарап ресурстары: жақсы, жаман, ұсқынсыз

Ақпарат көзі: www.habr.com

пікір қалдыру