To understand how useful patterns can be, letâs review a very simple element selection problem that the jQuery library solves for us.
Imagine that we have a script where for each DOM element found on a page with class âfoo,â we wish to increment a counter. Whatâs the most efficient way to query for this collection of elements? Well, there are a few different ways this problem could be tackled:
Select all of the elements in the page and then store references to them. Next, filter this collection and use regular expressions (or another means) to store only those with the class âfoo.â
Use a modern native browser feature such as
querySelectorAll()
to select all of the elements with the class âfoo.âUse a native feature such as
getElementsByClassName()
to similarly get back the desired collection.
So, which of these options is the fastest? Itâs actually the third option by a factor of 8 to 10 times the alternatives. In a real-world application, however, the third option will not work in versions of Internet Explorer below 9; thus, itâs necessary to use the first option when neither of the others is supported.
Developers using jQuery donât have to worry about this problem,
however, as itâs luckily abstracted away for us using the
Facade pattern. As weâll review in more detail later,
this pattern provides a simple set of abstracted interfaces (e.g.,
$el.css()
, $el.animate()
) to several more complex
underlying bodies of code. As weâve seen, this means less time having to
be concerned about implementation-level details.
Behind the scenes, the library simply opts for the most optimal approach to selecting elements depending on what our current browser supports, and we just consume the abstraction layer.
Weâre probably all also familiar with jQueryâs $("selector")
. This is significantly easier to
use for selecting HTML elements on a page versus having to manually handle
opt for getElementById()
, getElementsByClassName()
, getElementByTagName
, and so on.
Although we know that querySelectorAll()
attempts to solve this
problem, compare the effort involved in using jQueryâs Facade interfaces
versus choosing the most optimal selection paths ourselves. Thereâs no
contest! Abstractions using patterns offer real-world value.
Weâll be looking at this and more design patterns later in the book.
Get Learning JavaScript Design Patterns now with the O’Reilly learning platform.
O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.