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

时间:2022-12-16 08:40:47

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

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

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

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

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

去遍历读取html、aspx、js等可能存在js和css文件,利用正则判断这个文件中是否用引用js或css等

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

下面这两个是我.net里面要用的js和css的正则

<script[\s\S]*?src=\"(?<url>.*?)\"

<link[\s\S]*?href=\"(?<url>.*?)\"

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

大家可以使用Web Essentials

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

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

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

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

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

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

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

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

<appSettings>

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

<add key="OldMoveDic" value="C:\Users\Administrator\Desktop\masterWebSite"/>

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

<add key="newMovecssDic" value="C:\Users\Administrator\Desktop\新建文件夹\css"/>

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

<add key="newMovejsDic" value="C:\Users\Administrator\Desktop\新建文件夹\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 + "\r\n");

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]);

}

}

}

.net对js和css、img剥离项目进行压缩优化、cdn加速的更多相关文章

  1. 使用gulp对js、css、img进行合并压缩

    1 概述 最新使用AngularJS框架做单页面项目,其中包括了很多库的和自已写的js.css.img文件,这些文件都不大,但是数量众多,导致web请求文件过多,一次性加载时比较慢.有尝试过使用异步加 ...

  2. 第十一节:Bundles压缩合并js和css及原理分析

    一. 简介 1.背景:浏览器默认一次性请求的网络数是有上限的,如果你得js和css文件太多,就会导致浏览器需要多次加载,影响页面的加载速度, MVC中提供Bundles的方式压缩合并js和css,是M ...

  3. 浏览器页面请求js、css大文件处理

    当页面引用一个比较大的js和css文件时,会出现较大下载延迟,占用带宽的问题,如果一个应用里有很多这样的js或CSS文件,那么就需要优化了. 比如ext-all.js有1.4M,页面引用这个文件,正常 ...

  4. 公共cdn的js和css库

    使用cdn的js和css公用库 为什么要使用cdn,用cdn资源有什么好处了,可以看看yahoo性能建议,中间有一条的http://developer.yahoo.com/performance/ru ...

  5. vue-cli3 项目从搭建优化到docker部署

    项目地址 vue-cli3-project 欢迎 star 原文地址 https://www.ccode.live/lentoo/list/9?from=art 1. 创建一个vue项目 相信大部分人 ...

  6. Js基础知识(五) - 前端性能优化总结

    前端性能优化总结 资源优化 缓存 最好的资源优化就是不加载资源.缓存也是最见效的优化手段.说实话,虽然说客户端缓存发生在浏览器端,但缓存主要还是服务端来控制,与我们前端关系并不是很大.但还是有必要了解 ...

  7. 使用Maven构建Java Web项目时,关于jsp中引入js、css文件路径问题。

    今天有点闲,自己动手搭建一个Java Web项目,遇到jsp中引入js.css文件时路径不正确的问题,于是在网上查阅了很多资料,最终都无法解决问题,于是,上*找到了解决方法,这 ...

  8. springboot项目中js、css静态文件路径访问

    springboot静态文件访问的问题,相信大家也有遇到这个问题,如下图项目结构. 项目结构如上所示,静态页面引入js.css如下所示. 大家肯定都是这样写的,但是运行的话就是出不来效果,图片也不显示 ...

  9. node作为前台的项目如何打包静态js和css并生成版本号,loader插件的使用

    一.使用场景: 1.node创建的前台项目需要输入地址展示页面 2.有设置缓存或者cdn的需要在静态文件更改时能使用新的而不是缓存的,需要版本号这里 3.可能需要压缩静态文件的 二.一些参考地址,需要 ...

随机推荐

  1. Caused by&colon; javax&period;xml&period;bind&period;JAXBException&colon; standardPremiumUpdateMessageDTO is not a valid property on

    Caused by: javax.xml.bind.JAXBException:  standardPremiumUpdateMessageDTO is not a valid property on ...

  2. lsof命令总结

    1.lsof 简介 lsof 是 linux 下的一个非常实用的系统级的监控.诊断工具.它的意思是 List Open Files,很容易你就记住了它是 “ls + of”的组合~它可以用来列出被各种 ...

  3. navigationBar 背景色

    if ([[[UIDevice currentDevice]systemVersion]floatValue] >= 7.0) { [[UINavigationBar appearance] s ...

  4. 描述符和property内建函数

    首先我们搞清楚__getattr__ ,__get__ 和 __getattribute__ 作用的不同点. __getattr__在授权中会用到. __getattribute__  当要访问属性时 ...

  5. iOS打上线包或者测试包详细流程

    首先登陆苹果官方开发者账号:http://developer.apple.com 进入到如下界面 之后进入如下界面:点击第二项创建证书 整个流程如下图4步 然后按照如下图片进行配置即可 接下来去创建C ...

  6. jeecg 3&period;7&period;1 新版功能,集群定时任务动态发布模块 使用规则

    jeecg 3.7.1  集群定时任务动态发布模块 使用规则   新版特性:    支持集群定时任务,支持分布式. 菜单路径: 系统监控-->定时任务 字段说明: 任务ID.任务说明:自定义即可 ...

  7. 记一次Linux下给硬盘分区格式化操作

    今天找到一张旧TF卡,2G的,正好拿来练习下建立分区 插上orangepi后,fdisk -l看看,可以看到多了一个新的存储设备 /dev/mmcblk1 用fdisk打开它: fdisk /dev/ ...

  8. 【日常学习】【IDA&ast;】codevs2449 骑士精神题解

    题目描写叙述 Description 在一个5×5的棋盘上有12个白色的骑士和12个黑色的骑士, 且有一个空位.在不论什么时候一个骑士都能依照骑士的走法(它能够走到和它横坐标相差为1.纵坐标相差为2或 ...

  9. HI3531串口测试程序(arm)

    #include<stdio.h> unsigned int UART0_ADDR = 0x20080000; unsigned int retu=0; int i=0; void del ...

  10. 分类导航菜单的制作(附源码)--HTML

    不多说,直接贴代码哈!有疑问,可追加评论哈! demo.html: <!DOCTYPE html><html> <head> <title>分类导航菜单 ...