Today I Learned - Rocky Kev

TIL how my team used web components

POSTED ON:

TAGS:

See the post here: https://dev.to/rockykev/solving-a-2002-website-issue-with-web-components-2hmf


My team inherited a site that was written in asp.net and vanilla HTML/CSS/JS.

There was roughly 100+ .html files. And the stakeholder wanted the site moved off of an old microsoft server.

I'm sure this site is from like 2002 or something (I don't exactly know).

This was a super quick task. And from the looks of it's age, we just wanted to get it done quickly.

The Problem

These .html files were fascinating!

All 100+ files sort look something like this:

<body>
<!-- asp.net code here for navigation -->

<div class="content"> ... </div>

<!-- asp.net code here for footer -->
</body>

I don't know asp.net. My hypothesis was that the original site used asp.net to pull a navigation file and a footer file for all of their pages.

All I know is that the asp.net code didn't work when we tested it on a new server. So we needed a way to get the nav/footer back.

Honestly, it seems pretty sweet that the snippet of code allowed for DRY-ness.

Different ways to solve it

Idea 1: We can roll up a JS framework.

The snippet of code? What does that remind you of? That's right -- Components!

I can quickly create-react-app or vue-create and build out a header/footer component. Should take like 30 minutes.

Problems with that approach

Issue 1 - It'll leave a trail of dependencies. Like I said, this site is OLD. It's older than my career! Some developer in 2040 will be cursing my name if I used

Issue 2 - The entire payload of this site is like 20kb. According to this gist, all the frameworks would literally double the size of this page. (Except Preact! Wow, look at that file size!)

table of minified files

(This screenshot is 61kb.)

Is there a way to avoid that overhead?

Idea 2: Quick and dirty

Why not just copy the html for the navbar and footer, and paste it where asp.net code was?

<body>
<!-- asp.net code for header is now replaced -->
<nav><ul class="menu">... </ul></nav>

<div class="content"> ... </div>

<!-- asp.net code for footer is now replaced -->
<footer><ul class="copyright">... </ul></footer>
</body>

The extra lines of code doesn't add much weight to the site. And it works?

Problems with that approach
Issue 1 - We'll have to copy/paste that code 50x times. So 50 individual .html changes.

Issue 2 - It feels bad and makes me feel bad.

Winning Idea: Web Components

The more I reflected on it, the more I remembered a thing called 'Web Components'!

Web Components is a suite of different technologies allowing you to create reusable custom elements — with their functionality encapsulated away from the rest of your code — and utilize them in your web apps.

Via MDN

It essentially looks like this:

<body>
<!-- asp.net code for header is now replaced -->
<navbar-section></navbar-section>

<div class="content"> ... </div>

<!-- asp.net code for footer is now replaced -->
<footer-section></footer-section>
</body>

I don't need props or anything, and styling is already handled.

Now we can:

  1. Have a single place to house the navbar and the footer

  2. Keep the payload lightweight.

  3. Have it work for the next million years! (Hello Google Ultron!)

See the Pen Custom elements demo by rockykev (@rockykev) on CodePen.

Conclusion

It was a pretty nifty and simple way to finally dip my team's toes into web components!

And we successfully migrated a site that lived when everyone was playing PS2, XBox and Gamecube with a few lines of modern Javascript.

Upon writing this post:
I realized that I didn't do anything special, and I didn't even NEED to use web components. There was nothing stopping me from just using Javascript to shove html into this site like our forefathers have done for the past decade, with something like insertAdjacentHTML.

Also, this post took me an hour to write, which is 5x longer than how long it took us to handle the original request. 🤣🤣🤣


Related TILs

Tagged:

TIL Gmail has a 102KB size-limit for HTML

PLACEHOLDER

TIL how Error correction works in HTML

You never get an 'Invalid Syntax' error on an HTML page. Browsers fix any invalid content and go on.

TIL what DOCTYPE means

tl;dr: DOCTYPE declaration in the first line of the HTML file, to instruct the browser to run the code in Standard mode.