• .net对js和css、img剥离项目进行压缩优化、cdn加速


    由于网站首页以及经常用的页面初始化慢,想后面想了对imagejscss进行迁移优化。

     1.把他放到独立的域名上面,这个就要对imagejscss从原项目上面脱离,以及把原来很多页面引用的地址修改成为带域名的,对于imagejscss脱离很简单(自己写个移动文件的工具去遍历文件夹查询相对应的文件就可以了,在新域名的那边多了一层这个项目的目录,下面的结构按原来的目录移动到这个目录的下面,尽量保持目录结构不变),在移动的过程中把文件夹以及文件名全部改为小写,因为到时候这些要放到cdn上面,而cdn一般是在linux上面的,解析的时候区分大小写。

     1.1   对于img图片要另外写正则去查询页面上、cssjs引用的 是否把cssjs以及页面引用img,最好利用vs写个正则人工去看一遍哪些改的(当然人工一个个去改就更好的,免得不知道哪里错了),这个也要对图片加上域名以及转换小写。

     1.2  对于jscss就写个工具去判断修改就好了。下面是思路

    去遍历读取htmlaspxjs等可能存在jscss文件,利用正则判断这个文件中是否用引用jscss

      如果存在则判断他是否是http(https):// 开头的,如果是则对这个jssrccsshref的值直接转换为小写;如果不是不是域名则判断是否是绝对路径(/开头的),如果是绝对路径的话,则域名+转换小写(),如果不是绝对路径的话,则利用域名+遍历目录的值+转换小写(相对路径的值)。这个修改的时候最好做一下日志备份,写明修改文件+原来值+修改后的值。以方便差错。 

    下面这两个是我.net里面要用的jscss的正则

    <script[sS]*?src="(?<url>.*?)" 

    <link[sS]*?href="(?<url>.*?)"

    1.3jscss进行压缩,发现雅虎压缩的dll对于一些不符合标准的格式的js会压缩失败。

    大家可以使用Web Essentials

    https://visualstudiogallery.msdn.microsoft.com/56633663-6799-41d7-9df7-0f2a504ca361

    css limt,我们用的是Web Essentials,但这个工具有个不好的地方就是,我们用的是vs2013,在这个版本下面必须是update 5才能使用,不然安装不成功

     

    为了方便压缩,我们把jscss分别移动到两个目录下面,当然对于老产品,肯定发现有很多js名称重复的,但是在不同目录下面,这个可以直接对移动后的值进行重命名(比如guid),并做日志记录,以方便还原到原路径下面。

     

    下面代码是移动目录和还原的代码思路(C# Winform代码)

      <appSettings>

        <!--要遍历移动的目录-->

        <add key="OldMoveDic" value="C:UsersAdministratorDesktopmasterWebSite"/>

        <!--移动之后css的目录-->

        <add key="newMovecssDic" value="C:UsersAdministratorDesktop新建文件夹css"/>

        <!--移动之后js的目录-->

        <add key="newMovejsDic" value="C:UsersAdministratorDesktop新建文件夹js"/>

      </appSettings>

       string OldMoveDic = ConfigurationManager.AppSettings["OldMoveDic"];

            string newMovecssDic = ConfigurationManager.AppSettings["newMovecssDic"];

            string newMovejsDic = ConfigurationManager.AppSettings["newMovejsDic"];

            /// <summary>

            /// 移动文件目录

            /// </summary>

            /// <param name="sender"></param>

            /// <param name="e"></param>

            private void button10_Click(object sender, EventArgs e)

            {

            

                if (!Directory.Exists(OldMoveDic))

                {

                    MessageBox.Show("没有配置OldMoveDic或者目录不存在");

                }

                else if (!Directory.Exists(newMovecssDic))

                {

                    MessageBox.Show("没有配置newMovecssDic或者目录不存在");

                }

                else if (!Directory.Exists(newMovejsDic))

                {

                    MessageBox.Show("没有配置newMovejsDic或者目录不存在");

                }

                else {

                    DirectoryInfo direcinfo = new DirectoryInfo(OldMoveDic);

                if(File.Exists("原目录文件.txt"))

                {

                    File.Delete("原目录文件.txt");

                }

                GetDirectorieMoveFile(direcinfo, OldMoveDic, newMovecssDic, newMovejsDic);

                MessageBox.Show("移动成功");

                }

            }

            /// <summary>

            /// 移动目录到同一路径下(递归)

            /// </summary>

            /// <param name="direcinfo"></param>

            /// <returns></returns>

            public void GetDirectorieMoveFile(DirectoryInfo direcinfo, string olddic, string newdic, string newMovejsDic)

            {

                FileInfo[] files = direcinfo.GetFiles();

                DirectoryInfo[] strDirectoryInfo = direcinfo.GetDirectories();

                if (strDirectoryInfo.Length <= 0 && files.Length <= 0)

                {

                }

                foreach (FileInfo info in files)

                {

                   int LastIndexOf = info.FullName.LastIndexOf(".");

                   string lastname = info.FullName.Substring(LastIndexOf).ToLower();

                   string oldFullName = info.FullName;

                   if (lastname == ".css" || lastname == ".js")

                   {

                       string newFullName = lastname == ".css" ? newdic : newMovejsDic;

                       newFullName = newFullName + "\" + System.Guid.NewGuid().ToString();

                       using (StreamWriter filestr = new StreamWriter(("原目录文件" + ".txt"), true))

                       {

                           filestr.Write(oldFullName + "|@|" + newFullName + lastname + " ");

                           filestr.Close();

                       }

                       info.MoveTo(newFullName.ToLower() + lastname);

                   }

                }

                foreach (DirectoryInfo dirinfo in strDirectoryInfo)

                {

                    GetDirectorieMoveFile(dirinfo, olddic, newdic, newMovejsDic);

                    try

                    {

                        //dirinfo.MoveTo(dirinfo.Parent.FullName + "\" + dirinfo.Name.ToLower());

                        // Directory.Move(dirinfo.FullName, dirinfo.Parent.FullName.Replace("C:\Users\Administrator\Desktop\MasterWebSite", "C:\Users\Administrator\Desktop\1") + "\" + dirinfo.Name.ToLower());

                    }

                    catch (Exception ex)

                    { }

                }

                //direcinfo.MoveTo(direcinfo.ToString().ToLower());

            }

            /// <summary>

            /// 还原原文件地址

            /// </summary>

            /// <param name="sender"></param>

            /// <param name="e"></param>

            private void button11_Click(object sender, EventArgs e)

            {

                if (File.Exists("原目录文件.txt"))

                {

                    GetDirectorieMoveFile("原目录文件.txt");

                    File.Delete("原目录文件.txt");

                    MessageBox.Show("逆向移动成功");

                }

                else

                {

                    MessageBox.Show("没有可以还原的文件");

                }

            }

            /// <summary>

            /// 还原目录到同一路径下(递归)

            /// </summary>

            /// <param name="direcinfo"></param>

            /// <returns></returns>

            public void GetDirectorieMoveFile(string olddic)

            {

                string[] allAlllines = File.ReadAllLines(olddic);

                foreach (string line in allAlllines)

                {

                     string  [] linesSplit=line.Split(new string[]{"|@|"},StringSplitOptions.None);

                    if(linesSplit.Length>=2)

                    {

                        FileInfo info = new FileInfo(linesSplit[1]);

                        info.MoveTo(linesSplit[0]);

                    }

                }

            }

  • 相关阅读:
    OpenGL的glTranslatef平移变换函数详解
    OpenGL的glRotatef旋转变换函数详解
    OpenGL的GLUT初始化函数[转]
    OpenGL的GLUT事件处理(Event Processing)窗口管理(Window Management)函数[转]
    OpenGL的GLUT注册回调函数[转]
    OpenGL的gluLookAt和glOrtho的关系
    OpenGL的glClearColor和glClear改变背景颜色
    OpenGL的gluPerspective和gluLookAt的关系[转]
    OpenGL的glOrtho平行投影函数详解[转]
    OpenGL的glViewport视口变换函数详解[转]
  • 原文地址:https://www.cnblogs.com/zhian/p/5062764.html
Copyright © 2020-2023  润新知