被折騰的日子
以前不覺得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的代碼的基維百科