DOMの仕組みについての質問には混乱があるかもしれません。
jsDomなどのライブラリを使用してnode.jsサーバー上にDOMを持つアプリをレンダリングすることは可能ですが、同じページがクライアントに提供される場合、そのアプリは完全に異なるDOMインスタンスを持ち、それらの2つの間で通信します。そのため、アプリがサーバー上のDOMに加えた変更を、クライアント上のDOMに簡単に伝達することはできません。
コンポーネントがブラウザで低速で実行されているように見える場合は、DOM操作をサーバーにオフロードしようとするよりも、コンポーネントを効率的に処理することで良い結果が得られる可能性が高くなります。
2つの異なるシナリオを見て、それらをブラウザーが実際に実行するものに分解すると、なぜそれが悪い考えであるかがわかります。
シナリオ(1)-サーバーでDomの変更をレンダリングする
- ステップ1-クライアントがサーバーから最初のhtmlページをロードする(遅い)
- ステップ2-ユーザーがクライアントのページを操作する(高速)
- ステップ3-クライアントはユーザーインタラクションをサーバーに送り返します(vslow)
- ステップ4-サーバーはDom(slow)をロードします
- ステップ5-サーバーはDomの変更を実行します(高速)
- ステップ6-サーバーは再レンダリングされたHTMLをクライアントに送り返します(遅い)
- ステップ7-クライアントがサーバーから新しいHTMLをレンダリングする(遅い)
シナリオ(2)-クライアントでDomの変更をレンダリングする
- ステップ1-クライアントがサーバーから最初のhtmlページをロードする(遅い)
- ステップ2-ユーザーがクライアントのページを操作する(高速)
- ステップ3-クライアントはDomの変更を実行します(高速)
- ステップ4-クライアントは変更されたDOMをレンダリングします(遅い)
DOMレンダリングをサーバーにオフロードするよりも、コンポーネントを高速化するために作業する方がはるかに優れています。これは、jqueryコードを高速化する方法に関する優れたブログ投稿です。
質問で提案したワークフローを本当に進めたい場合は、jsDomライブラリを調べることをお勧めしますが、実際にはお勧めしません。