nginx如何在动态网页中间缓存一些块
nginx how to cache some block in the middle of the dynamic web page
我有一个主页,其中的动态内容因 authorized/unauthorized 用户而异。我需要在该页面的中间放置一个带有“10 个顶级实体”的 块。
这个块是由 freemarker 生成的,数据是从一些 SQL 查询中获取的,这些查询对我的数据库来说很繁重,但结果的生存时间大约为 1 小时甚至更长。
所以我认为我可以生成 block 并将其缓存在 nginx 级别。
我看到两种方式:
使用 nginx ssi 模块可能有助于包含 block 和缓存
设置 onload javascript 函数,它将通过对 HTTP 的另一个请求获取 block服务器
我的问题:处理这种情况的正确方法是什么?
这种情况可能还有另一种方法吗?
这完全取决于您的设置和具体情况。
如果 SSI 已经在项目中使用,那么 SSI 是可行的,否则 - 在项目中引入额外的组件并不总是一个好的解决方案,尤其是当应用程序逻辑溢出到这些组件上时。
第二个请求最容易实现,在这种情况下你也可以利用浏览器缓存,这可能会有一些帮助
第三个选项是将其缓存在应用程序级别(在共享 memcached/redis/etc 中)或者甚至具有物化数据库视图,以便繁重的查询变得不那么繁重。
我有一个主页,其中的动态内容因 authorized/unauthorized 用户而异。我需要在该页面的中间放置一个带有“10 个顶级实体”的 块。
这个块是由 freemarker 生成的,数据是从一些 SQL 查询中获取的,这些查询对我的数据库来说很繁重,但结果的生存时间大约为 1 小时甚至更长。 所以我认为我可以生成 block 并将其缓存在 nginx 级别。
我看到两种方式:
使用 nginx ssi 模块可能有助于包含 block 和缓存
设置 onload javascript 函数,它将通过对 HTTP 的另一个请求获取 block服务器
我的问题:处理这种情况的正确方法是什么? 这种情况可能还有另一种方法吗?
这完全取决于您的设置和具体情况。
如果 SSI 已经在项目中使用,那么 SSI 是可行的,否则 - 在项目中引入额外的组件并不总是一个好的解决方案,尤其是当应用程序逻辑溢出到这些组件上时。
第二个请求最容易实现,在这种情况下你也可以利用浏览器缓存,这可能会有一些帮助
第三个选项是将其缓存在应用程序级别(在共享 memcached/redis/etc 中)或者甚至具有物化数据库视图,以便繁重的查询变得不那么繁重。