
预加载(Preload)是一种强大的优化技术,可以显着改进关键性能指标,例如。前面我们介绍过关于甚至的文章。预加载是这些概念的一个更强大的扩展,因为它使您能够提前下载整个资源。
在这篇文章中,我们来看看:
预加载是一种资源提示,它告诉浏览器在浏览器确定它需要发出请求之前请求内容。这可以提高性能,因为当浏览器确实意识到它需要请求一个已经预加载的资源时,它已经在那里了。
让我们从一个简化的示例开始,如瀑布图所示:

浏览器首先下载引用样式表style.css的HTML文档。在样式表中,我们指定应该使用的自定义字体,如下所示:

这是后期发现资源的完美示例。此浏览器在完成下载和解析style.css之前不知道它需要请求robots.woff。我们可以通过查看瀑布中的Initiator列来确认这一点,它告诉我们是什么文件导致浏览器发出请求。HTML文档有一个Other的启动器, 因为我们在地址栏中输入了它。style.css的发起者是HTML文档,因为浏览器在HTML中找到了<link>标签。启动器robots.woff是CSS文件,因为浏览器在HTML中使用的CSS文件中找到了样式的@font-face 声明。
我们可以通过在HTML文件的<head>中添加预加载资源提示来优化这一点:
<link href="resources/roboto.woff" as="font" crossorigin="anonymous" />
这指示浏览器主动下载roboto.woff,并创建这个瀑布:

有很多事情需要注意:
这非常适合演示——现在让我们看看使用预加载资源提示的实际好处。
分享了 (PWA) 的性能。作为PWA,Tinder拥有大型JavaScript包,可以动态加载到其他JavaScript包中。由于这些附加包是由执行的脚本动态加载的,因此浏览器在JavaScript代码运行之前无法发现它们。我在下面的Addy博客文章中注释了一个屏幕截图:

您可以看到主要供应商捆绑包如何加载3个额外的JavaScript文件。通过预加载这些附加脚本,Tinder:
对流行的 *** 应用Notion做了Notion需要相同的基本API调用才能运行,并且这些API调用发生在主包加载之后。 。
在Splunk,我们也有之一手经验。2020年初,我们与一家主要媒体客户合作,该客户拥有大量用于各种第三方域的 JavaScript。通过分析他们的站点并实施诸如预连接和预加载之类的资源提示,我们将交互时间缩短了4.9秒,即37%。

在上面的案例研究中,您会注意到一个模式:
与所有资源提示一样,预加载允许您利用您对应用程序的了解来优化资源的交付,这比浏览器本身无法做到的更好。
具体来说,您可以告诉浏览器在请求资源之前请求它。告诉浏览器下载它自己会发现的东西是很浪费的。例如,如果您在HTML的<head>顶部附近有style.css,则没有理由使用预加载资源提示。浏览器已经会发现它。
预加载是 后期发现资源的理想选择。后期发现的资源是需要在浏览器访问它们之前下载或执行一个或多个其他资源链的资源。例如:
鉴于上述令人印象深刻的收获,我知道您一定在想什么:
如果预加载资源提示可以提高整体性能和用户体验,我为什么不在页面上预加载所有关键资源?
不幸的是,错误地使用预加载实际上会损害性能。为什么?这很简单:浏览器使用大量复杂的逻辑来决定需要下载什么以及何时下载,因此页面可以尽快呈现并响应访问者。
使用预加载的站点本质上是要求覆盖浏览器通常会执行的操作。如果出于三个原因不小心使用,这可能是不同性能问题的根源:
现在让我们看看一些常见的错误。
采用预加载提示的最常见错误之一是使用过多的提示。通常,网站预加载的资源不应超过3-4个。除此之外,您还试图超越浏览器,这很少是一个好主意。原因如下:
首先,预加载最适用于对页面也很重要的后期发现资源。拥有多个浏览器也不容易发现的关键资源通常是更大设计问题的征兆。
例如,一个站点可能正在预加载六种字体。首屏内容是否需要所有六种字体?一个可变粗细字体文件可以代替吗?另一种选择是通过 <style> 标记直接在HTML中包含font-face: 定义。使用这种 *** ,那些字体文件不再是后期发现的资源。浏览器可以立即查看需要六个字体文件中的哪一个(如果有)并快速获取它,而无需预加载提示。
避免过多预加载提示的第二个原因是。页面的预加载越多,这些预加载中的一个越有可能无助于加速页面的初始加载和交互性。每个都代表了更多的技术债务,以维护和确保预加载的资源对该页面仍然至关重要。

