资产预加载和资源提示与HTTP/2和WebLink
编辑本页警告:您正在浏览的文档欧宝官网下载appob娱乐下载Symfony 5.1,现已不再维护。
读本页的更新版本用于Syob娱乐下载mfony 6.2(当前稳定版本)。
连接组件)用于管理链接
HTTP报头,当使用HTTP/2和现代web浏览器的预加载功能时,它是提高应用程序性能的关键。
链接
头文件用于HTTP/2服务器推送和W3C的资源提示将资源(例如CSS和JavaScript文件)推送给客户,甚至在客户知道他们需要这些资源之前。WebLink还支持与HTTP 1.x一起工作的其他优化:
- 要求浏览器在后台获取或渲染另一个网页;
- 进行早期DNS查询,TCP握手或TLS协商。
需要考虑的重要一点是,所有这些HTTP/2特性都需要一个安全的HTTPS连接,即使是在本地机器上工作。主要的web服务器(Apache, nginx, Caddy等)支持这一点,但你也可以使用Symfony的Docker安装程序和运行时ob娱乐下载由Symfony社区的Kévin Dunglas创建。欧宝体育平台怎么样ob娱乐下载
按照传统的HTTP工作流程,当提供此页面时,浏览器将对HTML页面发出一个请求,并对链接的CSS文件发出另一个请求。然而,多亏了HTTP/2,你的应用程序甚至可以在浏览器请求之前就开始发送CSS文件内容。
要做到这一点,首先安装WebLink组件:
1
$作曲家需要symfony/web-ob娱乐下载link
现在,更新模板以使用预加载()
WebLink提供的树枝功能。的“作为”属性是强制性的,因为浏览器需要它来应用正确的优先级和内容安全策略:
1 2 3 4
<头><!——……--><链接rel=“样式表”href="{{preload('/app.css', {as: 'style'})}}">头>
如果重新加载页面,性能会得到改善,因为当浏览器只请求HTML页面时,服务器会同时响应HTML页面和CSS文件。
请注意
属性包装资产,可以预加载资产预加载()
功能:
1 2 3 4
<头><!——……--><链接rel=“样式表”href="{{preload(asset('build/app.css'))}}">头>
此外,根据优先级提示规范,可以指示要下载的资源优先级重要性
属性:
1 2 3 4
<头><!——……--><链接rel=“样式表”href="{{预加载(/ app.css,{:“风格”,重要性:'低'})}}">头>
链接向响应中添加HTTP报头。当使用预加载()
函数中,下面的头被添加到响应中:链接< / app.css >;rel = "预加载”;=“风格”
根据预加载规范当HTTP/2服务器检测到原始(HTTP 1.x)响应包含此HTTP头时,它将自动触发同一HTTP/2连接中相关文件的推送。
流行的代理服务和cdn包括ob直播appCloudflare,急剧而且Akamai还要利用这个特性。这意味着您可以立即将资源推给客户端,并提高生产应用程序的性能。
如果希望阻止推送,但让浏览器通过早期发出单独的HTTP请求来预加载资源,请使用nopush
选择:
1 2 3 4
<头><!——……--><链接rel=“样式表”href="{{预加载(/ app.css,{:“风格”,nopush:真正})}}">头>
资源提示应用程序使用它来帮助浏览器决定应该首先下载、预处理或连接哪些资源。
WebLink组件提供了以下Twig函数来发送这些提示:
dns_prefetch ()
: "表示一个来源(例如:https://foo.ob直播appcloudfront.net
),将用于获取所需的资源,并且用户代理应该尽早解决”。preconnect ()
: "表示一个来源(例如:https://www.pdashmedia.com
),用于获取所需的资源。发起早期连接,包括DNS查找、TCP握手和可选的TLS协商,允许用户代理掩盖建立连接的高延迟成本。”预取()
: "标识下一个导航可能需要的资源,以及用户代理应该获取,这样用户代理可以在将来请求资源时提供更快的响应”。prerender ()
: "标识下一个导航可能需要的资源,以及用户代理应该获取并执行,这样用户代理可以在稍后请求资源时提供更快的响应”。
组件还支持发送与性能无关的HTTP链接和实现PSR-13标准。例如,任何HTML规范中定义的链接:
1 2 3 4 5
<头><!——……--><链接rel=“替代”href="{{链接(' /索引。Jsonld ', 'alternate')}}"><链接rel=“样式表”href="{{预加载(/ app.css,{:“风格”,nopush:真正})}}">头>
前面的代码片段将导致这个HTTP头被发送到客户端:链接:< / index.jsonld >;rel = "替代",< / app.css >;rel = "预加载”;nopush
你也可以直接从控制器和服务添加链接到HTTP响应:
12 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
/ / src /控制器/ BlogController.php名称空间应用程序\控制器;使用ob娱乐下载\包\FrameworkBundle\控制器\AbstractController;使用ob娱乐下载\组件\HttpFoundation\请求;使用ob娱乐下载\组件\连接\GenericLinkProvider;使用ob娱乐下载\组件\连接\链接;类BlogController扩展AbstractController{公共函数指数(请求$请求){//使用AbstractController提供的addLink()快捷方式$这->通过addLink ($请求,新链接(预加载的,' / app.css '));//如果你不想使用addLink()快捷方式$linkProvider=$请求->属性->get (“_links”,新GenericLinkProvider ());$请求->属性->集(“_links”,$linkProvider->withLink ((新链接(预加载的,' / app.css '))->withAttribute (“是”,“风格”)));返回$这->呈现('...');}}