Server-side Rendering
Introduction
@knuckles/ssr
is a tool designed to enhance Knockout v3 applications by enabling server-side rendering (SSR) and Static Site Generation (SSG). It integrates easily into any build process and allows for gradual implementation without requiring a complete overhaul of your existing application.
Why?
While Knockout remains a simple yet powerful tool, it lags behind modern frameworks in certain features, particularly SSR. @knuckles/ssr
bridges this gap, offering a straightforward solution to enhance your Knockout applications. This library significantly boosts SEO and allows for asynchronous hydration, which significantly improves load speeds.
How does it work?
The library parses HTML documents to identify Knockout-specific binding attributes and virtual elements. It then server-renders these bindings by executing the binding values as JavaScript, utilizing the corresponding viewmodel.
Leveraging Knockout's MVVM pattern, which relies on underlying data models, @knuckles/ssr
allows for the creation of isomorphic viewmodels operative on both server and client sides, or distinct server-side viewmodels. Client-side, you can use applyBindings as usual for correct view hydration. For enhanced performance, consider asynchronously executing applyBindings to reduce JavaScript blocking and improve page load times.
Setup
$ npm install --save-dev @knuckles/ssr
$ yarn add --dev @knuckles/ssr
$ pnpm add --save-dev @knuckles/ssr
$ bun add --save-dev @knuckles/ssr
Usage
WARNING
The command-line interface for SSR is subject change. Expect to see updates (#10) soon 👀
$ ko ssr -i view.html -o out/
Adding Hints
You need to add hints to the view so the renderer know what data to render.
<!-- ok with: default from './viewmodel' -->
<p data-bind="text: message"></p>
<!-- /ok -->
To enable rendering, you either need to explicitly specify the "ssr" hint in the view, or configure SSR to render by default
<!-- ok with: default from './viewmodel' -->
<!-- ok ssr: -->
<p data-bind="text: message"></p>
<!-- /ok -->
<!-- /ok -->
Hydrating Server-side Rendered Views
The server-side rendered views requires custom hydration for some bindings. Import the @knuckles/ssr/runtime
module globally in your applications. The module will register all ssr binding handlers once it is loaded.
import "@knuckles/ssr/runtime";
Once the binding handlers are registered, you can run applyBindings
as normally.
ko.applyBindings(...);
Build tools
@knuckles/ssr
is pre-equipped with integrations for various build tools. See below for the complete list of supported build tools. For other tools or custom build processes, use the API (undocumented).