我有一个基本的应用程序,用户可以在其中上传一堆 HTML 文件(index.html、mypage.html)和一堆资产(myimage.jpg、myscript.js),并通过他们自己的网址(如 www.mysite)访问这些文件。 com/用户名/index.html。
但是,我的网站在上传的 HTML 中添加了一堆东西:添加评论、书签等的能力。所有这些都是通过 JS 注入的。
在我的 Rails 应用程序中,现在我正在控制器中加载用户从 S3 上传的内容,并将其与一堆 JS 一起输出到我的视图中:
def show
# load HTML from S3
# strip out everything between body tags and put in @body var
# render view that outputs @body on a page with a bunch of JS
end
但是,这非常慢,因为:
- 我没有为用户上传的文件利用 CDN 缓存
- 我没有在客户端上放置任何 HTTP 调用。客户端在查看任何内容之前正在等待服务器从 S3 加载内容。
我想请求的是以下内容
- Rails 应用程序返回一个带有 JS 的裸 HTMl 页面
- JS 从 Cloudfront 加载 HTML 文件(利用缓存)
- JS 在页面上注入 HTML,以及评论、书签等
我认为这会很棒,但我坚持文件版本控制。为了利用缓存,我想设置长 TTL 并利用文件验证。但是,我不想遍历所有用户上传的 HTML 并将所有资产标签从 /myimage.jpg 替换为 /myimage-VERSION.jpg,并且我不想要像 www.mysite.com/ 这样长的疯狂 URL用户名/索引-VERSION.html
我想知道是否有聪明的方法来做到这一点?基本上是从 Cloudfront 获取 HTML,从我的 Rails 应用程序中注入 HTML,并利用版本化文件,同时保持漂亮的 URL 和原始 HTML 文件不变。
还是我应该在控制器端使用 memcached?
有任何想法吗?