Зашто дугмад Фацебоок Лике чине 16% просечног кода веб странице

Према подацима које је прикупио БуилтВитх.цом, 6% од 10.000 најпопуларнијих веб локација са највећим прометом учитава садржај са Фацебоок сервера. За велику већину њих тај садржај је вероватно Фацебоок-ов Јавасцрипт СДК, огроман блок кода који је потребан да би се приказале функције попут дугмета „Свиђа ми се“ (као што се види на многим медијским веб локацијама) и виџета за коментаре на Фацебооку (који се такође користи на многим великим медијима сајтова, Буззфеед међу њима).

Овај СДК код је толико велик да представља око 16% укупне величине свих ЈаваСцрипт-а на просечној веб страници.

Као значајна и широко коришћена софтверска библиотека, Фацебоок СДК је леп начин за илустрацију неких одговора на питања: зашто је просечна веб локација данас тако велика? И колико је заправо битна величина?

Зашто тако велика?

Фацебоок СДК је врло функционалан, дуплира многе алате које ће просечна веб локација вероватно већ укључити за употребу сопствених програмера: методе за преузимање података са других веб локација, за одређивање који прегледач и уређај користи корисник, тако да циљајте на њих одређене функције и за приказ елемената корисничког интерфејса (попут дијалога за потврду и дугмади). Ако категоризујемо све делове СДК-а, рашчламба изгледа овако:

Од скупа карактеристика, три се највише истичу:

„Платно“ је Фејсбуков систем за апликације чија је намера учитавања унутар Фејсбука (Фацебоок је у прошлости учинио велики потицај да подстакне програмере да граде апликације које су живеле у Фејсбуку; нисам потпуно сигуран колико се данас такве апликације широко користе али у сваком случају, редовна веб локација не користи ниједну функцију повезану са платном.) Трошкови њиховог укључивања у СДК прилично су незнатни: само 1,5% од укупне величине.

После тога имамо застарелу подршку за функције. Ово одражава чињеницу да ће АПИ временом акумулирати више интерфејса за руковање истим карактеристикама. На пример, програмери могу написати код који позива или ФБ.гетЛогинСтатус () (наслеђени приступ захтевању тренутног статуса пријаве корисника на Фацебоок) или Аутх.гетЛогинСтатус ()(нови, подстакнути приступ). Начин да се заобиђе потреба да се укључе оба скупа метода је њихово објављивање у одвојеним верзијама СДК-а, али Фацебоок је одлучио да то не учини, вероватно да поједностави искуство за програмере и максимизира број веб локација које користе потпуно исту датотеку ( како би се повећала вероватноћа да га просечни корисник већ преузима). Ова одлука доноси малу цену: отприлике 3,5% СДК кода односи се на руковање функцијама које су експлицитно означене као „застареле“ (и сасвим је могуће да постоји много више „старих“ карактеристика које једноставно нису изричито означене као такве) ).

Што је најважније, СДК укључује бројне полифилсеве и услужне програме сличне полифилима, који чине преко 15% његовог кода. Полифиллс се користе за достављање функција које се налазе у новијим прегледачима старијим прегледачима, а понекад и за новије функције које долазе, али још увек нису додате ни у један прегледач. Већина полифила који су укључени у Фацебоок СДК су за функције које су већ укључене у прегледаче које користи велика већина корисника Интернета. Они служе само за то да СДК функционише за <1% глобалних корисника Интернета који користе старе прегледаче попут Интернет Екплорер-а 8, од којег су многе (ако не и велика већина) главних веб локација одустале од подршке.

Од преосталих ~ 80% СДК-а, мало је теже размрсити које функције су у ту сврху потребне. То је зато што је написано тако да се за коришћење једноставне функције попут дугмета „Свиђа ми се“ мора укључити и код који се користи само за коментаре, уграђивање видео записа, дугмад за пријаву и друге неповезане функције. Фацебоок се могао одлучити за дистрибуцију много мањих датотека ради укључивања само појединачних функција као што су дугмад Лике, али има пословни циљ да подстакне сајтове да користе што више функција које пружа ФБ.

Да ли је величина битна?

