js css等静态文件版本控制,一处配置多处更新.net版【原创】

摘要:
日常web开发中,我们修改了js、css等静态资源文件后,如果文件名不变的话,客户端浏览并不会及时获取最新的资源文件,这就很尴尬了怎么办呢?不方便...3.中级:加版本号?,可以,但这个文件,我们有好几个地方用,版本号都加的乱咯?v=20181120"rel="stylesheet"type="text/css"/˃4.中高级:自己搞个,一处配置多处更新,.net版舒服利用json的键值特性,此处仅用js,css举例,其他图片等静态资源,都可以使用一、新建json文件CssJsVersion.json{//请添加需要刷新的js或css文件//说明:"键值":"指向文件"//"css/common.css":"css/common_20170223.css""pc/css/common.css":"pc/css/common.css?

日常web开发中,我们修改了js、css等静态资源文件后,如果文件名不变的话,客户端浏览并不会及时获取最新的资源文件,这就很尴尬了

怎么办呢?

1.小白:让客户清除缓存?,No ,不靠谱

2.初级:把文件名改了?,可以,但我们产品样式一天更新8百次,怎么办?不方便

<link href="/css/old.css"rel="stylesheet"type="text/css" />
<link href="/css/new.css"rel="stylesheet"type="text/css" />...
<link href="/css/new800.css"rel="stylesheet"type="text/css" />

3.中级:加版本号?,可以,但这个文件,我们有好几个地方用,版本号都加的乱咯? 不方便

<link href="/css/active.css?v=20181120"rel="stylesheet"type="text/css" />

4.中高级:自己搞个,一处配置多处更新,.net版舒服
利用json的键值特性, 此处仅用js,css举例,其他图片等静态资源,都可以使用

一、 新建json文件 CssJsVersion.json

{
  //请添加需要刷新的js或css文件
  //说明:"键值": "指向文件"
  //"css/common.css": "css/common_20170223.css"
  "pc/css/common.css": "pc/css/common.css?v=20170829001",
  "pc/css/active.css": "pc/css/active.css?v=20180620001",
  "pc/js/GasgooJS.common.base.js": "pc/js/GasgooJS.common.base.js?v=20170816001",
  "pc/js/event.js": "pc/js/event.js?v=20180508001",
  "pc/js/events.js": "pc/js/events.js?v=20180111007",
  "pc/js/masterpage.js": "pc/js/masterpage.js?v=20170918001",
  "pc/js/home.js": "pc/js/home.js?v=20171013001",
  "pc/js/af.js": "pc/js/af.js?v=20180810",
  "wap/css/common.css": "wap/css/common.css?v=20171222001",
  "wap/css/active.css": "wap/css/active.css?v=20171228001",
  "wap/css/css.css": "wap/css/css.css?v=20180813001",
  "wap/js/events.js": "wap/js/events.js?v=20180517002",
  "wap/js/event.js": "wap/js/event.js?v=20171222005",
  "wap/js/applyform.js": "wap/js/applyform.js?v=20171228001",
  "wap/js/masterpage.js": "wap/js/masterpage.js?v=20170918001",
  "ticket/css/ticket.css": "ticket/css/ticket.css?v=20180608",
    "pay/css/css.css": "pay/css/css.css?v=20180831"}
View Code

二、 新建类ContentConfig.cs

usingSystem;
usingSystem.Collections.Generic;
usingSystem.Linq;
usingSystem.Web;
usingNewtonsoft.Json.Linq;
usingSystem.IO;
usingNewtonsoft.Json;

