第十八章 提升用户体验 之 减少带宽占用

1. 概述

  作为开发者,我们总是需要尽量的减少传递的数据量来优化带宽使用。

  具体方式包括 清理不用的Js脚本、删除css文件中不用的或者冗余的样式,

  还可以使用JS和ASP.NET MVC的绑定和精简特性来删除脚本中的无关信息,然后合并到一个单独的脚本文件供下载。

  如果尺寸还是大,还可以考虑使用数据压缩。

  优化尺寸以后,还需要考虑最小化网络的影响。最明显的方式就是尽量减少服务端和客户端的交互次数。content delivery network (CDN)会很有帮助。

  本章内容包括:整理和优化脚本(CSS and JavaScript)、压缩和解压数据(使用 gip/deflate;storage)、尝试计划CDN策略(比如 Windows Azure CDN)。

2. 主要内容

  2.1 整理和优化脚本(CSS and JavaScript)

    整理和优化脚本的主要目的就是在下载脚本文件到客户端时,尽量减少带宽和连接的占用。

    大部分的常用浏览器都把同一域的连接数限制到了6个。这样的话,尽量减少需要下载的文件数量就可以在这方面改善性能。

    同时,对文件进行瘦身(清理空白字符、备注信息、换行符,简化变量名)也是提高性能的一种显著方式。同时还可以混淆文件。

    2.1.1 Bundling

      ASP.NET MVC 的Bundling特性可以把多个文件绑定到一起下载,用于减少同时的连接数。

      这种方式的弊端就是 影响了浏览器的缓存机制,使用时需要权衡。

bundles.Add(new ScriptBundle("~/bundles/myBundle").Include("~/Scripts/myScript1.js", 
                                                           "~/Scripts/myScript2.js", 
                                                           "~/Scripts/myScript3.js"));
@BundleTable.Bundles.ResolveBundleUrl(("~/bundles/myBundle")

      上面代码还可以为脚本生成hashtag,这样浏览器就会将这个脚本保存更长的时间。

    2.1.2 Minifying

      Minifying就是精简JS以及CSS文件的大小。

      可以通过配置compilation节点的debug属性为false,

      或者 在App_Start/BundleConfig.cs文件的 RegisterBundles方法中添加 BundleTable.EnableOptimizations = true 来允许精简操作。

  2.2 压缩和解压数据(使用 gip/deflate;storage)

    对传递的数据进行压缩也是一种提高性能的方法。header中的Accept-Encoding节点指出了可接受的编码类型。

    比如 Accept-Encoding: gzip, deflate , 说明当前浏览器可以处理 gzip和deflate格式的压缩。

    最简单的方式是在IIS中配置压缩选项。

    

    如果使用ASP.NET MVC来压缩文件,有几种action result可以选择。

using (FileStream oFileStream = article.LocalFile.OpenRead()) 
        { 
            using (FileStream cFileStream = File.Create( 
                Guid.NewGuid().ToString() + ".gz")) 
            { 
                using (GZipStream compressionStream =  
                              new GZipStream(cFileStream, CompressionMode.Compress))  
                { 
                    oFileStream.CopyTo(compressionStream);  
                    StreamReader reader = new StreamReader(compressionStream);  
                    results = reader.ReadToEnd(); 
                } 
            } 
        }

  2.3 尝试计划CDN策略(比如 Windows Azure CDN)

    CDNs提供了把内容分布到服务器之外的其他地方的一种方式。

    引入CDNs的几个目的:

      ① 把图片、CSS文件、JS文件 等静态文件分出去,减轻主服务器的压力。

      ② CDNs可以更快速的提供内容给客户端。许多大型CDNs是遍布全球的,可以就近提供服务。

3. 总结

  ① 当带宽资源不富裕时,可以通过精简文件的大小来提高用户体验。

  ② 精简文件有几种方式:ASP.NET MVC 4 通过 删除备注、空白 及其他多余字符来精简,还可以通过绑定合并文件来减少链接,提高效率。

  ③ IIS可以配置Web服务器发送压缩内容到客户端。可以配置只压缩静态文件,或者压缩所有文件。还可以设置一个阈值来启动压缩。

  ④ CDNs可以把内容分发到更广阔的网络上,分担服务器的压力。CDNs距离客户端更近,用户体验更好。

posted @ 2016-03-24 17:42  stone lv  阅读(417)  评论(0编辑  收藏  举报