angular 单页面开发,会存在和管理很多HTML和JS文件,缓存有时是个麻烦。

在开发和测试阶段,F12调出调试工具,禁止缓存F5刷新下就好了。

但是在客户那里缓存就体验效果不好,甚至认为有问题,联系客服,影响工作效率。

主要做几点就可以了,最主要的一点就是HTML和JS动态加载,点击菜单时再去加载。

项目中的库文件一般不需要管他,一百年不变,解决缓存的主要是经常变化的部分,

如:修改了页面布局,前端js逻辑发生变动。。。

最主要的策略是,为项目加版本号,不管是HTML还是js、css文件,更新发布后,

不需要客户/实施同事 F12清缓存,只需F5刷一下即可。

1、在主页面HTML上禁止缓存

    <meta http-equiv="Expires" content="0">
<meta http-equiv="Pragma" content="no-cache">
<meta http-equiv="Cache-control" content="no-cache">
<meta http-equiv="Cache" content="no-cache">

2、项目主样式,加版本号; <link href="static/iconFont/iconfont.css?v=1" rel="stylesheet">

3、require的main文件管理常用文件的版本号;

var appVersion = '?v=2018.10.1.2';
require.config({
paths: {
'lodash': 'static/lodash.min',
'jquery': 'static/jquery-1.11.3/jquery.min',
'jqueryMig': 'static/jquery-migrate-1.4.1.min',
'autocomplete': 'static/jquery-autocomplete/jquery.autocomplete.min',
'bootstrap': 'static/bootstrap-3.3.7-dist/js/bootstrap.min',
'angular': 'node_modules/angular/angular.min',
'ui-router': 'node_modules/angular-ui-router/release/angular-ui-router.min',
'select': 'static/bootstrap-select.min',
'select-zh': 'static/bootstrap-select-zh_CN.min',
'laydate': 'static/laydate/laydate',
'layer': 'static/layer/layer',
'app': 'app.js'+appVersion,
'masterRt': '01-master/masterRouter.js'+appVersion,
'autoSvc': 'service/autoSvc.js'+appVersion,
'layerSvc': 'service/layerSvc.js'+appVersion,
'datefmt': 'prototype/date.js'+appVersion,
},
shim: {
'bootstrap': ['jquery'],
'jqueryMig': ['jquery'],
'select': {deps: ['bootstrap'], exports: 'select'},
'select-zh': {deps: ['select'], exports: 'select-zh'},
'ui-router': ['angular'],
'app': ['ui-router'],
'masterRouter': ['app'],
'autocomplete': ['jquery','jqueryMig']
}
});

4、动态加载功能页面HTML时,加版本号;即angular拦截器的request时处理;

    app.factory('interceptor', function ($q, $location) {
return {
request: function (config) {
if (config.url.indexOf('/login/') === -1 && sessionStorage.session) {
var session = JSON.parse(sessionStorage.session);
config.headers['id'] = session.id;
config.headers['token'] = session.token;
} // 禁止HTML缓存
if(config.url.indexOf('.html') > 0){
//var nocache = '?v=' + new Date().getTime();
var idx = config.url.indexOf('?v=');
if(idx === -1)
config.url += appVersion;
else{
config.url = config.url.substr(0, idx) + appVersion;
}
}
return config || $q.when(config);
},
response: function (response) {
if (response.config.url.indexOf('service') > -1) {
//todo 预处理请求结果
}
return response || $q.when(response);
},
responseError: function (response) {
if (response.status === 401) {// If our response status is unauthorized
$location.path('/main/index');// Redirect to the login screen
} else {
return $q.reject(response);// Reject our response
}
}
};
});

5、动态加载功能页面的js控制器和依赖js文件时,加版本号;

    // 延迟加载方法
app.loadJs = function (files) {
return {
ctrl: function ($q) {
// 禁止业务模块的js缓存
//var nocache = '?x=' + new Date().getTime();
for(var i=0; i<files.length; i++){
var idx = files[i].indexOf('?v=');
if(idx === -1)
files[i] += appVersion;
else{
files[i] = files[i].substr(0, idx) + appVersion;
}
}
var wait = $q.defer();
require(files, function () {
wait.resolve();
});
return wait.promise;
}
};
};

6、路由器的每个state定义时,动态加载js处理;

            .state('main.login', {
url: '/login',
templateUrl: modulePath + 'login.html',
controller: 'loginCtrl',
resolve: app.loadJs([modulePath + 'login.js'])
})

这样处理完,发布前端项目时,注意修改项目版本号,我这里测试发布在Nginx,转发后台处理的请求。

发布后F5刷新即可,效果:

