发现ASP.NET一个小技巧--真爱生命,远离js、css版本号
被折腾的日子
以前不觉得js、css版本号的处理是个问题,直到最近被折磨的吐血,才发现往往不是问题的地方恰好就是问题所在。
以前接触的项目js和css一直都是放在项目下面的js和css文件夹下,没有版本号,风平浪静,现在的项目,为js和css单独搭建了一台服务器,好像还有什么nginx,竟然能把所有的js和css缓存起来,你说缓存会失效吧,他总是不在我想要的时候失效,出现bug总是因为缓存失效。
项目之前是用一个可配置的版本号来处理这个问题,版本号放在 appSettings里面,这样出了几个小问题
1 修改版本号时需要iis重启
2好几台服务器,appSettings 不能批量上传,谁也不敢保证每台服务器的appSettings配置一样,结果有一个项目里面配置还真不一样
3不是所有js在改版本号时都修改好了,可以升级版本号,因为我不知道其他人是否在改js
常规尝试
然后我发现,其他人是这么处理的,在页面上引用js时,在大版本号后面加一个小本版号,日子就这么过去了,结果问题又出现了
1现在修改版本号变成了现在服务器上下载相关文件,修改本版号,再上传文件,再在本地修改对应的版本号(如果本地可以修改的话就该,不能修改[文件被人占着]找个地方记录一下服务器的版本号)
2有时候改版本号非常频繁,例如项目上线调试,下载-》修改-》记录-》上传 ,和死循环一样
3最要命的是,有时候改一个js文件,却不知道什么地方用了这个js,用的是什么版本,只有等到bug出现时才能发现
新的尝试
现在我是这么处理的
例如博客园的这个js
<script src="http://common.cnblogs.com/blog/script/site.js" type="text/javascript"></script>
或
<script src="http://common.cnblogs.com/blog/script/site1.1.1.js" type="text/javascript"></script>
首先 创建一个和js名称一样的页面
代码如下
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="site.aspx.cs" Inherits="jsv_site" %>
<script src="http://common.cnblogs.com/blog/script/site.js?v=<%=big %>s<%=small %>" type="text/javascript"></script>
其中big为站点统一版本号,smal为当前js的小版本号,这里可以直接替换为数字
例如
<script src="http://common.cnblogs.com/blog/script/site.js?v=<%=big %>sa" type="text/javascript"></script>
以后修改可以继续追加小版本号例如abcdef等,必要时小版本号可以还原回去
或<script src="http://common.cnblogs.com/blog/script/site1.1.2.js" type="text/javascript"></script>
具体用到js的地方,下面这么引用就行了
<head>
<title></title>
<%-- <script src="http://common.cnblogs.com/blog/script/site.js" type="text/javascript"></script>--%>
<%this.Server.Execute("~/jsv/site.aspx"); %>
</head>
以后修改版本号修改上传site.aspx文件就行了!而且这个文件很少会被人占用,本地修改直接上传,连备份也省了
关于Server.Execute
Server.Execute方法允许当前的ASPX页面执行一个同一Web服务器上的指定ASPX页面,当指定的ASPX页面执行完毕,控制流程重新返回原页面发出Server.Execute调用的位置
博客园为啥没版本号
博客园的js是放在common.cnblogs.com下面,但是他为什么版本号呢?
可能是js修改不够频繁造
为什么js修改不够频繁呢?
因为没有需求
为什么没有需求呢?
因为没有用户提需求
当然,也可能是需求太多,忙不过来
最近貌似在折腾博客园知识库还是什么的,貌似要做类似基维百科的东西,
个人觉得博客园本身就应该成为基维百科类的东西,而不是做什么知识库
一人一行代码,那也是很多行代码
当然这需要一个很nb的源代码管理的东西和一个很nx的线上代码版本管理的东西和一个很nb的数据库数据版本管理的东西
当然也是需要nb的设计和开放的产品理念以及用于尝试的心态
开放代码的博客园就可以成为nb的代码的基维百科