web.py、postgres、redis の上に Web サイトを構築しています。私のアプリの一部のビューには、ユーザー固有の情報がいくつかあります。たとえば、ユーザーがログインしている場合、トップバーのリンクは、ログインしていないユーザーのビューや「welcome $username」などとは異なります。すべてのリクエストに応じてすべてのページをレンダリングすることで実装できます。ユーザー固有の情報を除いて、一部のビューの他の部分はまったく同じです。だから私はレンダリングされたページをキャッシュしたい。いくつかの実装アプローチを思いつきましたが、どれを使用すればよいかわかりません。また、Web 開発を独学で学んでいるので、プロの Web 開発者がこの問題にどのように対処しているかを知りたいです。
これが私のアプローチです:
- 一部のデータを Cookie に保存し、ページがユーザーのブラウザに到着した後に HTML DOM を操作する JavaScript スクリプトを記述します。そのように、私のアプリの一部のビューでは、すべてのユーザーがまったく同じページを取得しますが、Cookie に保存されているデータは異なり、javascript を使用してレンダリングされたページは異なります
- すべてのユーザーのためにいくつかのページのすべてのバージョンをレンダリングしてキャッシュしますが、それは良い考えではないと思います....
- ページの一部をレンダリングしてキャッシュし、リクエストが来たときにページを構築します。web.py の Templetor を使用してページをレンダリングしています。現在、ラッパーとして機能する基本的なサイト全体のテンプレートがあります。基本的なテンプレートを使用する代わりに、この構築アプローチを使用すると、ページのさまざまな部分をレンダリングして連結する必要がある場合があります。次に、すべてのユーザーの適切なフラグメントをキャッシュします。
私は何をすべきか?より良い解決策はありますか?私のひどい英語のライティングスキルで申し訳ありません:(私が聞きたいことを表現できることを願っています.どんな助けでも感謝し、事前に感謝します!ありがとう!:D
編集:ユーザー固有の情報を含むコードは次のようになります
<nav>
<div class="wrapper">
<div class="primary">
<ul class="nav">
<li><span>Home</span></li>
<li><span>About</span></li>
<li><span>Contact</span></li>
</ul>
</div>
<div class="secondary">
$if session.logged_in:
<span>Welcome, $session.username</span>
<a href="/new">new post</a>
<a href="/logout">logout</a>
$else:
<a href="/register">register</a>
<a href="/login">login</a>
</div>
</div>
</nav>
現在、セッションを使用しています。つまり、すべてのユーザーに対して 1 つのバージョンをキャッシュすることはできません。stackoverflow.com はこれをどのように実装していますか? ログインしていないときはトップバーの情報が異なることがわかりますが、すべてのユーザーのビューが異なることは確かです...