在当今的互联网时代,用户对网站的加载速度有着极高的要求。为了提升用户体验,减少页面加载时间,开发者需要采取一系列措施来优化网站的性能。本文将介绍如何通过压缩图片、CSS和JavaScript文件来实现这一目标。
网站上的图片通常需要被重新调整大小或无损压缩,以减少文件大小并优化其渲染效果。然而,许多开发者并不手动对大多数图片进行这样的处理,原因可能是:
开发者可能会使用比实际需要大得多的图片来补偿,这导致浏览器需要下载并缓存一张大图片,然后手动调整大小,最后在页面上绘制。如果开发者没有在标签中设置尺寸,页面可能需要绘制两次,这会导致不必要的加载时间延长。
为了解决这些问题,提高页面加载和绘制时间,熟练的开发者开发了一套工具,并将其免费提供给广大开发者使用。以下教程将展示如何使用这些工具来加速网站。作者不对这些工具的工作原理负责。
请从NuGet包管理器安装以下包:
目标是动态渲染所需的优化版本图片,减少带宽使用,并节省浏览器绘制时间。
按照以下教程操作:
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进行处理。现在只需要在任何页面上使用标准的标签——在查询字符串中添加所需的转换,然后包就会从那里开始处理!
许多网站依赖并使用样式表和JavaScript来增加页面的功能和自定义外观。然而,许多开发者没有寻找这些脚本的'压缩'版本来帮助页面更快地加载。脚本的压缩版本是删除了所有注释和空格,大部分换行符,以及缩短长变量名为一个或两个数字的版本。压缩后,脚本文件的大小减少了20%-80%。这使得它们可以更快地被下载和运行。
请从NuGet包管理器安装以下包:
压缩、打包并渲染仅需要的CSS和JS的紧凑版本。
在Content文件夹中创建一个名为LessCss的文件夹。在LessCss中,为所需的CSS类别创建子文件夹(可选)。也可以使用标准的.css文件(如果不想将它们转换为.less)。
本教程假设以下结构:
要转换.css文件:
在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()来渲染结果。