单页应用程序版本控制
Single page application versioning
确保用户使用的是最新版本的单页应用程序的最佳方法是什么?我怎样才能确保用户不必点击ctrl+F5来获取最新的页面资源(JS+CSS)?
在所有引用静态文件前加上构建器编号。
你应该指向/js/123/app.js
123作为构建号,而不是/js/app.js
。
在每次部署中,增加构建号。
然后你需要做一些重写,为了让服务器在路径中有一个假文件夹时找到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:ob_start(function($data) {
return preg_replace_callback(
"(/(?:js|css|img)/.*?'.(?:js|css|png|jpg|gif))",
function($m) {
if( file_exists(substr($m[0],1))) return $m[0]."/t=".filemtime(substr($m[0],1));
else return $m[0];
},
str_replace(array_keys($rep),array_values($rep),$data)
);
});
. htaccess:
RewriteRule (.*)/t=[0-9]+$ /$1
自动附加一个特定的时间戳到所有的图像,样式和脚本:它的修改时间。然后,.htaccess
再次将其剥离。
这意味着无论何时更新这些文件中的一个,缓存的版本都将立即有效地失效。
用构建号作为静态内容折叠的前缀是一个很好的方法。为了确保它们总是在构建后提取最新的内容,您需要将该技术与服务器端标记结合起来,该标记将html与静态内容的位置结合起来,并考虑到构建号。当然,如果您使用的是100%的angular范例,那么就没有服务器端标记这样的东西,因此您需要违背解决方案的纯粹性,并在用户登录后创建一个jsp页面或类似的页面(您的欢迎页面),然后引用静态内容。然后,如果您愿意,可以在此结束服务器端代码,并从此开始使用纯静态布局。
相关文章:
- 三星智能电视应用程序;Brightcove示例应用程序远程控制问题
- PhpWindows 8.1版本上的Javascript web应用程序
- 应用程序在“关闭”之后停止工作(控制台中没有错误);咕哝的构造”;
- 控制node.js应用程序's通过外部网站举办的活动
- 如何为略有不同的不同版本的web应用程序构建代码
- 应用程序版本插件问题
- Phonegap应用程序数据库版本在更新后保留
- 当我们打开ADF应用程序的同一网页的不同版本时,如何让浏览器请求java脚本
- 在通过phonegap 2.9.0制作的应用程序中,在较低版本的android(如2.3.5)中面临问题
- Phonegap内部版本:应用程序无法在iOS上运行
- 获取模板是用我的Node.JS应用程序的新版本Handlebars错误预编译的
- 此api版本不支持onedrive文件选择器aadsts70001应用程序
- 如何在Java web应用程序中自动控制静态文件(css、js、image)的版本
- 如何在JMVC/Can.js中处理应用程序的版本控制
- 如何确保用户运行的是最新版本的应用程序,而不是缓存的版本
- Git:如何在目录结构方面分离后端Rest Api和前端应用程序的版本控制
- 安卓系统-要求服务器提供新版本的应用程序
- 单页应用程序的版本控制和路由
- Sencha CMD生成特定版本的应用程序
- 单页应用程序版本控制