189 8069 5689

ASP.NETMVC应用提速的十种方法

【编者按】本文作者为 DZone 社区的最具价值博主(MVB) Jonathan Danylko,主要介绍为 ASP.NET MVC 应用提速的十种方法。由国内 ITOM 管理平台 OneAPM 编译呈现,以下为正文。

创新互联拥有一支富有激情的企业网站制作团队,在互联网网站建设行业深耕10多年,专业且经验丰富。10多年网站优化营销经验,我们已为上1000家中小企业提供了成都网站建设、网站建设解决方案,定制网站建设,设计满意,售后服务无忧。所有客户皆提供一年免费网站维护!

每个人都想快速掌握最新消息。

我是说,人们恨不得预知第二天的头条。没有人喜欢等待。

排队等待,遇到红灯要等待,开个网页要等待,等等等。

理所当然,没有人喜欢等待网页慢吞吞地加载,尤其是在移动端访问网站时。其实,Web 开发者敏感的神经决定了我们等待与否。

现在,快速响应不仅是来自用户的要求,还是决定 Google 搜索排名的主要因素。除此之外,Google 还大力推行 Google AMP 计划,以使网站加载更加快速。

考虑到大多数网站都存在速度方面的问题,笔者想通过此文帮助 Microsoft 开发者优化他们的网站。

在本文中,笔者将介绍十种为 ASP.NET MVC 应用提速的方法。

1. 应用程序缓存

缓存一直都是优化应用时屡试不爽的最后绝招。只要使用得当,缓存绝对可以有效加速应用。

在进行数据库调用以检索记录时,正是实现应用程序缓存的最佳时机。

譬如说,你搭建了一个博客。当访客请求某一篇博文时,你将其从数据库中检索出来,保存在缓存中。当下一个访客通过 ID 请求同一篇博文时,应用程序会首先根据 ID 在缓存中寻找博文,如果找到,就将之返回给访客,而无需访问数据库。

这节省了数据库调用的高昂开支。

延伸阅读:通过添加简单的缓存层以实现高效快速的网站

2. 优化图片

之前,笔者从未了解过图片在一篇博文中会占据多大比重。有时候,取决于文章内容的不同,图片可能会是一篇博文中最大的资源。

你应该压缩这些庞大的资源。图片越小,网页渲染的速度越快。

Image Optimizer(图片优化)插件是很有用的 Visual Studio 插件。选定你的所有图像,再选择无损(Lossless)或者有损(Lossy)图片优化模式,每张图片都会根据一定的比率压缩大小。

此外,如果你掌握了 Grunt 或 Gulp 之类的前端客户端工具,就可以在创建应用或者部署应用时自动实现图片优化。

延伸阅读:Visual Studio 2015 图片优化插件

3. 使用 Sprites

每个网站都有图片。图片几乎是必不可少的网站元素。

但是,如果你有很多小图片,该如何处理呢?假设有20张小图片,那就是20次图片检索请求,每张图片一次。

这时候,Sprites 就能派上用场啦。

Sprites 是由众多小图片集合而成的一张大图。浏览器可以直接请求这张大图,你再通过 CSS 技术抓取其中的小图片,并将其展示在网页的不同位置上。

我知道,很多开发者并不熟悉 CSS。因此,建议大家找点资料好好学习一下。CSS 真的非常有用。

此外,还有许多在线 sprite 生成器,可以协助这一过程。(Piskel, Sprite Cow, 或者谷歌搜索:“在线 Sprite 生成器”)

延伸阅读:ASP.NET MVC:数据驱动 CSS Sprites

4. ETags

有些读者可能不知道 ETags 为何物。其实,ETags 是用于 Web 缓存验证的工具,允许有条件的客户端请求。

通过 ETags,浏览器可以判断某项资源是否被需要。如果不需要,浏览器就不会向 Web 服务器发送请求,从而最小化请求数量。

笔者甚至将 ETag ActionFilter 类列为最喜欢的 ActionFilter 类,因为 ETags 的确能最小化网站向 Web 服务器发送的请求数量。

延伸阅读:我最喜欢的五个 ASP.NET MVC ActionFilters

5. 捆绑或最小化 JavaScript/CSS 代码

捆绑与最小化早已不是什么新鲜的概念了。

捆绑是指将所有 JavaScript 与 CSS 代码打包为一个 JavaScript 或 CSS 文件的过程。这与 Sprite 技术相似,不过处理的是 JavaScript 与 CSS 文件。捆绑可以减少针对单独 JavaScript 与 CSS 文件的请求,从而减少成本。

JavaScript 与 CSS 文件充满了空格,这些空格占用了不少的空间。最小化就是移除 JavaScript 或 CSS 文件里的大量空格的过程。

