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


    日常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

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Web;
    using Newtonsoft.Json.Linq;
    using System.IO;
    using Newtonsoft.Json;
    
    /// <summary>
    /// ContentConfig 的摘要说明
    /// </summary>
    public class ContentConfig
    {
        private static bool noCache = true;
        private static JObject BuildItems()
        {
            var json = File.ReadAllText(HttpContext.Current.Server.MapPath("~/Content/Json/CssJsVersion.json"));
            return JObject.Parse(json);
        }
    
        public static JObject Items
        {
            get
            {
                if (noCache || _Items == null)
                {
                    _Items = BuildItems();
                }
                return _Items;
            }
        }
        private static JObject _Items;
    
    
        public static T GetValue<T>(string key)
        {
    
            try
            {
                return Items[key].Value<T>();
            }
            catch (Exception)
            {
    
                return Items["erro"].Value<T>();
            }
    
        }
    
        public static String[] GetStringList(string key)
        {
            return Items[key].Select(x => x.Value<String>()).ToArray();
        }
    
        public static String GetString(string key)
        {
            return GetValue<String>(key);
        }
    
        public static int GetInt(string key)
        {
            return GetValue<int>(key);
        }
        public static string GetJsCssVersionUrl(string OldfileName)
        {
            string url = Config.RESOURCE_PATH + "/";
            try
            {
                url += GetString(OldfileName);
            }
            catch (Exception)//未找到 OldfileName
            {
                url += OldfileName;
            }
            return url;
        }
    
        /// <summary>
        /// 把Json文本转为实体
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="input"></param>
        /// <returns></returns>
        public static T FromJSON<T>(string input)
        {
            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中字符串的true转化为boolean类型的true
    jquery select change下拉框选项变化判断选中值
    C# 使用 NPOI 库读写 Excel 文件
    通过微信分享链接,后面被加上from=singlemessage&isappinstalled=1导致网页打不开
    C# 中使用 ThoughtWorks.QRCode.dll 生成指定尺寸和边框宽度的二维码
    除非另外还指定了 TOP 或 FOR XML,否则,ORDER BY 子句在视图、内联函数、派生表、子查询和公用表表达式中无效
    SQL查询语句如何能够让指定的记录排在最后
    搞懂 JavaScript 继承原理
    基于Socket通讯(C#)和WebSocket协议(net)编写的两种聊天功能(文末附源码下载地址)
    SqlServer 使用sys.dm_tran_locks处理死锁问题
  • 原文地址:https://www.cnblogs.com/sdd53home/p/9989332.html
Copyright © 2020-2023  润新知