整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:

前端性能优化 - 静态资源合并与压缩减少HTTP请求

前端性能优化 - 静态资源合并与压缩减少HTTP请求

于前端性能优化方法有很多,包括:图片合并、使用缓存、使用CDN、减少重定向、减少请求、压缩等等。今天就针对减少请求、资源压缩,给大家推荐一个基于.Net开发的资源合并与压缩的开源项目。

在介绍这个项目之前,先问大家一个问题,大家知道一个浏览器同域名请求的最大并发数限制是多少吗?

在早期的浏览器有的是2个、有的是4个,现在市面主流的浏览器一般限制数量是6个,手机一般是4个。虽然每个浏览器限制数量不一样,但我们知道的是,当一个页面同时发起过多的请求,肯定会导致部分请求在等待的

所以,我们压缩和合并静态资源请求数量,对于我们优化性能肯定有好处的。


项目简介

这是一个基于.Net Core开发的,实现压缩Css、Javascript、Html资源的压缩、合并功能的组件。通过这个组件我们就可以实现静态资源的捆绑,实现对js、css、less、scss等静态资源的自动打包捆绑处理。

通过将多个文件合并成了一个文件,减少浏览器的请求从而实现提升网站的访问性能的需求。

特点:

1、Js压缩:进行去掉空格,换行,注释等,格式紧凑,内部方法匿名化,节约存储空间。

2、Css压缩:去掉空格,换行,注释等,格式紧凑,节约存储空间。

3、Html压缩:压缩效果可以实现5-10%的压缩,删除助手、折叠空白、删除可选标记(p、li…)、删除引用的属性、删除特定属性、解码HTML实体、压缩内联样式和脚本;支持Html5。


技术架构

1、平台:基于.Net Core 4.5、Netstandard2.0开发

2、开发工具:Visual Studio 2017


项目结构


使用方法

Js文件压缩

var result=Uglify.Js("var x=5; var y=6;");
Console.WriteLine(result.Code);   
// prints: var x=5,y=6


Css文件压缩

var result=Uglify.Css("div { color: #FFF; }");
Console.WriteLine(result.Code);   
// prints: div{color:#fff}


Html文件压缩

var result=Uglify.Html("<div>  <p>This is <em>   a text    </em></p>   </div>");
Console.WriteLine(result.Code);   
//prints: <div><p>This is <em>a text</em></div>


文本解析Html

var result=Uglify.HtmlToText("<div>  <p>This is <em>   a text    </em></p>   </div>");
Console.WriteLine(result.Code);   
// prints: This is a text


Js、Css文件合并请求示例

app.UseBundling(bundles=>
{
    bundles.LoadFromConfigFile("/bundleconfig.json", _env.ContentRootFileProvider); // 如果你需要对Bundle Minifier的配置也进行处理
    bundles.AddCss("/main.css") // 告诉中间件需要将以下的文件最终打包成一个虚拟文件名
        .Include("/Content/bootstrap.min.css")
        .Include("/fonts/icomoon.min.css")
        .Include("/Content/jquery.paging.css")
        .Include("/Content/common/reset.css")
        .Include("/Content/common/loading.css")
        .Include("/Content/common/style.css")
        .Include("/Content/common/articlestyle.css")
        .Include("/Content/common/leaderboard.css")
        .Include("/Content/microtip.min.css")
        .Include("/Assets/breadcrumb/style.css")
        .Include("/Assets/nav/css/style.css")
        .Include("/Assets/tippy/tippy.css");


    bundles.AddJs("/main.js") // 告诉中间件需要将以下的文件最终打包成一个虚拟文件名
          .Include("/Scripts/bootstrap.min.js")
        .Include("/Scripts/bootstrap-suggest.min.js")
        .Include("/Scripts/jquery.query.js")
        .Include("/Scripts/jquery.paging.js")
        .Include("/Scripts/ripplet.js")
        .Include("/Scripts/global/scripts.js")
        .Include("/Assets/tippy/tippy.js")
        .Include("/Assets/newsbox/jquery.bootstrap.newsbox.js")
        .Include("/Assets/tagcloud/js/tagcloud.js")
        .Include("/Assets/scrolltop/js/scrolltop.js")
        .Include("/Assets/nav/js/main.js");
});


最后,对于提升网站性能虽然非常重要,但合并文件如果太大,也是会影响性能的。另外采用合并中间件,对于开发的时候需要编写额外的代码、相对于原生的写法比较不直观,所以在优化性能的同时,我们也要找到一个平衡点,而不是一味的追求性能优化。


源码获取

私信回复:1070

- End -

推荐阅读

  • 推荐一个简单、灵活、好看、强大的 .Net 图表库

于测试阶段的Python 3.9版本中有一个新特性:我们在使用Python字典时,将能够编写出更可读、更紧凑的代码啦!

Python版本

你现在使用哪种版本的Python?3.7分?3.5分?还是2.7?

Python 3.9现在正处于开发的alpha阶段,官方文档中已经提出了许多新特性!该版本已经在5月进入beta测试阶段,稳定版应该在10月发布。其中的一个新功能涉及了字典,让我们看看新的字典将会给我们带来哪些新体验。

Python字典

字典是Python中非常独特的数据结构。它包含多个元素,每个元素都是一个键值对。例如,让我们用两个元素初始化字典d1。键“name”的值为“Tom”,而键“age”的值为20。

