`
tempsitegoogle
  • 浏览: 885678 次
文章分类
社区版块
存档分类
最新评论

asp.net打包多CSS或JS文件以加快页面加载速度

 
阅读更多

使用许多小得JS、CSS文件代替一个庞大的JS或CSS文件来让代码获得更好的可维护性,这是一个很好的实践。但这样做反过来却损失了网站的性能。虽然你应该将你的Javascript代码写在小文件中并且将大的CSS文件分割到小文件中,当一个浏览器请求那些JS以及CSS文件,它却将为每一个文件产生一个请求。每一个HTTP请求将导致从你的浏览器到服务器上的一次“往返”,从响应服务器到客户端浏览器之间的等待时间称之为“延时”。因此,如果你有四个JS文件以及三个CSS文件需要被页面加载,你将要等待七次网络上的“往返”。在本国内,延时平均为70ms。所以总延时为490ms,大概半秒钟。而来自国外的访问,平均延时大概在200ms左右。因此,那意味着1400ms的时间浪费。而直到CSS与JS文件被完全加载,页面才会被完全地显示出来。所以,越长时间的延时,页面加载地越慢。

延时有多糟糕

这里有一张图片显示了,每一个请求怎样产生了“延时”,这些“延时”累加起来显著地影响了页面的加载:

你可以通过使用CDN(Content Delivery Network)来减少等待时间。然而,一个更好的解决方案是使用HttpHandler提供多个文件的一次请求,该HttpHandler整合了数个文件并且提供了一次输出。所以,代之以许多的<scropt>或者<link>标签,你只需要写一个<scropt>以及<link>标签,并将它们标记在HttpHandler中。由你来告诉handler哪些文件需要被整合,并且它提供了哪些文件的一次输出。这省去了从浏览器发出许多请求产生的延时。


这里你能看到如果你把多个JS文件以及CSS文件整合到一个输出里,有怎样的性能提升。

在通常的网页中,你将看到很多的JS引用:


而我们可以仅用一个<script>标签请求整个JS文件的集合,来代替这里的每一个<script>标签:


HttpHandler读取定义在一个配置文件中的文件名,整合所有的那些文件,并将它们一次响应到客户端。它通过gzip来压缩响应内容以此节约带宽。另外它提供一个带有cache的响应请求头来缓存响应到浏览器的Cache里,使得浏览器对之后的访问不需要再次请求它。

在请求参数中,你可以用“S”参数标识文件集合的名称,然后用“t”参数来标识content type,然后使用“v”参数来标识一个版本。因为响应被缓存了,如果你修改了文件集合中的任何一个,你将不得不增加参数“v”的值来让浏览器再次下载响应。

使用该HttpHandler,你可以这样来请求CSS文件:


这里列出了你将需要怎样来定义请求的集合,在web.config中:


使用HttpHandler整合器的例子

我构建了一个简单的测试网站来向你展示它的使用,该测试网站有两个CSS以及JS文件。Default.aspx仅使用一个<link>和<script>标签通过HttpCombiner.ashx来请求它们。


下面是Default.aspx文件的内容:


就像你看到的那样,有一个<link>标签向HttpCombiner.ashx发送了一个请求并提供了请求集合的名称——Set_Css,当然还有一个<script>标签请求了一个Set_Javascript的集合。

上面的两个集合都被定义在web.config文件中:


这里列出了Handler如何工作:

(1)首先,它会从“s”参数中读取文件集合的名称

(2)然后它从web.config文件中拿到集合的定义

(3)它读取每一个文件,然后将它们缓存在缓冲区中

(4)缓冲区然后通过gzip进行压缩

(5)被压缩后的缓冲区内的内容将被发送到浏览器

(6)被压缩后的缓冲区内的内容被存储在ASP.NET缓冲中,以让随后的对相同集合的请求能够直接地从Cache中获取数据,而不是从文件系统或外部的URL去读取每一个文件。

Handler带来的好处:

(1)它减少了网络上的“往返”次数,你把越多的文件放到一个集合中,就越能减少网络延时,它提高了性能。

(2)它缓存了所有的整合过的压缩响应,因此省去了一次又一次的读取文件系统并压缩它。它提供了可扩展性。

HttpHandler如何工作

首先handler从请求字符串中读取集合名、类型以及版本:


如果要加载的文件集合已经被缓存了,那将直接从cache中写入响应流。否则,文件将被一个接一个地加载,然后被存储在一个MemoryStream。MemoryStream被通过GzipStream压缩(如果浏览器支持压缩输出)。


在整合了所有的文件并压缩后,被整合的字节流被缓存起来,以让随后的请求可以直接地从缓存获取数据。


GetFileBytes方法读取一个文件或者URL,然后返回字节。所以,你可以在你的网站里使用虚拟路径,或者你可以使用URL指向一个宿主在另外的域中的Js/Css文件。


WriteBytes方法有许多技巧在里面。它提供了一个基于是否字节是压缩格式的响应头。然后它提供了一个缓存标识头,让浏览器缓存响应内容。


怎样使用这个handler呢?

包含HttpCombiner.ashx在你的项目中定义文件集合在你的web.config配置文件的<appSettings>节点中改变的<link>与<script>标签,使用HttpCombiner.ashx需要的格式:HttpCombiner.ashx?s=<setName>&t=<contentType>&v=&lt;versionNo>

分享到:
评论

相关推荐

    ASP.NET 打包多CSS或JS文件以加快页面加载速度的Handler

    ASP.NET 打包多CSS或JS文件以加快页面加载速度的Handler, 使用&lt;link type="text/css" rel="Stylesheet" href="HttpCombiner.ashx?" /&gt;,具体的参数请参考程序中的介绍。

    打包多CSS或JS文件以加快页面加载速度的Handler (asp.net)

    总的来说,`HttpCombiner`是ASP.NET中一个强大的工具,通过打包和压缩CSS和JS文件,它可以有效地提升网站的加载速度和用户体验。合理地运用这一技术,能够帮助开发者在不牺牲功能的前提下,优化网站性能,降低服务器...

    asp.net css

    5. **CSS优化**:在ASP.NET应用中,通过合并多个CSS文件、去除未使用的样式、压缩CSS等手段,可以显著提高页面加载速度,提升用户感知性能。 6. **服务器控件样式**:ASP.NET的服务器控件如Button、Label等,可以...

    asp.net的AJAX组件及asp.net打包组件

    2. 静态文件合并:将CSS、JavaScript等静态文件整合到一起,减少HTTP请求,提高页面加载速度。 3. 配置文件处理:根据不同的部署环境(如开发、测试、生产),自动调整配置文件内容。 4. 数据库部署:支持数据库脚本...

    在asp.net中使用javascript与css的合理用法

    在ASP.NET项目中,JavaScript和CSS通常会通过打包工具(如Gulp、Webpack或ASP.NET Core的Blazor默认构建过程)进行预处理、压缩和合并,以便在部署时提供更好的性能。同时,也可以利用CDN(内容分发网络)来托管这些...

    ASP.NET MVC4

    5. **Bundling and Minification**:这个特性允许开发者将多个CSS和JavaScript文件打包和压缩成单个文件,减少HTTP请求,提高页面加载速度。 6. **异步控制器**:ASP.NET MVC4引入了异步控制器,使开发者可以编写...

    ASP.NET页面优化器&nbsp;

    在ASP.NET框架中,页面优化器通过整合、压缩和缓存资源,如JavaScript、CSS和图片,来减少网络传输的数据量,加快页面渲染速度。以下是对这个主题的详细阐述: 一、页面优化的重要性 在当今互联网时代,网页的加载...

    ASP.NET MVC4 教程(完整版)

    这一特性允许开发者将多个CSS和JavaScript文件打包并压缩,减少HTTP请求数量,从而提高网页加载速度。 13. **Web API** ASP.NET MVC4还包括Web API框架,用于构建RESTful服务,使得客户端(如移动应用或...

    ASP.NET MVC Bundles 用法和说明(打包javascript和css)_.docx

    ### ASP.NET MVC Bundles 使用详解(打包JavaScript与CSS) #### 一、引言 在现代Web开发中,尤其是在使用ASP.NET MVC框架进行开发时,管理大量的JavaScript和CSS文件是一项常见而又繁琐的任务。随着项目的不断...

    《ASP.NET MVC4 Web编程》完整版PDF

    7. **Bundling and Minification**:自动打包和压缩CSS、JavaScript文件,提高页面加载速度。 ### 三、ASP.NET MVC4开发流程 1. **项目创建**:使用Visual Studio创建新的ASP.NET MVC4项目,选择适当的模板。 2. ...

    ASP.NET MVC中使用Bundle打包压缩js和css的方法

    打包是一个将多个CSS或JavaScript文件合并成一个文件的过程,其目的在于减少HTTP请求的数量,从而加快页面加载速度。压缩则是指将文件中的冗余字符(包括空格、注释等)去除,减少文件大小,进一步提升传输效率。***...

    ASP.NET MVC 4和ASP.NET MVC5[附源码]合集

    4. **Bundling and Minification**:为了提高页面加载速度,MVC 4引入了资源打包和压缩功能,自动合并和压缩CSS和JavaScript文件。 5. **增强的异步处理**:改进了异步控制器,利用了.NET 4.5中的Task Parallel ...

    pro-asp.net-mvc-5-platform-master.zip

    - **Bundling and Minification**:这个特性允许开发者将多个CSS和JavaScript文件打包和压缩成一个文件,从而减少HTTP请求,提高页面加载速度。 - **OWIN(Katana)**:开放Web接口 for .NET (OWIN) 是一个中间件架构...

    ASP.NET MVC 5 框架揭秘.pdf

    4. **Bundling and Minification**:这一特性允许开发者将多个CSS和JavaScript文件打包和压缩成单个文件,从而减少HTTP请求,提高页面加载速度。 5. ** Razor视图引擎**:Razor视图引擎提供了一种简洁、高效的语法...

    vs2015 ASP.NET MVC4通用企业门户网站源码.zip

    该功能允许开发者打包和压缩CSS和JavaScript文件,从而减少HTTP请求数量,提高页面加载速度。 总的来说,"vs2015 ASP.NET MVC4通用企业门户网站源码"是一个基于上述技术构建的项目,旨在为企业提供一个可定制的、...

    ASP.NET MVC4全部源码

    5. **Bundling and Minification**:这个特性允许开发者将多个CSS和JavaScript文件打包和压缩成一个文件,以减少HTTP请求,提高页面加载速度。 6. **移动支持**:ASP.NET MVC4包含针对移动设备优化的视图,可以根据...

    ASP.NET MVC 4 高级编程 (英文版)

    6. **Bundling and Minification**:这是一个优化功能,允许开发者将多个CSS和JavaScript文件打包和压缩为一个文件,减少HTTP请求,提升页面加载速度。 7. **Web API**:ASP.NET MVC 4包含Web API框架,使得构建...

    My网上商城 v2.0ASP.NET

    这个项目利用了AJAX(Asynchronous JavaScript and XML)技术来增强用户体验,通过异步交互提升页面加载速度和操作流畅性。 【描述】中的关键信息表明,My网上商城采用了.NET框架的三层架构设计,这是软件工程中...

    ASP.NET-C#换肤

    7. **主题(Theme)**:除了皮肤,ASP.NET还提供了主题功能,它允许你打包一组相关的皮肤和其他资源(如图片、CSS文件等)。主题可以全局应用到整个网站,或者只对特定的页面或控件生效。 8. **响应式设计**:在...

    ASP.NET MVC 4高级编程

    13. **Bundles和Minification**:为了提高页面加载速度,ASP.NET MVC 4提供了一种打包和压缩JavaScript和CSS文件的方法,减少了HTTP请求的数量和大小。 14. **Web API**:ASP.NET Web API是构建RESTful服务的强大...

Global site tag (gtag.js) - Google Analytics