我有一个 Rails 应用程序,它使用 Rails javascript 助手将所有 javascript 连接到一个文件中。
此外,我的 Web 服务器将此 javascript 文件作为 gzip 压缩文件提供给最终用户。
由于现代浏览器将要求压缩版本 - 我是否有任何真正的好处费心在每次部署时缩小 javascript?我确信它会节省一些带宽,但如果内容已经被压缩,这将是值得的。
我有一个 Rails 应用程序,它使用 Rails javascript 助手将所有 javascript 连接到一个文件中。
此外,我的 Web 服务器将此 javascript 文件作为 gzip 压缩文件提供给最终用户。
由于现代浏览器将要求压缩版本 - 我是否有任何真正的好处费心在每次部署时缩小 javascript?我确信它会节省一些带宽,但如果内容已经被压缩,这将是值得的。
我有一个 varnish+nginx 前面的 Ruby on Rails 应用程序。由于大多数站点内容都是静态的,除非您是登录用户,因此我想在用户注销时使用清漆大量缓存站点,但仅在用户登录时缓存静态资产。
当用户登录时,他们的 Cookie: 标头中将包含 cookie 'user_credentials',此外,我需要跳过 /login 和 /sessions 上的缓存,以便用户首先获得他们的 'user_credentials' cookie .
默认情况下,Rails 不设置缓存友好的 Cache-control 标头,但我的应用程序在用户未登录时设置了“public,s-max-age=60”标头。Nginx 设置为返回“远期”到期标头对于所有静态资产。
我目前的配置是在登录时完全绕过所有内容的缓存,包括静态资产——并且在注销时为所有内容返回缓存 MISS。我花了几个小时在圈子里转,这是我当前的 default.vcl
director rails_director round-robin {
{
.backend = {
.host = "xxx.xxx.xxx.xxx";
.port = "http";
.probe = {
.url = "/lbcheck/lbuptest";
.timeout = 0.3 s;
.window = 8;
.threshold = 3;
}
}
}
}
sub vcl_recv {
if (req.url ~ "^/login") {
pipe;
}
if (req.url ~ "^/sessions") {
pipe;
}
# The regex used here matches the standard rails cache buster urls
# e.g. /images/an-image.png?1234567
if (req.url ~ "\.(css|js|jpg|jpeg|gif|ico|png)\??\d*$") {
unset req.http.cookie;
lookup;
} else {
if (req.http.cookie ~ "user_credentials") {
pipe;
}
}
# Only cache GET and HEAD requests
if (req.request != "GET" && req.request != "HEAD") {
pipe;
}
}
sub vcl_fetch {
if (req.url ~ "^/login") {
pass;
}
if (req.url ~ "^/sessions") {
pass;
}
if (req.http.cookie ~ "user_credentials") {
pass;
} else {
unset req.http.Set-Cookie;
}
# cache CSS and JS files
if (req.url ~ "\.(css|js|jpg|jpeg|gif|ico|png)\??\d*$") {
unset req.http.Set-Cookie;
}
if (obj.status >=400 && obj.status <500) {
error 404 "File not found";
}
if (obj.status >=500 && obj.status <600) {
error 503 "File is Temporarily Unavailable";
}
}
sub vcl_deliver {
if (obj.hits > 0) {
set resp.http.X-Cache = "HIT";
} else {
set resp.http.X-Cache = "MISS";
}
}
我有一个在 Ruby on Rails 上运行的大部分静态站点,它使用 Varnish 反向代理缓存来节省对 Rails 后端的点击。
问题是用户可以登录网站,当他们登录时,我们使用 ESI(边缘包括)来显示页面的用户特定部分。
使用 ESI 意味着我们必须在 Rails 后端禁用 Gzip 压缩(使用 Nginx+passenger),否则 varnish 无法解析从后端返回的数据以运行 ESI 处理。
我的问题是,使用反向代理缓存的好处是否超过了压缩所有内容的好处?还是我应该尝试完全摆脱 ESI 并拥有两全其美的优势?