d1={'name': 'Tom', 'age': 20}

在这里,我们用字典d1储存了年龄20岁,姓名叫Tom的资料。

假设出于某些原因,你收集了有关Tom的更多信息,例如他的平均成绩(GPA)和他的婚姻状况。 这里,我们可以把以上资料命名为d2的字典。

d2={'gpa': 4.0, 'is_single': True}

你想把这两本词典合并在一起,因为它们都包含关于同一个人Tom的不同信息。

问题是:如何在Python中合并两个字典?

在过去的版本中,我们一般会通过以下三种方法来合并字典。

1.最笨拙的方法

你可以使用语法 dict_name [key]=value 的赋值运算符=在现有字典中插入新元素。

d1={'name': 'Tom', 'age': 20}
d1['sex']='Male'
# d1=={'name': 'Tom', 'age': 20, 'sex': 'Male'}

因此,在不使用任何特定于字典的方法的情况下,首先想到的方法是编写一个for循环,该循环使用iterable.items()遍历每个键值对,然后将该对插入到新的dictionary dnew中。

d1={'name': 'Tom', 'age': 20}
d2={'gpa': 4.0, 'is_single': True}
dnew=dict()
for key, value in d1.items():
    dnew[key]=value
for key, value in d2.items():
    dnew[key]=value
# dnew=={'name': 'Tom', 'age': 20, 'gpa': 4.0, 'is_single': True}

尽管如此,合并字典应该是非常简单和直接的事情,应该在一行代码中完成。

我们应该能做得更好。

2.默认的做法

实际上,有一个内置方法可以将字典d1与另一个字典d2“更新”。

dnew=d1.copy()
dnew.update(d2)

上述代码存在一个缺点,那就是.update()会就地修改字典。你需要先复制d1来创建一个新的字典dnew。这种“内置”方法破坏了使用方便的内置方法合并词典的目的。

我们能在一行代码中合并吗?可以!

3.看起来很“整洁”的方法

Python支持版本3.5+起的字典解压**。 你可以通过解压缩两个字典中的元素来创建新的“合并”字典。

dnew={**d1, **d2}

这种解包方法成为合并python3.5+中字典的实际方法。然而,这种语法在你们中的一些人看来可能很难看,而且对我们大多数人来说肯定不是直观的。在第一次看到这行代码时,你能猜出它是什么意思吗?

此外,还有另一种看起来也不直观的简单方法可以在一行中实现字典合并。

dnew=dict(d1, **d2)

Python3.9版本中干净利落的合并方式

Python3.9引入了一个新的clean(!)方法,使用联合运算符 | 合并词典,代码相当整洁。

dnew=d1 | d2
# dnew=={'name': 'Tom', 'age': 20, 'gpa': 4.0, 'is_single': True}

这种联合运算符实际上在Python中不是新的, 它可以用于“合并”两个集合, 集合是无序且没有索引的集合,要用花括号括起来。

a={1, 2, 3}
b={3, 4, 5}
print( a | b )
# {1, 2, 3, 4, 5}

扩展

对于两个列表或两个值 a 和 b,a +=b 是 a=a + b 的缩写。

这种增强的赋值行为也适用于字典联合运算符。 这意味着 d1 |=d2 等于 d1=d1 | d2。

注意事项

集合是无序的,字典是按顺序插入的(来自Python 3.6)。换句话说,字典会记住插入项目的顺序。

这意味着字典并集不是可交换的,d1 | d2 和 d2 | d1 将导致合并的词典具有不同的项目顺序。


参考链接:https://docs.python.org/3.9/whatsnew/3.9.html


--END--

喜欢本文的同学,记得转发+点赞哈~

也可以关注我们的公众号:为AI呐喊(weainahan)

你在整理PDF格式的资料时,常常会将多个PDF文档合并成一个,方便阅读,但如果资料中包含PPT、Word、Excel或图片等格式时,你会如何处理呢?

或者当你希望在PDF文档中添加Excel图表或图片文件时,你又会怎么办呢?

其实很简单,借助福昕,你可以直接一键将多个不同格式的文档合并成一个PDF文档!快看看该如何操作吧!

导入不同格式文件,一键完成合并

首先打开福昕高级PDF编辑器,点击工具栏“转换”中的“合并文件”;

点击“添加文件”按钮,将需要合并为一个PDF文档的文件添加进来,支持PDF、Word、Excel、PPT、图片、HTML等格式文件;

最后点击“合并”按钮,即可一键将多个文档合并为一个PDF文档。

支持添加、删除、移动文件,合并更精准

在将需要合并为一个PDF文档的文件添加进来后,福昕支持继续添加文件或对已有的文件进行删除、移动或筛选。

首先,如果你希望继续添加文件,你可以点击工具栏的“添加文件”、“添加文件夹”、“添加网页”、“从扫描仪中添加PDF文件”或“从剪切板添加”,选择文件添加进来;

其次,你可以点击单个文件中的“选择页面”或“选择工作表”,对需要合并的页面范围及内容进行选择;

同时,你也可以点击左侧的小三角形按钮,展开每个文档包含的内容;

最后,如果你想删除或移动文档或文档中的某些页面,也可以直接鼠标选中点击键盘上的“Delete”键或鼠标拖动;

或者选中某个文档或页面,点击工具栏的“删除”或“上移”、“下移”按钮即可。

好的,以上就是本次分享的内容啦!