fis3解决web网站缓存问题
为什么使用FIS3
项目上线一段时间后如果更新JS或CSS文件,而客户端已经对该文件缓存过了,那就有可能会无法及时更新而继续采用旧的JS或CSS文件,无法达到想要的效果。
处理类似情况最有效的解决方案就是修改其所有的链接,这样,请求就会从服务器下载最新的内容。但是要怎么改呢?
一:通过query的方式添加随机数。这样虽然可以保证每次都能获取到最新的静态资源,但即使没有更新也会去重新下载,缓存也就失去了意义,增加了服务器的负担。
二:通过query的方式添加时间戳或者版本号
<script type="text/javascript" src="index.js?t=20170325"></script>
<script type="text/javascript" src="index.js?v=1.0.0.0"></script>
这种解决方案很是直观,每次更新只需要更新相关的静态资源和页面,做到了局部更新,减轻了服务器负担,同时也使得浏览器缓存得到了有效利用。
但是,如果是访问量比较大的网站的话,还是会面临一些新的问题的。
通常,发布新版本也就是发布新的静态资源和页面的过程。比如:要发布一个index.aspx的页面,同时引入了index.js的资源。发布新版本就是要覆盖服务器上的这两个文件,不管你怎么操作,这两个文件在覆盖的过程中总会产生时间间隙的,对于访问量大的网站,在这个时间间隙内有可能是会出现新的用户访问的,这时,错误就发生了,新页面旧的静态资源或者旧页面新的静态资源。由于静态资源是覆盖发布,对于使用CDN缓存的网站来说还有可能面临CDN缓存攻击。
三:基于文件内容的hash版本冗余机制,也就是直接修改文件的URL,而不是在其后添加query
<script type="text/javascript" src="index_a5dae5b.js"></script>
其中”_a5dae5b”字符是根据index.js的文件内容进行hash运算得到的,只有文件内容发生变化了才会有更改。
由于不是同名覆盖,这样就完美的解决了发布的间隙问题,可以做到无缝连接;同时遇到问题回滚的时候只需要回滚页面就可以了。
安装Node和NPM
运行node-v6.11.4-x64安装文件安装Node和NPM
安装FIS3
运行cmd命令,执行以下安装命令安装FIS3
npm install -g fis3
安装完成后执行 fis3 -v 判断是否安装成功,如果安装成功,则显示类似如下信息:

使用FIS3发布MVC站点
1.编写发布脚本
FIS3的发布脚本为一个js脚本,用来控制执行发布命令时FIS3所做的操作。发布脚本需要放到待发布网站文件的根目录中。
// 加 md5,及静态资源命中规则
fis.match('/Areas/CommercialTenant/Content/**.{js,css,png,jpg,gif}', {
useHash: true,
release: '/Static/$0'//静态资源文件夹
});
fis.match('/Content/{Blue,Images}/**.{js,css,png,jpg,gif}', {
useHash: true,
release: '/Static/$0'//静态资源文件夹
});
fis.match('/Upload/**', {
release: false//发布时不产出文件
});
fis.match('/Config/DaoConfig.xml', {
release: false//发布时不产出文件
}); fis.match('*.js}', {
// fis-optimizer-uglify-js 插件进行压缩,已内置
optimizer: fis.plugin('uglify-js')
});
fis.match('*.min.js', {
//已经压缩过的js不进行压缩
optimizer: null
})
fis.match('*.css', {
// fis-optimizer-clean-css 插件进行压缩,已内置
optimizer: fis.plugin('clean-css')
}); //fis.match('*.png', {
// // fis-optimizer-png-compressor 插件进行压缩,已内置
// optimizer: fis.plugin('png-compressor')
//}); //// 启用 fis-spriter-csssprites 插件
//fis.match('::package', {
// spriter: fis.plugin('csssprites')
//}); //// 对 CSS 进行图片合并
//fis.match('*.css', {
// // 给匹配到的文件分配属性 `useSprite`
// useSprite: true
//}); //// 启用插件
//fis.hook('relative');
//// 让所有文件,都使用相对路径。
//fis.match('**', {
// relative: true
//})
此名为MyWeb的文件夹为使用VS2013文件发布的网站站点文件夹,其中的fis-conf文件为FIS3发布文件。
关于fis-conf配置文件的编写,请参考http://fis.baidu.com/fis3/docs/beginning/intro.html
2.将待发布网站文件上传到服务器,并将编写好的发布脚本放到待发布的网站文件根目录中。
如:本机网站目录文件在d:\MyWeb中,在服务器上的“D:\待发布网站文件”下创建一个目录命名为WaitPublishWeb。
则将本机d:\MyWeb目录中的网站文件拷贝到服务器上D:\待发布网站文件\WaitPublishWeb中。fis-conf文件也拷贝到D:\待发布网站文件\WaitPublishWeb中。
- 按照文档《fis3发布.net到iis上乱码》配置fis3源代码,不对webconfig做配置,webconfig的配置在源代码中已做好。
操作步骤:
1:cmd 输入:npm root -g 定位到文件夹下 lib\util.js 中
注释
if (buffer.charCodeAt(0) === 0xFEFF)
{
buffer = buffer.substring(1);
}
2:打开iis “.NET 全球化”-编码-文件-gb2312 改为UTF-8
4.运行cmd命令,进入"D:\待发布网站文件\WaitPublishWeb"目录,运行发布命令,命令格式为fis3 release -d D:\output
命令中的D:\output修改为发布目标网站目录,如201环境中的发布目标网站目录为E:\WebSite\Eplus365。则命令为fis3 release -d E:\WebSite\Eplus365.