angular 禁止缓存的更多相关文章

  1. [转]angular 禁止缓存

    本文转自:https://www.cnblogs.com/jonney-wang/p/9797906.html angular 单页面开发,会存在和管理很多HTML和JS文件,缓存有时是个麻烦. 在开 ...

  2. HTML页面和JSP页面禁止缓存

    一.JSP页面禁止缓存: 防止浏览器缓存当前访问的JSP动态页面,可以采用如下的方式进行设置,此效果如下的“HTML禁止缓存”: % 将过期日期设置为一个过去时间response.setHeader( ...

  3. Ajax禁止缓存的几个解决方案

    最常用的方法是 方法1:服务器端代码加入  代码如下 复制代码 response.setHeader("Cache-Control", "no-cache, must-r ...

  4. Chrome调试javacript禁止缓存

    /********************************************************************* * Chrome调试javacript禁止缓存 * 说明: ...

  5. RequireJS禁止缓存

    通过配置文件可以禁止加载缓存的JS文件, 这个在开发过程中非常有用具体做法如下 require.config({ paths: { "E":"/Scripts/MyMod ...

  6. 【前端_js】Chrome禁止缓存的方法

    在前端开发中,浏览器缓存使得我们改了代码后页面不变,得经常手动清理缓存. 1.按如下操作即可禁用浏览器缓存, 这种方法基本能够做到完全禁止缓存,然而缺点是必须要将开发模式一直打开,占用屏幕空间.而且, ...

  7. 网页禁止右键,禁止F12,禁止选中,禁止复制,禁止缓存等操作

    一.禁止右键 //方法一 document.onmousedown = function () { ) { return false; } } //方法二 document.oncontextmenu ...

  8. 使用 Angular RouteReuseStrategy 缓存(路由)组件

    使用 Angular RouteReuseStrategy 缓存组件 Cache components with Angular RouteReuseStrategy RouteReuseStrate ...

  9. angular页面缓存与页面刷新

      angularJS学习笔记:页面缓存与页面刷新 遇到的问题 现在存在这样一个问题,登录前与登录成功后是同一个页面,只不过通过ngIf来控制哪部分显示,图像信息如下: 所以,整体工作不是很难,无非就 ...

随机推荐

  1. UITableView自动计算cell高度并缓存

    原文链接:http://www.jianshu.com/p/64f0e1557562 cell高度计算的历史 在iOS8之前,如果UITableViewCell的高度是动态的,如果想要显示正确的话,我 ...

  2. Batch Normalization--介绍

    思考 YJango的前馈神经网络--代码LV3的数据预处理中提到过:在数据预处理阶段,数据会被标准化(减掉平均值.除以标准差),以降低不同样本间的差异性,使建模变得相对简单. 我们又知道神经网络中的每 ...

  3. Hessian学习(springboot环境)

    Hessian介绍: Hessian是一个轻量级的remoting onhttp工具,使用简单的方法提供了RMI的功能. 相比WebService,Hessian更简单.快捷.采用的是二进制RPC协议 ...

  4. dwr学习(一):简单dwr实例

    博客分类:  dwr   最近写ajax写烦了,想着能不能有个更简单的“ajax”,一问就问到这个dwr了.赶紧去官网学习了下,这里写个博客记录一下实例. 测试环境:tomcat6.0 1.新建一个w ...

  5. docker系统学习之docker界面管理

    docker可视化界面 dockerUI已废弃,转投Portainer项目 Portainer,轻量级管理界面,基本满足中小单位需求 官方Github https://github.com/porta ...

  6. Apache重写规则

    1..htaccess文件使用前提 .htaccess的主要作用就是实现url改写,也就是当浏览器通过url访问到服务器某个文件夹时,作为主人,我们可以来接待这个url,具体 地怎样接待它,就是此文件 ...

  7. python实现桶排序算法

    桶排序算法也是一种可以以线性期望时间运行的算法,该算法的原理是将数组分到有限数量的桶里,每个桶再分别排序. 它的算法流程如下所示: 设置一个定量的数组当作空桶子. 寻访序列,并且把项目一个一个放到对应 ...

  8. Liferay7 BPM门户开发之16: Liferay中用户\站点\组织架构\角色\用户组以及关联关系

    用户 . 站点 . 组织架构 . 角色 . 用户组分别是:Users. Site. Organization. Role. UserGroups Users 用户是Liferay portal中的关键 ...

  9. Go语言标准库之time

    Go语言标准库之time 时间的格式化和解析 格式化 Format Go语言和其他语言的时间格式化的方式不同,Go语言格式化的方式更直观,其他的语言一般是yyyy-mm-dd package main ...

  10. [源码]Delphi源码免杀之函数动态调用 实现免杀的下载者

    [免杀]Delphi源码免杀之函数动态调用 实现免杀的下载者 2013-12-30 23:44:21         来源:K8拉登哥哥's Blog   自己编译这份代码看看 过N多杀软  没什么技 ...