Због широке употребе Фацебоок-овог СДК-а и чињенице да се мења релативно ретко, многи корисници су га вероватно већ преузели пре него што учитају веб локацију. У ствари, ово је велики део образложења зашто би Фацебоок дистрибуирао тако велику датотеку, а не мање због специфичних карактеристика као што су дугмад Лике. А на мрежним везама већине корисника - барем онима у развијеним земљама - време потребно за преузимање датотеке је маргинално.

Али без обзира на то да ли је у прегледачу корисника СДК већ преузет, још увек постоје трошкови покретања великог блока Јавасцрипта, посебно на мобилним уређајима. На релативно новом МацБоок Про-у на којем ово пишем, Фацебооковом СДК-у треба око 50 мс (1/20 секунде) да би се покренуо на веб локацији попут Буззфеед-а. Није лоше - поготово ако се узима у контексту са остатком ЈС кода, укључујући код повезан са огласом којем је потребно много више времена за извршење - али и даље нетривијални трошак за нешто што се користи само за приказивање коментара на самом дну страна.

На врло новом паметном телефону (Гоогле Пикел), време извршења ЈС се удвостручује, сада преузимајући 1/10 секунде:

Ако се посматра у контексту, ово је мали делић укупног времена извршавања кода на страници. Али то додаје количини времена током ког померање странице или другачија интеракција са страницом може бити испрекидано и непријатно искуство. И ово долази до важне тачке: овај одређени СДК има маргиналну цену, али савремене веб странице - посебно медијске - често укључују сличан код великог броја трећих страна (овај пример снимио сам од Гавкера пре него што га је милијардер-вампир убио показује колико таквих захтева може бити).

Чак и ако изоставимо утицај приватности слањем неких корисничких података свакој од ових трећих страна, трошкови свих ових функција брзо се збрајају. Свака скрипта треће стране коју веб локација додаје има своју цену, како у погледу перформанси, тако и каснијег рационализовања додавања следећег „релативно безазленог“ дела кода треће стране. Поред тренутног утицаја адитивних трошкова целог овог кода на перформансе, ово утиче на морал програмера: замислите да данима радите како бисте обријали 10% времена учитавања сопственог кода, само да бисте видели огроман блок независног кода који додаје да патуљци утицај тог мукотрпног напора. А онда (ако радите за медијску страницу), виђење истог обрасца изнова и изнова сваких неколико месеци.

Да ли бисте требали да га укључите?

Ако требате да користите функцију попут Фацебоок коментара, нема потребе за учитавањем Фацебоок СДК-а. Али у зависности од тога како је ваша веб локација структурирана, можда ћете моћи да ограничите утицај СДК-а на перформансе тако што ћете га учитати само када је то потребно (нпр. Када се корисник помери до тачке када би коментари требали постати видљиви).

Ако желите да користите дугме Свиђа ми се, зауставите се и преиспитајте. Фацебоок више не приказује лајкове странице видљиво (или, у већини случајева, уопште) на временским линијама корисника. Боље је користити једноставно прилагођено дугме за дељење или везу, а као споредну погодност то ће спречити Фацебоок да прати све посете вашој страници и омета приватност ваших корисника. Сајтови који су елиминисали дугме Свиђа ми се нису успели да препознају негативан утицај тога када су у питању реферални саобраћаји на Фејсбуку.

ИСПРАВКА до наслова: Првобитно сам ово насловио „Зашто 16% кода на просечној веб локацији припада Фацебоок-у и шта то значи“. Као што су неки с правом истакли, то подразумева да пуних 16% Јавасцрипта на свим веб локацијама на Интернету (или барем на свим најпопуларнијим веб локацијама) чине Фацебоок Јавасцрипт СДК. То није била моја намера и видим како је то наишло на превише сензационалистички.

Надамо се да ће нови наслов учинити јаснијим да Фацебоок СДК заузима 16% величине просечног Јавасцрипта веб локације и више не подразумева да представља 16% укупног Јавасцрипта веб локације на Интернету. Као што овде примећује Давид Гилбертсон, стварни глобални број био би много мањи - 0,96%. Такође поставља добру тачку у вези са: кеширањем: Фацебоок Јавасцрипт СДК уопште није најбоље кеширан, већ се на најидеалнији начин кешира до 20 минута, након чега корисников прегледач поново проверава са Фацебоок серверима да би потврдио да је већ има најновију верзију.