当前位置: 首页 > 科技观察

5分钟快速优化Web性能的10种方法

时间:2023-03-12 04:32:24 科技观察

已授权原作者翻译。在本文中,我主要介绍10种快速提升网站性能的方法。您可以在5分钟内将其应用到您的网站。话不多说,进入正题。1.文件压缩文件压缩可以减少通过网络传输的字节数。有几种压缩算法。Gzip是最流行的,但是通过Brotli,您可以使用更新甚至更好的压缩算法。如果你想检查你的服务器是否支持Brotli,你可以使用Brotli.pro。如果你的服务器不支持Brotli,你可以按照这个简单的指南安装它👍:NginxonLinuxApacheNodeJs-Express2。图像压缩未压缩的图像是一个巨大的潜在性能瓶颈。如果在将图像提供给用户之前未对其进行压缩,则会传输不必要的字节。有几种有用的工具可用于快速压缩图像而不损失可见质量。我主要使用Imagemin。它支持多种图像格式,您可以将其用作命令行界面或npm模块。imageminimg/*--out-dir=dist/images也可以在项目中引入npm,使用imagemin-mozjpeg将JPEG图片压缩到原来的60%:constimagemin=require('imagemin');constimageminMozjpeg=require('imagemin-mozjpeg');(async()=>{constfiles=awaitimagemin(['img/*.jpg'],{destination:'dist/img',plugins:[imageminMozjpeg({quality:60}),]});console.log(文件);})();在我的例子中,它将文件大小从4MB减少到100kB:3。图像格式使用现代图像格式确实可以提高性能。WebP图像比JPEG和PNG小,通常小25%-35%。WebP也得到了浏览器的广泛支持。我们使用imageminnpm包并向其中添加WebP插件。以下代码将我的图像的WebP版本输出到dist文件夹中。constimagemin=require('imagemin');constimageminWebp=require('imagemin-webp');(async()=>{constfiles=awaitimagemin(['img/*.jpg'],{destination:'dist/img',插件:[imageminWebp({quality:50})]});console.log(files);})();我们再看一下文件大小:原来文件大小比原图缩小了98%,和压缩后的JPG文件相比,WebP对图片的压缩更明显,WebP版比原图小了43%压缩的JPEG版本。4.图像的延迟加载图像的延迟加载是一种延迟而不是提前加载屏幕外图像的技术。当解析器遇到正确加载的图像时,它会减慢初始页面加载速度。使用延迟加载,您可以加快进程并在以后加载图像。使用lazysize很容易做到这一点。使用lazysize脚本和浏览器支持加载属性,你可以这样优化:-src="https://s6.51cto.com/oss/202010/20/dd7f123d7a9b62d1a239a064cce7193c.jpg"class="lazyload"alt="">库会处理剩下的,您可以使用浏览器验证这个有点转到您的网站并找到您的图片标签。如果类从lazyload更改为lazyloaded,它会起作用。5.缓存HTTP标头缓存是提高站点速度的快速方法。它减少了访问者的页面加载时间。我们可以告诉浏览器在特定时间缓存文件。如果你对后台有所了解,那么配置缓存就不难了。我们可以使用以下API进行缓存:Cache-ControlETagLast-Modified6。内联关键CSSCSS是渲染阻塞的,这意味着浏览器必须在绘制像素之前下载并处理所有CSS文件。通过内联关键CSS可以大大加快这个过程。我们可以通过以下步骤做到这一点:识别关键CSS如果您不知道您的关键CSS是什么,您可以使用Critcal、CriticalCSS或Penthouse。所有这些库都从给定视口可见的HTML文件中提取CSS。criticalCSS情况如下:varcriticalcss=require("criticalcss");varrequest=require('request');varpath=require('path');varcriticalcss=require("criticalcss");varfs=require('fs');vartmpDir=require('os').tmpdir();varcssUrl='https://web.dev/app.css';varcssPath=path.join(tmpDir,'app.css');request(cssUrl).pipe(fs.createWriteStream(cssPath)).on('close',function(){criticalcss.getRules(cssPath,function(err,output){if(err){thrownewError(err);}else{criticalcss.findCritical("https://web.dev/",{rules:JSON.parse(output)},function(err,output){if(err){thrownewError(err);}else{console.log(output);//savethistoafileforstep2}});}});});内联关键CSSHTML解析器遇到样式标签并立即处理关键CSS。body{...}/*...关键CSS的其余部分*/Lag非关键CSS非关键CSS不需要立即处理。浏览器可以在onload事件之后加载它,因此用户不必等待。7.JavaScript异步/延迟加载/延迟加载HTML也会阻塞渲染,浏览器必须等待JS执行完毕才能完成对HTML的解析。但是我们可以告诉浏览器等待JavaScript执行。异步加载JavaScript使用异步属性,您可以告诉浏览器异步加载脚本。deferJavaScriptdefer属性告诉浏览器在HTML解析器完成文档解析之后但在DOMContentLoaded事件触发之前运行脚本。重复排序的内联脚本内联脚本立即执行,浏览器解析。所以你可以把它们放在你的HTML的末尾,就在body标签之前。8、利用资源提示优化性能HTML5资源提示(ResourceHints)可以简单理解为预加载,浏览器根据开发者提供的后续资源的提示进行选择性加载和优化。“选择性”是必须的,也是极其重要的,也是早期不同替代方案的重点,因为在很多情况下,预加载会受到分配的计算资源和带宽资源的限制,浏览器有权放弃那些代价高昂的附加组件。资源提示帮助开发人员告诉浏览器哪些页面可能稍后加载。该规范定义了四个原语preconnectdns-prefetchprefetchprerender此外,对于资源提示,我们使用链接属性的preload关键字。preconnect方法如下:当我们访问一个站点时,简单来说,我们会经过以下几个步骤:DNS解析TCP握手如果是一个Https站点在使用preconnect后,会进行TLS握手,浏览器会针对具体的域名提前初始化链接(执行以上三步),省去了我们访问第三方资源的耗时。需要注意的是,一定要保证网页需要preconnect站点,否则会浪费浏览器和网络资源。DNSPrefetchDNS预解析,这个大部分人都知道,用法也很简单:DNS解析,简单来说就是将域名进行转换名称到ip地址。当我们在网页上使用域名请求其他资源时,会先将其转换为IP地址,然后再发起链接。dns-prefeth使得转换工作提前进行,缩短了请求资源的时间。什么时候使用它?当我们在页面中使用其他域名的资源时,比如我们的静态资源是放在CDN上的,那么我们就可以预先解析CDN的域名。浏览器支持也很好。prefetch预取,用法如下:link标签中的as参数可以有以下值:audio:音频文件video:视频文件track:网络视频文本trackscript:javascriptfilestyle:cssstylefilefont:fontfileimage:imagefetch:XHR,fetchrequestworker:Webworkersembed:multimedia请求对象:multimedia请求文档:网页audio:音频文件video:视频文件track:网络视频texttrackscript:javascriptfilestyle:cssstylefilefont:fontfileimage:Imagefetch:XHR,Fetchrequestworker:Webworkerembed:Multimediarequestobject:Multimediarequestdocument:网页预取用于识别从当前网站跳转到下一个网站可能需要的资源e、本站应获取的资源。当浏览器将来请求资源时,这会提供更快的响应。如果正确使用预取,用户可以在从当前页面移动到下一个页面时得到快速响应。但如果预取使用不当,浏览器会额外下载不必要的资源,影响页面性能,造成网络资源浪费。这里需要注意的是,使用prefetch时,只是提前下载资源,下载后不会有解析资源等操作。Prerender用于预渲染如下:prerender比prefetch更进了一步。不仅会下载对应的资源,还会解析资源。在解析过程中,如果需要其他资源,可以直接下载这些资源。这样,当用户从当前页面跳转到目标页面时,浏览器可以更快地响应。preload注意preload需要写正确的as属性才能正常工作。(不需要预取)。但是它们之间有什么区别呢?preload用于预加载当前页面的资源,浏览器会先加载。prefetch用于预加载后续导航使用的资源,浏览器也会加载,但优先级不高9。PinyourGoogleFontsGoogle字体很棒,它们提供了很好的服务并且被广泛使用。如果您不想自己托管字体,GoogleFonts是一个不错的选择。您需要的是学习如何引用它们,哈利·罗伯茨(HarryRoberts)在《The Fastest Google Fonts》上写了一篇非常有深度的文章。强烈推荐您阅读。如果你想快速访问,下面的代码片段中集成了谷歌字体:<linkrel="stylesheet"href="https://fonts.googleapis.com/css2?family=...&display=swap"/>10.使用serviceworker缓存资源serviceworker是浏览器在后台运行的一个脚本。缓存可能是最常用的功能,也是您应该使用的功能。我不认为这是一个选择的问题。通过使用serviceworker实现缓存,您可以使用户与站点的交互更快,并允许用户即使在不在线时也可以访问该站点。总结在本文中,展示了10个快速Web属性,您可以在5分钟内将它们应用于您的网站,以提高您的网站速度。作者:Marc译者:前端小智来源:dev原文:https://dev.to/marcradziwill/10-web-performance-quick-wins-you-can-and-should-apply-in-under-5-minutes-1dj2本文转载自微信公众号《伟大的走向世界》,您可以通过以下二维码关注。转载本文请联系大千世界公众号。