Last Updated –
years ago I launched the panorama.js library. It was written to NOT depend upon jQuery or any type of
other library or convenience food framework. Eliminating my requirement to depend upon jQuery is a total goal of mine. The primary reason is the pursuit of far better application efficiency and also a change to concentrating on mobile.jQuery was useful when putting big portions of DOM or HTML right into a website’s DOM tree.
Means back when I initially began making use of jQuery this included numerous lines to develop a string of organized HTML aspects and also content.Eventually I discovered, or the jQuery group added, the capacity to come on a markup string to jQuery that might then be inserted using among the adjustment techniques like appendTo, previously, after, prepend, etc. You can find these and also other DOM control approaches in the jQuery API documents. As I purged my jQuery dependency I needed to manipulate the DOM as I put as well as removed DOM nodes when the data altered the markup. I needed to identify exactly how to
do this utilizing the internet browser’s indigenous APIs.Fortunately this much simpler than it seems. The CreateDocumentFragment Approach Somewhere in the previous year I read as well as article or 2 about utilizing the document.CreateDocumentFragment method.
It allows you to develop a section of markup, or
DocumentFragment, and adjust it before it is placed in the web page’s DOM.This is extremely practical because the majority of controls of DOM components create the internet browser to reflow as well as paint the design, which you wish to lower to a minimum.This is because the nodes developed by the CreateDocumentFragment approach are not part of the DOM, they stay in memory.The technique returns a DocumentFragment object. This coincides object returned from a selector approach like querySelector. It has the complete battery of methods you can utilize for any element.Normally when utilizing CreateDocumentFragment the document.CreateElement as well as various other adjustment methods are utilized to develop as well as finish the fragment.I knew there needed to be a far better way.I started by searching through the jQuery resource and also while I could understand what they were doing, it simply appeared like way too much code to achieve a details task.One thing you learn when creating an abstraction collection like jQuery is you require to designer methods to represent various circumstances, much of which are what I call ‘edge instances’that just use up a lot of CPU cycles when not
in fact required. Plus I doubt I will certainly writer code covered by those scenarios.So I took place a safari to locate a better means to take advantage of DocumentFragments. Many thanks to a StackOverflow concern as well as address I had my method. The response was specifically what I required as well as extremely concise.It consisted of a single helper approach, called create that accepts a solitary string specification, which certainly is the HTML you wish to insert in the DOM.The big issue this feature fixes that I wanted to conquer is not adding a covering component around the wanted markup. You can not simply add a string of markup to a fragment, you have to include an HTML node.The function produces a wrapping DIV component as well as includes the markup string to it utilizing the DIV’s innerHTML residential or commercial property. At this moment you have a valid DIV aspect with
kid components, assuming the string you passes has HTML in it. You need to add the DIV’s childNodes to the DocumentFragment. We do not want the DIV we developed so rather the function loopholes via the DIV’s childNodes as well as includes them to the DocumentFragment.Now the HTML string you wish to include in the web page’s DOM structure must be a valid node/nodeList that can be included in the DOM as you intended.The feature returns the DocumentFragment and it can be added using one of the node approaches like appendChild
. I created a jsFiddle to demonstrate just how to achieve all this.I encourage you to learn to use the browser’s indigenous APIs due to the fact that they are much more performant than utilizing jQuery or any type of third party abstraction.So I produced a straightforward
little test to contrast both strategies on jsPerf.
As you can see the indigenous technique is 10s of countless times faster than utilizing jQuery.I hope you find this strategy useful. You do not need to be scared of in reverse compatibility problems since the CreateDocumentFragment function has actually been around given that Internet Traveler 6, so there are no worries about compatibility and also support.