Javascript 单页应用程序版本控制
如果用户正在使用最新版本的my单页应用程序,最好的方法是什么?如何确保用户不必按ctrl+F5键来获取最新的页面资源(JS+CSS)?在所有静态文件的引用前面加上生成器编号 您应该将构建编号指向Javascript 单页应用程序版本控制,javascript,caching,version,versioning,single-page-application,Javascript,Caching,Version,Versioning,Single Page Application,如果用户正在使用最新版本的my单页应用程序,最好的方法是什么?如何确保用户不必按ctrl+F5键来获取最新的页面资源(JS+CSS)?在所有静态文件的引用前面加上生成器编号 您应该将构建编号指向/js/123/app.js而不是/js/app.js123 在每次部署时,增加生成编号 然后,您需要进行一些重写,以便在路径中存在虚假文件夹时,服务器能够找到app.js 当然,在有人关闭浏览器并再次访问页面或按F5键之前,不会重新加载静态文件 要解决这个问题,您可以使用AJAX请求app.js,并查看
/js/123/app.js
而不是/js/app.js
123
在每次部署时,增加生成编号
然后,您需要进行一些重写,以便在路径中存在虚假文件夹时,服务器能够找到app.js
当然,在有人关闭浏览器并再次访问页面或按F5键之前,不会重新加载静态文件
要解决这个问题,您可以使用AJAX请求app.js
,并查看它是否已被修改:
$.ajax({
type:"GET",
url:'/js/123/app.js',
cache:true,
ifModified:true,
success:function(data,textStatus,jqXHR){
console.debug(data); // Returns undefined when response is 304 Not Modified
}
});
以下是我的解决方案:
PHP:
.htaccess:
RewriteRule (.*)/t=[0-9]+$ /$1
这会自动为所有图像、样式和脚本添加一个特定的时间戳:修改时间。然后,.htaccess
再次将其剥离
这意味着,每当更新其中一个文件时,缓存的版本都会立即失效。经过测试,在所有浏览器中都能完美工作。在静态内容折叠前加上内部版本号是一个很好的方法。为了确保他们总是在构建之后提取最新版本,您需要将该技术与服务器端标记相结合,该标记将html与静态内容的位置结合起来,并考虑构建编号。当然,如果您使用的是100%角度的范例,那么就不存在服务器端标记这样的东西,因此您需要违反解决方案的纯洁性,并创建一个jsp页面或类似的页面,用户在登录后登录(欢迎页面),然后引用您的静态内容。然后,如果您愿意,您可以在那里结束服务器端代码,并从此开始生活在纯静态布局世界中
RewriteRule (.*)/t=[0-9]+$ /$1