paint-brush
Puppeteering HTML - The Art of Creating Optimized Web Pagesby@doomsdayprotocol
1,215 reads
1,215 reads

Puppeteering HTML - The Art of Creating Optimized Web Pages

by Dooms Day ProtocolOctober 25th, 2020
Read on Terminal Reader
Read this story w/o Javascript
tldt arrow

Too Long; Didn't Read

Mutation Observer is a built-in object that observes a DOM element and fires a callback when it detects a change. It allows you to detect when elements in a web page are inserted, changed, or removed. It is still relatively new, but it is supported by every modern browser. It's a weighty library for a project whose own code base is sometimes comparable to it in size. JQuery is making our life easier with some operations that are just too tedious to do with vanilla JavaScript.
featured image - Puppeteering HTML - The Art of Creating Optimized Web Pages
Dooms Day Protocol HackerNoon profile picture

The day has finally come,... to spread awareness regarding a concept called Mutation Observer. Yes, you should know about this. Simple but still a game changer when it comes to controlling how your webpage interacts with a user.

I'm saying it with no regrets, let's just

ditch JQuery
for a second. I know it's making our life easier with some operations that are just too tedious to do with vanilla JavaScript. But it's a weighty library for a project whose own code base sometimes comparable to it in size.

What if there is a way you can manipulate DOM more easily and in better optimized way. Yes there is

Mutation Observer

MutationObserver is a built-in object that observes a DOM element and fires a callback when it detects a change.
So what is means is that it allows you to detect when elements in a web page are inserted, changed,or removed. It is still relatively new, but it is supported by every modern browser.

First, we create an observer with a callback-function:

let observer = new MutationObserver(callback);

And then attach it to a DOM node:

observer.observe(node, config);

Then after any changes, the callback is executed: changes are passed in the first argument as a list of MutationRecord objects, and the observer itself as the second argument.

It's pretty simple once you get a hang of it.

For a deeper dive into web mutations, visit here.

So what is the need for it? Is there any real-life scenario to use this over anything else?

Client-side Image Optimization

Believe it or not, it’s actually possible to swap the src’s of img tags before the browser begins to load them. We can use that to optimize our images without changing the HTML source of our page.

Initializing When An Element Becomes Available on the Page

It’s a common pattern to wait for jQuery.ready or DOMContentLoaded to initialize code which depends on elements on the page. Those events don’t fire until the entire DOM has loaded however meaning the page will start to be rendered before you have a chance to change or add to its content.

Managing ContentEditable Regions

If you are truly building an editor, it’s common to want some control over what the user can enter. You can use MutationObservers to prevent certain modifications or take action when they occur.


As our marathon to make our development load fast on the client's machine is not coming to an end. These simple hacks of loading what's necessary, optimizing assets for a device among other things make a huge difference for someone picking your product over others.