Jelikož se zvyšuje používání internetu, rostou také očekávání lidí od webových stránek. Podle výzkumu je množství času, který uživatelé stráví na webové stránce, přímo úměrné rychlosti načítání stránky. Existuje několik technologií běžně používaných k zajištění rychlého načítání webových stránek. Například skeleton loading a AJAX jsou mezi těmito technologiemi. Tyto technologie poskytují uživatelům rychlé výsledky, což jim dává dojem, že se webová stránka načítá rychleji.
Kromě těchto technologií Facebook představil svou vlastní technologii nazvanou BigPipe. Co je BigPipe a jak se liší od ostatních technologií? Pokud se podíváme na webové stránky, všechny fungují na základě logiky požadavku a odpovědi. Uživatel odešle požadavek serveru, server připraví odpověď podle požadavku a poté vidíme výsledek ve formě HTML šablony. Před vytvořením HTML šablony však musíme čekat, až všechna data dorazí ve správném pořadí zpracování. Tento přístup čekání na dokončení všech procesů místo prezentování dostupného výstupu uživateli nebyl považován za příliš logický pro Node.js, který pracuje asynchronně. Proč bychom měli čekat na dokončení všech procesů místo prezentování hotového výstupu uživateli?
Hlavním motivem technologií jako je Facebookův BigPipe a další sociální síťové služby (SNS) je zlepšení personalizovaného uživatelského zážitku na základě dat. Toto neustále vedlo k novým pokrokům s cílem zlepšit výkon serverů. Facebook našel řešení v paralelním zpracování mezi servery a klienty. Toto řešení se primárně zaměřuje na snížení latence požadovaných stránek.
Pro pochopení technologie BigPipe musíme rozumět stránkám HTML ve formě „chunked encoding“. Chunked encoding je metoda přenosu založená na HTTP 1.1. Rozděluje odeslaný požadavek do částí, což umožňuje provádět paralelní zpracování na každé části. Tímto způsobem může hotová část být zobrazena na obrazovce, zatímco zpracování ostatních částí pokračuje.
„Pagelety“ odkazují na rozdělení stránek na menší komponenty. Na níže uvedeném obrázku můžeme vidět, jak Facebook rozděluje stránku na menší kousky.
Obecně, když uživatel odešle požadavek v technologii BigPipe, jsou iniciovány následující kroky.
<html>
<head>…</head>
<body>
<div id=”left_column”>
<div id=”pagelet_navigation”></div>
</div>
<div id=”middle_column”>
<div id=”pagelet_composer”></div>
<div id=”pagelet_stream”></div>
</div>
<div id=”right_column”>
<div id=”pagelet_pymk”></div>
<div id=”pagelet_ads”></div>
<div id=”pagelet_connect”></div>
</div>
big_pipe.onPageletArrive( { id: “pagelet_composer", content:
, css: [..], js: [..], … })
Při paralelním zpracování každý Pagelet operuje v různých fázích. Například během načítání CSS může současně generovat obsah v jiné fázi a vytvářet odpověď pro jiný Pagelet v ještě jiné fázi.
Graf níže ilustruje výkon stránky z perspektivy uživatele mezi Big Pipe a tradičním modelem. Graf ukazuje, že Big Pipe snižuje latenci o polovinu v několika prohlížečích.