网站性能优化指南

在当今的互联网时代,用户对网站的加载速度有着极高的要求。为了提升用户体验,减少页面加载时间,开发者需要采取一系列措施来优化网站的性能。本文将介绍如何通过压缩图片、CSS和JavaScript文件来实现这一目标。

图像优化

网站上的图片通常需要被重新调整大小或无损压缩,以减少文件大小并优化其渲染效果。然而,许多开发者并不手动对大多数图片进行这样的处理,原因可能是:

  • 图片数量庞大,手动处理会占用大量开发时间;
  • 同一张图片可能需要在不同页面以不同尺寸重复使用。

开发者可能会使用比实际需要大得多的图片来补偿,这导致浏览器需要下载并缓存一张大图片,然后手动调整大小,最后在页面上绘制。如果开发者没有在标签中设置尺寸,页面可能需要绘制两次,这会导致不必要的加载时间延长。

为了解决这些问题,提高页面加载和绘制时间,熟练的开发者开发了一套工具,并将其免费提供给广大开发者使用。以下教程将展示如何使用这些工具来加速网站。作者不对这些工具的工作原理负责。

请从NuGet包管理器安装以下包:

  • ImageResizer
  • ImageResizer.Mvc
  • ImageResizer.MvcWebConfig
  • Simple.ImageResizer
  • Simple.ImageResizer.MvcExtensions

目标是动态渲染所需的优化版本图片,减少带宽使用,并节省浏览器绘制时间。

按照以下教程操作: https://github.com/terjetyl/Simple.ImageResizer#readme 创建一个新的控制器并命名为ImagesController。这是页面上的图片被服务器缓存到所需尺寸的地方。

将以下代码粘贴到ImagesController中:

using System.IO; using System.Web.Mvc; using Simple.ImageResizer.MvcExtensions; namespace Demo.Controllers { public class ImagesController : Controller { [OutputCache(VaryByParam = "*", Duration = 60 * 60 * 24 * 365)] public ImageResult Index(string filename, int w = 0, int h = 0) { string filepath = Path.Combine(Server.MapPath("~/images2"), filename); return new ImageResult(filepath, w, h); } } }

在App_Start/RouteConfig.cs的RegisterRoutes(RouteCollection routes)方法中添加以下代码:

routes.MapRoute( "Image", "images/{filename}", new { controller = "Images", action = "Index", filename = "" } );

这将自动获取页面上的任何图片并将其传递给ImageResizer进行处理。现在只需要在任何页面上使用标准的标签——在查询字符串中添加所需的转换,然后包就会从那里开始处理!

CSS和JavaScript优化

许多网站依赖并使用样式表和JavaScript来增加页面的功能和自定义外观。然而,许多开发者没有寻找这些脚本的'压缩'版本来帮助页面更快地加载。脚本的压缩版本是删除了所有注释和空格,大部分换行符,以及缩短长变量名为一个或两个数字的版本。压缩后,脚本文件的大小减少了20%-80%。这使得它们可以更快地被下载和运行。

请从NuGet包管理器安装以下包:

  • Cassette.Aspnet
  • Cassette.Less

压缩、打包并渲染仅需要的CSS和JS的紧凑版本。

在Content文件夹中创建一个名为LessCss的文件夹。在LessCss中,为所需的CSS类别创建子文件夹(可选)。也可以使用标准的.css文件(如果不想将它们转换为.less)。

本教程假设以下结构:

  • 对于.less文件:Content/LessCss/jQueryCore/MainTheme
  • 对于.css文件:Content/CSS

要转换.css文件:

  • 将其放置在LessCss中所需的类别中,将扩展名从'.css'更改为'.less',打开'.less'文件,然后点击保存。这将使编译器自动生成必要的文件。可以从那里继续编辑文件,或者关闭它。

在Infrastructure文件夹(如果还没有,请在根目录中创建)中,创建一个名为CassetteConfiguration.cs的类。将以下内容粘贴进去:

public class CassetteConfiguration : IConfiguration<BundleCollection> { public void Configure(BundleCollection bundles) { bundles.Add<StylesheetBundle>( "Content/lesscss", bundle => bundle.EmbedImages().EmbedFonts() ); bundles.Add<StylesheetBundle>( "Content/css", bundle => bundle.EmbedImages().EmbedFonts() ); } }

这将告诉网站使用所有位于设置目录中的样式表,将它们全部打包成一个包,并压缩它们。

在所需的页面(最好是_Layout页面)中,需要告诉网站引用创建的包。通过在<!DOCTYPE html>标签之前添加以下代码来实现:

@{ Bundles.Reference("content/lesscss"); Bundles.Reference("content/css"); }

之后,只需要在<head>标签中添加@Bundles.RenderStylesheets()来渲染结果。

本教程假设已经将所有脚本放在根目录的Script文件夹中。在CassetteConfiguration中,将以下内容粘贴到样式表捆绑包下面:

bundles.AddPerSubDirectory<ScriptBundle>("Scripts");

这将告诉网站使用所有位于设置目录中的脚本,将它们全部打包成一个包,并压缩它们。

在所需的页面(最好是_Layout页面)中,需要告诉网站引用创建的包。通过在之前引用的包下面添加以下代码来实现:

Bundles.Reference("scripts");

之后,只需要在所有内容的底部,在<body>标签内添加@Bundles.RenderScripts()来渲染结果。

沪ICP备2024098111号-1
上海秋旦网络科技中心:上海市奉贤区金大公路8218号1幢 联系电话:17898875485