另一个常见的错误是看到页面甚至没有使用的内容的预加载。当网站在其模板中使用公共标头时,我经常会看到这种情况。开发人员可能正在优化他们的主页或关键登录页面,并为关键字体或 JavaScript 文件包含 <link rel=”preload”>。他们错误地将其放在公共标题中,即使这些资源没有在网站的其他地方使用。
幸运的是,现代浏览器会在控制台中显示警告:

在所有关键页面上查找这些警告可能很乏味。相反,一个好的 *** 是查看站点的。如果一个站点正在加载大量,这通常意味着站点所有者正在为整个站点使用大型、粗粒度的通用包,而不是为其特定模板使用较小的目标包。因此,任何预加载也可能过于粗略,并且在不需要时跨页面进行预加载。
另一个常见错误是预加载对首屏内容的呈现和交互性不重要的内容。通常,如果您有太多预加载,那是因为您正在预加载非关键内容。
一般来说,如果 <link rel=”preload” as=””> 属性是除了样式、脚本或字体之外的东西,它通常是非关键的,需要额外的审查。
预加载忽略的最终表现是预加载导致404 – 永远不会好。关键渲染路径中的404错误。但是,预加载内容的404是最差的。你篡夺了浏览器的正常行为,延迟了浏览器知道它需要的资源,全部用于下载无效内容。
Preload 与其他资源提示的不同之处在于您指定了完整的URL。通常,您不能依赖该URL保持不变,或者无法知道完整的URL将是什么。例如:
这些是使用预连接或DNS预取的绝佳机会。请记住:使用提前完成较少工作的资源提示比使用预加载和出错的性能要好得多。
正如我们所展示的,使用预加载资源提示有很多好处,但如果使用不当,也会出现许多损害性能的陷阱。这意味着审核页面如何使用资源提示以确保您遵循所有更佳实践非常重要。
首先,确定页面当前正在使用的所有预加载资源提示。您将需要在基本HTML页面中查找 <link rel=”preload”> 标记,以及Link: HTTP标头,其中也可以包含资源提示。还要记住,包含资源提示的链接标头可以出现在基于HTML页面之外的其他响应中!
获得预加载列表后,问自己以下问题:
与所有性能优化一样,您应该始终在之前和之后进行测量,以确保更改实际上提高了性能。是的,理论上,预加载提示应该加快速度。但是现代网页非常复杂,包含数百种资源,而现代浏览器更加复杂,无法快速处理这些资源以提供更佳体验。信任但要验证。
不久前,PHP 8.0大张旗鼓地发布了。它带来了许多新特性、性能增强和变化——其中最令人兴奋的是新的JIT编译器。 技术世界总是在向前发展,PHP也是如此。 ,包含了几个令人兴奋的特性。它定于今年晚些时候于2021年11月25日发布。 在本文中,我们将详细介绍PHP 8.1将带来哪些新的东...
宝塔的数据库管理,是基于phpmyadmin管理和新建数据库。其最大的便利性就是类似,通过面板可以快速访问进行管理操作,无需单独访问phpmyadmin的主页。 此外,在宝塔面板进行数据库管理,你也对数据库名、用户名及密码等信息一目了然,及可以对数据库执行快速备份或者导入。 添加数据...
宝塔面板设置主要涉及的是宝塔控制后台自身的参数,包括诸如面板的开关、自动更新及SSL、面板端口设置等。虽然这部分不涉及服务器自身的管理,但对宝塔面板的设置也有其重要。 特别是面板端口、安全入口及面板密码等涉及安全的参数设置。 启动和关闭面板 如果你长时间无需使用到宝塔面板,可以考虑...
Laravel多年来一直是PHP应用程序开发的摇滚明星,这是有充分理由的。庞大的生态系统、活跃的社区、强大的就业市场、成功的初创公司——它拥有一切让采用新技术变得值得的东西。 如果你想学习Laravel,你不需要更进一步。通过浏览本指南,您可以找到最适合您的Laravel教程,与您的知识水平和...
PHP开发:有些人认为它是,另一些人认为它是一种过时的技术,不值得花时间学习。但是这些数字说明了什么,尤其是当您查看PHP开发人员的薪水时? 虽然肯定有许多更新、更炫、更令人兴奋的语言,但PHP仍然是后端Web开发的可靠主食,也是许多雇主仍在寻找的技能。 有兴趣自己成为PHP开发人员吗?我们...
美国劳工统计局估计在美有超过软件开发人员。根据2021年的数据,其中,这是世界上使用最广泛的五种编程语言之一。 自然,学习Java并成为Java开发人员对于任何对软件开发感兴趣的人来说都是明智的职业选择。 在本综合指南中,您将学习成为Java开发人员所需的一切知识。我们将分解您需要的技能、工...