/// <summary>
///ContentConfig 的摘要说明
/// </summary>
public classContentConfig
{
    private static bool noCache = true;
    private staticJObject BuildItems()
    {
        var json = File.ReadAllText(HttpContext.Current.Server.MapPath("~/Content/Json/CssJsVersion.json"));
        returnJObject.Parse(json);
    }

    public staticJObject Items
    {
        get{
            if (noCache || _Items == null)
            {
                _Items =BuildItems();
            }
            return_Items;
        }
    }
    private staticJObject _Items;


    public static T GetValue<T>(stringkey)
    {

        try{
            return Items[key].Value<T>();
        }
        catch(Exception)
        {

            return Items["erro"].Value<T>();
        }

    }

    public static String[] GetStringList(stringkey)
    {
        return Items[key].Select(x => x.Value<String>()).ToArray();
    }

    public static String GetString(stringkey)
    {
        return GetValue<String>(key);
    }

    public static int GetInt(stringkey)
    {
        return GetValue<int>(key);
    }
    public static string GetJsCssVersionUrl(stringOldfileName)
    {
        string url = Config.RESOURCE_PATH + "/";
        try{
            url +=GetString(OldfileName);
        }
        catch (Exception)//未找到 OldfileName
{
            url +=OldfileName;
        }
        returnurl;
    }

    /// <summary>
    ///把Json文本转为实体
    /// </summary>
    /// <typeparam name="T"></typeparam>
    /// <param name="input"></param>
    /// <returns></returns>
    public static T FromJSON<T>(stringinput)
    {
        try{
            return JsonConvert.DeserializeObject<T>(input);
        }
        catch(Exception ex)
        {
            return default(T);
        }
    }
}
View Code

三、调用

js:

<script src="<%= ContentConfig.GetJsCssVersionUrl("pc/js/home.js") %>"></script>

css:

 <link href="<%= ContentConfig.GetJsCssVersionUrl("pc/css/common.css") %>" rel="stylesheet" type="text/css" />

5.高级开发:任何打包工具都可以做到,如webpack,grunt,gulp正在学习...

后语:

1. 第四个方法是笔者实际中使用的,有什么问题,也可以交流交流(* ̄︶ ̄)

2.方法那样使用,但不限于那样使用,随意发挥

3.

免责声明:文章转载自《js css等静态文件版本控制,一处配置多处更新.net版【原创】》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇转载:嵌入式C语言面试题(二)z-index 应用简单总结下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

JS动态添加行列

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Add-Delete Row.aspx.cs" Inherits="Add_Delete_Row" %> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//...

基于React Native的58 APP开发实践

React Native在iOS界早就炒的火热了,随着2015年底Android端推出后,一套代码能运行于双平台上,真正拥有了Hybrid框架的所有优势。再加上Native的优秀性能,让越来越多的公司在实际项目中一探究竟。58同城APP发布模块年代久远,一直计划进行重构以适应日益苛刻的用户体验,这个需求与我们在React Native上一探究竟的意愿一碰撞...

js解析Json字符串的方法

要把一个xml字符串转(“1,2,3,4,5,6,7,8,1,2”)换成数组的形式,每个值都应该是number类型的,想当然的就用了split方法,结果。。。问题来了,服务器要求数组的值是数字,而split是字符方法,所产生的数组也是字符串,麻烦来了。。这么大的数据量总不能一个一个的for循环parseInt吧,想想就头痛! 天无绝人之路,原来js这...

nodejs下function,new function和this的研究

转:http://www.html5china.com/html5-article-3023-1.html 重点我都高亮了! 由于在使用nodejs之前接触js也比较少,最近一直被js的function和new function所困惑,由于两者都可以呈现出面向对象的样子,不知道两者的差别在哪里,就此问题做了一些研究。在研究的过程中发现this指针是个...

js前台传数组,java后台接收转list,前后台用正则校验

前台,传参数时,将数组对象转换成json串,后台java收到后用 JSONArray.fromObject 转成集合。 前台js:var params = {"FileNameList": JSON.stringify(fileNames)}; 前台正则校验: var reg = /^[u4e00-u9fa5A-Za-z0-9-]{1,50}.txt$/;...

requireJS的使用_API(1)

之前有介绍过requireJS(模块化开发),可以看看 ,但是不详细,所以今天参考官网来详细介绍一下: 1.加载js文件: RequireJS的目标是鼓励代码的模块化,它使用了不同于传统<script>标签的脚本加载步骤。可以用它来加速、优化代码,但其主要目的还是为了代码的模块化。它鼓励在使用脚本时以module ID替代URL地址。 Requ...