在 ASP.NET MVC 项目中, App_Start 文件夹下有一个 BundleConfig.cs 文件。你可以在该文件中定义 JavaScript 与 CSS 文件的捆绑或最小化设置。

延伸阅读:捆绑与最小化

6. 压缩

你发觉我们的套路了么?

实现压缩的方式有两种:一是通过 IIS 激活压缩,二是通过 ActionFilter 类。

压缩启用后,Web 服务器会将资源压缩成包,再传给客户端。后者会先解压缩,然后再展示内容。

这能有效提高资源传送的速度。

笔者还为此写了一个 CompressFilter 类。通过 Action 方法调用该类,就能实现对网页的压缩。

延伸阅读:我最喜欢的五个 ASP.NET MVC ActionFilters

7. 最小化 HTML

在前文讨论最小化时,笔者不禁想到,你的 HTML 页面肯定也存在了许多空格。

HTML 文件越小,它传送到浏览器的速度就越快。取决于 HTML 页面大小的差异,移除其中的空格能够缩减 20%到50%的大小。

为此,笔者写了一个 Whitespace ActionFilter 类,也是笔者最喜欢的 ActionFilter 类之一。

延伸阅读:我最喜欢的五个 ASP.NET MVC ActionFilters

8. 尽量使用 AJAX

AJAX 早已推出,而且好处多多。它模糊了桌面应用与 Web 应用间的界限。

它也绝对可以加速网站中的一些任务。

例如,笔者在自己的网站中建立了一个仪表盘。

在具体实现时,我可以先让页面加载一个仪表盘骨架。在页面加载完毕之后,开始运行 JavaScript 方法,请求小部件的加载。在之后会出现小部件的地方,可以先放置等待加载的图标。当部件加载完毕之后,再以部件的内容替换等待加载的图标。

这能使用户的浏览体验更加流畅。

延伸阅读:为什么说 AJAX 如同胡椒粉

9. 最小化数据库调用

诸如 Entity Framework 及 NHibernate 之类的对象关系映射(Object-Relational Mapping, ORM)数据库能够进行隐式调用(hidden calls),即便你从未要求过此类调用。

每一种 ORM 数据库都有许多鲜为人知的“陷阱”。但是,你可以做到的是:确保在自己的代码中,每次检索数据都只发起一次数据库调用。

当笔者刚开始使用 Entity Framework 数据库时,曾吃过不少亏。比如,为了检索一条特定的记录,我发起了一次数据库调用。在检索该记录时,程序发现了该记录的子对象,于是决定检索这些子对象,为此,针对每个实体,又都发起了一次数据库调用(有时候,为了一条特定记录,居然会产生200次数据库调用,真是可怕!)……

现在,笔者的经验法则是:

  • 确定需要一条记录,还是多组记录。

  • 如果只需要一条记录,则使用存储库(repository)获取此记录。

  • 如果需要不止一条或多组记录,则使用 sproc(存储过程,Stored Procedure)。

如果你不太确定如何获取多个结果集,可以阅读有关使用 Entity Framework 检索多个结果集的帖子。

延伸阅读:ASP.NET MVC: 使用 Entity Framework 从泛型存储库中返回多个结果集

10. 尽可能使用靠谱的第三方服务

记得在前文中我说的尽量使用 AJAX 么?

基于同样的理由,我决定放弃创建自定义的评论系统,转而使用 Disqus。

为什么呢?理由有五个:

  • Disqus 是免费的。

  • Disqus 只需要一小段 JavaScript 代码和基本存取方法(Basic Access Method, 
    BAM),就能立即实现一个评论系统。

  • 部署成功后,网页会优先加载,而 Disqus 在后台加载。通常,由于评论部分往往位于页面底部,用户刚打开页面时还不会看到评论部分。

  • Disqus 在移动端加载时也很友好。

  • Disqus 带有一些社交网络属性,允许用户看到关于 Disqus 网站上的文章评论。

这类第三方服务不仅能为我的网站提供常见的基本功能,还借助 AJAX 为我的读者实现了流畅的阅读体验。

延伸阅读:Disqus

结论

本文介绍的绝大部分速度提升方法都需要特定的编程技巧。一旦掌握了这些技巧,你就能轻易实现高效快速的网站。

以上所有技术都应用在笔者的网站中。

你不信?

右键单击以查看本文源码。

OneAPM 能助您轻松锁定 .NET 应用性能瓶颈,通过强大的 Trace 记录逐层分析,直至锁定行级问题代码。以用户角度展示系统响应速度,以地域和浏览器维度统计用户使用情况。想阅读更多技术文章,请访问 OneAPM 官方博客。 
本文转自 OneAPM 官方博客 
原文地址:https://dzone.com/articles/10-ways-to-speed-up-your-aspnet-mvc-application


网站标题:ASP.NETMVC应用提速的十种方法
标题路径:http://cdxtjz.com/article/gocgde.html

其他资讯