Search icon CANCEL
Subscription
0
Cart icon
Your Cart (0 item)
Close icon
You have no products in your basket yet
Save more on your purchases! discount-offer-chevron-icon
Savings automatically calculated. No voucher code required.
Arrow left icon
All Products
Best Sellers
New Releases
Books
Videos
Audiobooks
Learning Hub
Newsletter Hub
Free Learning
Arrow right icon
timer SALE ENDS IN
0 Days
:
00 Hours
:
00 Minutes
:
00 Seconds
Arrow up icon
GO TO TOP
Mastering Node.js

You're reading from   Mastering Node.js Expert techniques for building fast servers and scalable, real-time network applications with minimal effort

Arrow left icon
Product type Paperback
Published in Nov 2013
Publisher Packt
ISBN-13 9781782166320
Length 346 pages
Edition 1st Edition
Languages
Tools
Arrow right icon
Author (1):
Arrow left icon
Sandro Pasquali Sandro Pasquali
Author Profile Icon Sandro Pasquali
Sandro Pasquali
Arrow right icon
View More author details
Toc

Table of Contents (20) Chapters Close

Mastering Node.js
Credits
About the Author
Acknowledgments
About the Reviewers
www.PacktPub.com
Preface
1. Understanding the Node Environment FREE CHAPTER 2. Understanding Asynchronous Event-Driven Programming 3. Streaming Data Across Nodes and Clients 4. Using Node to Access the Filesystem 5. Managing Many Simultaneous Client Connections 6. Creating Real-time Applications 7. Utilizing Multiple Processes 8. Scaling Your Application 9. Testing your Application Organizing Your Work Introducing the Path Framework Creating your own C++ Add-ons Index

Achieving a modular architecture


Path's declarative model also makes it very easy to load modules and dependencies via HTML. Some of the key goals of its module loading system are as follows:

  • Bundling: When it is known that a group of modules is needed, bundle them into one package and send them in one request.

  • Caching: Once a module has been retrieved from the server, it should not need to be requested again. Path maintains a cache of module data on the client.

  • Communication: Path routes events through paths such as /click/get/email. Modules do the same, broadcasting their data along module/moduleName/eventName paths, allowing listeners to act on those transmissions.

  • Encapsulation: No direct access to a module's internals is allowed. All communication is via paths, as described previously.

  • Templates and data binding: Each module is easily bound to a data source, served through a real time socket server. When new data arrives, the module will automatically update its view.

Path was designed to help simplify the designing of modular architectures. Through a declarative syntax, Path makes it easy to see how an application is laid out, even for a nontechnical person. Additionally, the natural binding mechanism for modules further simplifies comprehension of "what is going on", as well as aiding the creation of real-time UI updates, as data bindings automatically receive socket updates, piping new data into new view templates as it arrives:

For example, if I have a list of items to display I might use a special module named list. A list module may want tool tips to appear when items in its list are hovered over, so it may depend on a tooltip dependency. This relationship would be expressed as follows:

<div class="module" name="list">
  <div class="module" name="tooltip"></div>
  <ul>
    <li>...</li>
    <li>...</li>
  </ul>
</div>

The list module may now use tooltip features. Another way of expressing this relationship is as follows:

<div class="module" name="tooltip"></div>
<div class="module" name="list">
  <ul>
    <li>...</li>
    <li>...</li>
  </ul>
</div>

The advantage of the second method is that, while continuing to ensure that tooltip exists when list is loaded, both modules can be loaded in parallel, as they exist on the same level within a DOM tree.

This built-in tendency towards facilitating bundling and parallel loading helps applications developed with Path remain performant, regardless of number of modules or the complexity of dependencies. The flexibility provided here by Path makes dependency loading and assignment transparent and efficient.

Automatically binding is also easy to achieve. Consider the following HTML:

<textarea data-binding="form.something.selected"></textarea>
<select data-binding="form.something.selected">
  <option value="one">1</option>
  <option value="two">2</option>
</select>

Note how both the select element and the textarea element have identical data-binding properties. Path will automatically "wire up" this relationship such that whenever a new selection is made the content of the given textarea will reflect the new selected data. With very little work, very complex data relationships and interactive feedback loops can be created using Path.

Investigate the examples given in your code bundle, and play around with different orderings and nestings of modules, different data bindings. With Path we can realistically begin to design applications in which a client is understood as simply another event emitter and event listener, not unlike a Stream or process.stdin, the same holds true for the client's perception of the server. With its full-stack comprehensive design, Path is the real-time framework designed for the Node developer.

lock icon The rest of the chapter is locked
Register for a free Packt account to unlock a world of extra content!
A free Packt account unlocks extra newsletters, articles, discounted offers, and much more. Start advancing your knowledge today.
Unlock this book and the full library FREE for 7 days
Get unlimited access to 7000+ expert-authored eBooks and videos courses covering every tech area you can think of
Renews at $15.99/month. Cancel anytime
Visually different images