Skip to content

an upgraded version of Meteor subscribe, which helps optimize data and performance!

License

Notifications You must be signed in to change notification settings

lh0x00/hypersubs

Repository files navigation

Hypersubs

github issues build status

An upgraded version of Meteor subscribe, which helps optimize data and performance!

Why hypersubs?

This is the overwritten version of Meteor subscribe. It optimizes performance by not create connect sent to the server when it is not needed. Hypersubs only creates one connection for multiple subscriptions when detected it is duplicate (same publication name and params). Hypersubs only make a real connection (for the first time call Meteor.subscribe), since the second times call Meteor.subscribe, they will be optimized reuse the connection is existed!

Installation

read more in atmospherejs

$ meteor add lamhieu:hypersubs

All the rest of the packages are automatically made for you, no need to change anything in your source code!

How it work?

On the page, every time you call Meteor.subscribe, the system will create a subscription and start its workflow, it will send the request to the server, and get back in the message returned from the server. When you call Meteor.subscribe with the same arguments and names in multiple locations, the system creates separate connections, so there is a need for unnecessary connections!

For example:

default

At element A, we call Meteor.subscribe('getData', '_id') and somewhere in the page (many other elements) also call Meteor.subscribe('getData', '_id') each time you call to it the system thing will create a server communication connection! things are not re-used!

with hpersubs

At immortality A, we call Meteor.subscribe('getData', '_id') and somewhere in the page, even if you recall something like that, we only created one communication line with the server. and it is re-used! The server you are working less, the speed of subscribe feedback is returned immediately!

Options

Default options:

const options = {
  isOverride: true, // is override original Meteor.subscribe
}

How to config options?

Default, you can use hypersubs without config but you want custom config you can do this

import { config } from 'meteor/lamhieu:hypersubs';

// if you don't want override original Meteor.subscribe
config.isOverride = false;

Usage

Meteor

Default hypersubs is add to Meteor variable, you can use by call Meteor.hyperSubscribe like Meteor.subscribe!

If set isOverride: true you don't need change any code in your source because Meteor.subscribe will replace by Meteor.hyperSubscribe, and you can call original susbcribe by call Meteor.originalSubscribe

If set isOverride: false when you want use hypersubs you need call Meteor.hyperSubscribe

DDP

Default when if set isOverride: true when you call DDP.connect(url) to create new connection, it will return a connection wrapped by hypersubs (called by hyperConnection), DD.subscribe inside DDP is a hyperSusbcribe.

Check

To check a connection is wrapped by hypersubs

// DDP
const ddp = DDP.connect(url);
if (ddp.isHyperConnection) {
  // is hyperConnection
}

// Meteor
const subscribe = Meteor.subscribe; // or DDP.subscribe
if (subscribe.isHyperSubscribe) {
  // is hyperSubscribe
}

// Handle
const handle = Meteor.subscribe('publicationName', 'test'); // or
const handle = Meteor.hyperSubscribe('publicationName', 'test');
if (handle.isHyperHandle) {
  // is hyperHandle
}