发布的吉姆·麦克莱恩2022年2月10日

开始使用网络的性能

逻辑意义,“快”页面“更好的”页面。他们把事情做得更快,更好的搜索引擎优化,使用更少的能源,人们喜欢他们。这就是我对SEO在mybuilder.com页面重要和削减指标一半。

是什么意思“快”

页面加载被认为是“遗留规”在社区网络的性能。这不仅仅是因为web页面的HTML解析了一切打开并下载很多东西。所以在实践中,较低的“页面加载”图并不一定关联一个良好的用户体验。

第一个和最大的意旨油漆时需要考虑的是两个更好的指标试图做一个页面,“感觉快”作为客观地快。

你应该做的第一件事就是观察你的页面在哪里在你开始。一个简单的方法是使用chrome浏览器内置的灯塔特性或打开一个SpeedCurve账户和熟悉仪表板。这将给你一个概述和记录你的进展,但要明白专注你的努力你需要细节究竟什么是下载、加载、渲染和请求;和顺序发生。

瀑布

你可以得到铬画一个计划图表页面的流量在网络性能圈子里被称为“瀑布”由于其下来,向右看表时按其默认“开始时间”列。

看到页面导航到它的瀑布在chrome:打开网络选项卡中开发工具检查“禁用缓存”选择一个不够完美的网络条件例如“快/慢3 g”然后点击刷新页面上。

当瀑布完成你应该能够看到项目集中在一起形成明显的瓶颈。

截图的chrome网络开发工具选项卡

我新web性能的世界我有两个主要的策略来加速页面和照顾的三分之一MyBuilder行为团队:

  • 少拥有一些东西
  • 重新排序的东西
  • 更快的服务器

少拥有一些东西

阅读项目在你的瀑布从上到下。你可能会注意到3普通罪犯把宽的情节放在图表:图片、字体和JavaScript。

图片

如果一个图像由于某种原因不可见和狩猎和删除的代码。此外,考虑删除任何图像不朝着页面的目标前进。

压缩你的照片,如果你不能看到你jpeg的压缩文物的挤压力度不够。您将看到的广场但真实用户可能不会。png通过一个png压缩机运行它们的“无损”格式,适用于这样的gzip压缩的位会使图像的平面色彩大大缩小文件大小。svg往往天生小但可以与SVGO缩减。

压缩后的图像确保你提供适当的大小更小的设备。在MyBuilder.com上我们使用Symfony和树枝函数请求和有条件地提供较小的图像移动的用户代理。你也可以与现代响应的图像“HTML这可能是更好的,但这篇文章的范围。这个更新的HTML标记给浏览器加载一组图片的选择和规格所以它可以决定哪一个它想要根据当前的条件。

图像在HTML中要求第一批因为初始服务器请求的HTML回来但CSS图像显示只有当他们被认为可见后解析DOM和CSSOM(可阻塞或被迫重新评估的脚本)。这意味着最终图片放置与CSS背景图像来比较晚了。

字体

Webfonts放慢您的页面。认真看看你需要他们。确保你有组织的从同一个地方你其他的资产。这将意味着客户端已经preconnected和可以使用HTTP2。

Javascript

这个是不简单。这意味着有一个适当的看看你包括你使用多少。如果你有jQuery中这是一个很好的起点,但道路删除它超出了本文的范围。

如果你不能删除一个脚本确保它是在正确的地方。传统的逻辑是在文档头部和供应商脚本自定义的脚本后,页面内容。这样做的原因是脚本头部将下载并解析之前页面呈现但脚本之后,将下载当浏览器到达这条线,这将阻止页面解析到脚本运行。更一致的实现这一目标的方法是添加“异步”或“推迟”属性脚本标记。“异步”将停止阻止但仍然运行就可以和“推迟”将等到页面已经完成解析。

删除后的脚本。如果你有一组javascript是捆绑在构建时你有机会将减少负载添加到您的构建系统。Webpack、汇总、包裹和其他受欢迎的工具都有选项tree-shaking,提升代码分隔和范围。

Tree-shaking只会分析你的代码并包括功能或作用域被称为并将丢弃。如果你有类似下划线。js包括在内。

代码分隔将编译后的代码分割成多个包(文件),可以单独缓存但更重要的是,可以同时下载。

范围提升是一个更新的方法类似于模块打包机但将模块后,把它们放在一个函数应用一些re-naming以避免冲突。这意味着更小的文件还有一个更简单的结构,使用更少的内存,可以更快地解析。

再订购的东西

快速提高页面的看法当它看起来准备提前使用。有时这意味着搬回一个初始载荷,以避免显示的东西还没有准备好使用。

预取

当背景图像开始下载CSSOM已经解析和风格已经被应用和页面呈现。这将作为空间留给形象出现时,它会流行在负载。这不仅看起来很糟糕,但将进一步在去年意旨的痛苦。

应对这个背景图像突然出现我们可以让浏览器知道我们需要这张图片更早通过添加“预取的联系”。在MyBuilder.com上我们想要使用的图像是给树枝模板然后放到一个样式标签,所以我们还添加了一个预取链接页面的头。

预加载

默认情况下,页面将会呈现在所有的资产已经完成下载。的(大)webfonts这经常导致一闪没有任何特色的文本(输出端),可能会导致一个布局转变。对抗这你可以告诉浏览器加载字体等到开始前增加了一个预加载链接,以确保客户获得资产之前试图通过添加预加载渲染页面链接的资产。

<链接rel =“预”href =“https://www.example.com/assets/fonts/example-webfont.woff2”是=“字体”crossorigin =”“类型=“字体/ woff2”>

这将推迟初始渲染,但往往会产生一个更好的用户体验。你必须自己做决定权衡。

延迟加载

是到浏览器决定订单需要下载图片。传统的顺序不一致或实用,这意味着图像在页脚可以优先在页面的顶部。现代浏览器更善于观察的图像出现在DOM但他们并不完美或一致。延迟加载的图片看不见最初的解析,然后互换使用javascript在页面加载。

< imgsrc =“小图像占位符”data-lazyimgdata-src =“资产/图片/ real-image.jpg”/ >

这可以应用于任何图片你觉得不需要初始渲染。

延迟加载

在使用延迟加载一个毯子规则适用于,懒加载试图对加载图片时更聪明。本质上它是延迟加载加上一个事件侦听器,等待资产滚动到视图,然后装载它。所需的javascript和用户体验之间的权衡将不得不考虑。页面mybuilder.com,我们通过图像到懒加载程序手动当用户点击一个按钮,将它带入视图。

更快的服务器

我已经提到了HTTP / 2。这种“新”协议可以从一个主机下载更多的事情。过去,客户端将达到极限快速和之前必须等待它可以从相同的主机获取更多的资产。绕过这个托管技术称为“分片”分布在多个服务器上你的资产,所以客户端可以获得更多。与HTTP / 2这个逻辑不再适用,你最好在一个地方。你必须确保你的供应商/服务器是正确配置或客户端将恢复到HTTP / 1。在MyBuilder我们使用Cloudfront内容分发网络(也称为CDN),将缓存的内容相关的点(也称为流行)。这意味着用户可以从服务器获取内容的地理位置接近他们。

结论

我还是新web性能但后变化的世界页面上方大约两倍的“第一意旨漆”从8.32到3.38秒。

在speedcurve.com上一个图表显示一个图表大幅贬值

工作在MyBuilder和Instapro

我们需要有经验的软件工程师谁爱他们的手艺,想要分享他们辛苦赚来的知识。

查看职位空缺
评论的Disqus