成功了!
fis3解决web网站缓存问题的更多相关文章
- SElinux解决web网站无法访问
SElinux解决web网站无法访问工具/原料centos 6.5系统httpd web服务器 SELinux 设置为enforcing:强制模式,代表 SELinux 运作中 方法/步骤1. 1se ...
- 解决web网站被挂马清除方法
案例:某公司一个lamp的服务器网站站点目录下所有文件均被植入了广告脚本如下内容: <script language=javascriptsrc=http://%4%66E%78%72%67%2 ...
- C#不用union,而是有更好的方式实现 .net自定义错误页面实现 .net自定义错误页面实现升级篇 .net捕捉全局未处理异常的3种方式 一款很不错的FLASH时种插件 关于c#中委托使用小结 WEB网站常见受攻击方式及解决办法 判断URL是否存在 提升高并发量服务器性能解决思路
C#不用union,而是有更好的方式实现 用过C/C++的人都知道有个union,特别好用,似乎char数组到short,int,float等的转换无所不能,也确实是能,并且用起来十分方便.那C# ...
- 关于IIS中WEB网站访问弹“验证输入框”及“401限制访问”的解决办法
最近在配置IIS网站的过程中,不管是本地还是外部访问配置的网站,出现了需要输入用户名.密码.及域的对话框,解决之后又出现页面401限制访问的错误页面. 就这两项错误,依次做一下解决办法的整理. 解决流 ...
- WEB网站常见受攻击方式及解决办法
一个网站建立以后,如果不注意安全方面的问题,很容易被人攻击,下面就讨论一下几种漏洞情况和防止攻击的办法. 一.跨站脚本攻击(XSS) 跨站脚本攻击(XSS,Cross-site scripting)是 ...
- 【转】WEB网站常见受攻击方式及解决办法
一个网站建立以后,如果不注意安全方面的问题,很容易被人攻击,下面就讨论一下几种漏洞情况和防止攻击的办法. 一.跨站脚本攻击(XSS) 跨站脚本攻击(XSS,Cross-site scripting)是 ...
- 利用IIS部署WEB网站以及解决CSS/JS不能显示问题
利用IIS部署WEB网站以及解决CSS/JS不能显示问题 转载声明:http://blog.sina.com.cn/s/blog_a001e5980101b4kt.html vs中正常IIS发布网站后 ...
- 构架高性能WEB网站的几点知识
前言: 对于构架高性能的web网站大家都很感兴趣,本文从几点粗谈高性能web网站需要考虑的问题. HTML静态化 什么是html静态化? 说得简单点,就是把所有不是.htm或者.html的页面改为.h ...
- 【架构】浅谈web网站架构演变过程
浅谈web网站架构演变过程 前言 我们以javaweb为例,来搭建一个简单的电商系统,看看这个系统可以如何一步步演变. 该系统具备的功能: 用户模块:用户注册和管理 商品模块:商品展示和管 ...
随机推荐
- win10改win7如何设置bios教程
情况一: 我们按del键(百度自己电脑.主板如何进入bios)进入主板bios后,我们通过键盘将选项移动到 Authentication 菜单(bios界面各不相同,可能不在此项,找到对应 secur ...
- unity3d的三种平面坐标系
unity3d有如下三种平面坐标系: 1.屏幕坐标系 2.视口坐标系viewport 3.GUI坐标系
- centos(7.0) 上 crontab 计划任务
yum install vixie-cron yum install crontabs /bin/systemctl restart crond.service #启动服务 /bin/systemc ...
- nginx-1.2.7+tcp_proxy_module负载均衡配置
对于安装方面不清楚的,可移步 nginx + tcp_proxy_module的安装 参考nginx_tcp_proxy_module的readme文件,对每个定义项都做了详细的描述,tcp{...} ...
- Mac OSX下Go语言开发环境的搭建与配置--使用InteliJ IDEA 13
折腾了一上午终于把go语言的ide配置好了. 其实GO语言的语法和特性早在去年的时候就学习了一遍.结果后来一直没机会进行开发,结果还是个GO小白.感叹一下,要学好一门编程语言唯一的途径就是多写代码.. ...
- 李洪强iOS开发之iOS工具收集
李洪强iOS开发之iOS工具收集 项目 简述 日期 我是怎么慢慢变懒的 : Jenkins + 蒲公英 使用Jenkins + 蒲公英使得项目打包给测试人员自动化,大大节省了劳动力 2015.04.1 ...
- 李洪强和你一起学习前端之(4)HTML5介绍
1.1认识HTML5 html的版本: html4 Xhtml1.0 目前: html5是最高的版本 再怎么变化,无非是多了一些标签而已,但是不单单是提供了一些标签 比如: 开发网页游戏 我们可以开发 ...
- Redis-ha(sentinel)搭建
服务器描述:本次搭建是用来测试,所以是在一台服务器上搭建三个redis服务(一主两从) 服务角色 端口 Redis.conf名称 sentinel配置文件名称 sentinel端口 redis日志路径 ...
- Oracle之sqlplus显示中文出现乱码
解决办法: win+R快捷键>>--regedit>>HKEY_LOCL_MACHINE>>SOFTWARE>>ORALCE>>KEY_OR ...
- Spring的核心机制——依赖注入(Dependency Inject)
Spring不仅提供对象,还提供对象的属性值,而不是由使用该对象的程序所提供的. Java应用是由一些相互协作的对象所组成的,在Spring中这种相互协作的关系就叫依赖关系. 如果A组件调用了B组件的 ...