Efektivní weby založené na technologii AJAX mají tři klíče:delegování událostí, správa historie a efektivní komunikace v rámci celé aplikace s pub/sub. Tento blog využívá všechny tyto techniky a napadlo mě, že se podělím o nejjednodušší z nich: malý hospodský/podřízený modul, který používám na tomto webu.
Pokud jste dosud nepoužili pub/sub, podstatou je, že publikujete k tématu a kdokoli se může přihlásit k odběru, podobně jako funguje rádio:rozhlasová stanice vysílá (publikuje) a kdokoli může poslouchat (přihlašuje se k odběru). To je vynikající pro vysoce modulární webové aplikace; je to licence k globální komunikaci bez připojení k jakémukoli konkrétnímu objektu.
JavaScript
Samotný modul je velmi malý, ale nesmírně užitečný:
var events = (function(){ var topics = {}; var hOP = topics.hasOwnProperty; return { subscribe: function(topic, listener) { // Create the topic's object if not yet created if(!hOP.call(topics, topic)) topics[topic] = []; // Add the listener to queue var index = topics[topic].push(listener) -1; // Provide handle back for removal of topic return { remove: function() { delete topics[topic][index]; } }; }, publish: function(topic, info) { // If the topic doesn't exist, or there's no listeners in queue, just leave if(!hOP.call(topics, topic)) return; // Cycle through topics queue, fire! topics[topic].forEach(function(item) { item(info != undefined ? info : {}); }); } }; })();
Publikování k tématu:
events.publish('/page/load', { url: '/some/url/path' // any argument });
...a přihlášení k odběru uvedeného tématu, abyste byli informováni o událostech:
var subscription = events.subscribe('/page/load', function(obj) { // Do something now that the event has occurred }); // ...sometime later where I no longer want subscription... subscription.remove();
Na této webové stránce používám nábožensky pub/sub a tento objekt mi udělal svět dobrého. Mám jedno téma, které se spouští při každém načtení stránky AJAX, a během této události se spustí několik předplatných (znovu vykreslování reklamy, opětovné vykreslení komentářů, populace sociálních tlačítek atd.). Vyhodnoťte svou aplikaci a zjistěte, kde byste mohli použít pub/sub!