https://www.flickr.com/photos/lmdo/6404420503
<html>
     <body>
        <div class="navigation">...</div>
        <div class="content">...</div>
        <div class="sidebarA">...</div>
        <div class="sidebarB">...</div>
     </body>
</html> iFrames ?!?
CMS
<html>
     <body>
        <!--#include virtual="/navigation" -->
        <!--#include virtual="/content" -->
        <!--#include virtual="/sidebar?version=A" -->
        <!--#include virtual="/sidebar?version=B" -->
     </body>
</html> https://unsplash.com/photos/kvv5bm1dgc8
Lazy Loading
Web Components
https://unsplash.com/photos/TdM_fhzmWog
const routeEntries = [
  {
    name: 'home', 
    path: 'xy.com/home'
  },
  {
    name: 'content',
    path: 'xy.com/content'
  },
  {
    name: 'settings',
    path: 'xy.com/settings'
  }
}{
 "name": "Content",
 "version": "1.0.1",
 "content": {
   "js": [
     "/js/bundle.min.js"
    ],
   "css": [
     "/css/style.min.css"
    ]
 }
}
window.xy.content.init(
    applicationUrl, 
    path, 
    dependencies,
    ...
)SEO
Single Page Speed
Single Technology Stack
Engagement
Smooth Page Switch
Different Technologies
Β
Β
<html>
     <body>
          <navigation></navigation>
          <content></content>
          <sidebar version="A"></sidebar>
          <sidebar version="B"></sidebar>
     </body>
</html> 
class NewHTMLElement extends HTMLElement {
  createdCallback() {...}
  attachedCallback() {...}
  attributeChangedCallback(attr, oldVal, newVal) {...}
  detachedCallback() {...}
}
document.registerElement('new-tag', NewHTMLElement);  
class ContentElement extends HTMLElement {
  createdCallback() {
   this.addInputField();
   this.addSubmitButton();
   this.listenToSubmit();
 }
  ... 
}
document.registerElement('content', ContentElement);  <html>
 <body>
  <navigation></navigation>
  <content></content>
  <sidebar version="A"></sidebar>
  <sidebar version="B"></sidebar>
 </body>
</html>Submit