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

摘要:
1、 简介1.背景:默认情况下,浏览器对一次可以请求的网络数量有上限。如果您有太多的js和css文件,浏览器将需要多次加载,从而影响页面的加载速度。MVC提供了Bundles方法来压缩和合并js和css,这是MVC中一种独特的优化方法。(当然,前端也有许多基于节点的工作流插件,可以与js或css组合、压缩和混淆)2.原理(请理解):核心方法ApplyTransforms,通过StreamReader重复

一. 简介

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

 (当然现在前端也有很多基于node的工作流插件,可以合并压缩混淆js或css)

2. 原理(了解即可):核心方法ApplyTransforms,通过StreamReader不断一次一次进行读取

  参考文档:https://docs.microsoft.com/en-us/aspnet/mvc/overview/performance/bundling-and-minification

二. 如何使用

 ①:首先要在Global中进行注册,代码:BundleConfig.RegisterBundles(BundleTable.Bundles); 【系统默认已经注册,此步骤不需要我们操作】

 ②:在BundleConfig类中进行自定义合并压缩js或css

   a. 压缩css方法:bundles.Add(new StyleBundle("~/XXX").Include("","",""));

    StyleBundle中的参数为一个虚拟路径,单必须以【~/】开头,后面自定义,该名称即为在前端页面引入的名称。

    Include中的参数为一个可变的string数组,用来声明要压缩合并的css文件的路径。

   b. 压缩js方法:bundles.Add(new ScriptBundle("~/XXX").Include("","",""));

    ScriptBundle中的参数为一个虚拟路径,单必须以【~/】开头,后面自定义,该名称即为在前端页面引入的名称

    Include中的参数为一个可变的string数组,用来声明要压缩合并的css文件的路径。

③:在前端页面通过Render方法或者原生方法引入合并后的js或css的虚拟目录

④:将webconfig中的调试模式设置为false,这样在不发布的情况下就可以看到压缩后的效果。

    <compilation debug="false" targetFramework="4.5" />

  如果设置为true,直接在vs中运行,是看不到压缩效果的,仍然是多个js或css文件 (适用于通过Render方式的引入)

⑤:该步骤和④的效果相同.

  如果不设置④的情况下,还想在vs中运行看到压缩效果,也可以在BundleConfig中加一句话:

  BundleTable.EnableOptimizations = true; (特别注意:这里是true,而配置文件的方式是设置为false)

  (适用于通过Render方式的引入)

补充:通过表达式扩展:(详细语法可以参考上面的地址,下面扩展几个常用的)

①: T* 该目录下以T开头的js或css文件

②: *.js *.css 该目录下的所有js或css文件

③: T*.js T*.css 这个是不合法,违规的

三. 代码测试

 1. 新建两个js文件和css文件

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

2. 在BundleConfig文件中进行注册

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

3. 编写前端页面,以传统的方式引入,并查看效果。

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

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

4. 引入压缩合并后的路径。

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

方式一的运行结果:

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

方式二的运行结果:发现并没有压缩

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

 至于为什么,上面已经解释了。 

 解决方案:

  方案①:BundleTable.EnableOptimizations = true;

  方案②:<compilation debug="false" targetFramework="4.5" />

 重新运行:

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

最后补充几个含格式验证的压缩:

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

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

免责声明:文章转载自《第十一节:Bundles压缩合并js和css及原理分析》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇FCKeditor 2.6.4.1配置element+vue显示数据库数据下篇

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

相关文章

js 获取地址第1个斜杠后的内容或地址前一部分

var value = "https://www.baidu.com/20210922/95b22ab5034b2d0f.jpg";const str = value.split("https://"); //https://进行分割, const index = str[1].indexOf("/")+1; //indexOf 获取第一个斜杠的索引,co...

关于H5 移动端css 文本超出时省略号 失效的问题

之前写代码的时候遇到一个问题,就是用了下面这段css代码来让文字超出范围隐藏并显示省略号。 overflow: hidden; text-overflow: ellipsis; display: -webkit-box; -webkit-line-clamp: 3; -webkit-box-orient: vertical;...

vue中使用keepAlive(缓存页面&amp;amp;记忆上次浏览位置)及使用后生命周期的改变

以下部分内容转自博客(另外配有自己见解):https://www.cnblogs.com/nokelong/p/8116631.html 使用keepAlive缓存页面,一可以减少服务器请求次数,二则可以在用户返回上一页后记忆到上次浏览位置(ios端微信浏览器不适用,不兼容,需要另行配置:见例子(1)) keep-alive的介绍如下: 1,把切换出去的组...

linux 头文件

在不同版本的内核源码上,头文件所在的位置是不同的,比如说在 #include<asm/arch/regs-gpio.h> #include<mach/regs-gpio.h> 同样是regs-gpio.h,<asm/arch/regs-gpio.h>是在比较低的版本(比如2.6.25)上位于arch/arm/includ...

总结前端面试过程中最容易出现的问题

前言 之前在兴安得力的时候,我也出过前端的面试题。那么前端人员在外面面试的时候,一般技术人员都会考察我们那些地方呢?我在这里不妨总结一下!(PS:有点小邪恶,这个公开之后,对于面试者来说是方便了。但是,假如你是公司技术人员,是面试官,您不妨修改一下题目,变通一下!) javascript常见题目 一、您对js的原型是如何理解的?您对js的继承是如何理解的?...

js 递归获取子节点所有父节点,深度遍历获取第一个子树

前端需求。 递归 深度优先遍历算法 // 查找一个节点的所有父节点 familyTree (arr1, id) { var temp = [] var forFn = function (arr, id) { for (var i = 0; i < arr.length; i++) {...