资讯

手机用华为 • 推广找展为

十年专注 提供有品质的服务 13933871212

石家庄裕华区网站制作公司

专注:石家庄网站制作 | 咨询 13933871212(同微信) 2020-12-12 22:13:55

石家庄裕华区网站制作公司我们是否发送响应?通过流传输,在初始导航请求期间呈现的HTML可以充分利用浏览器的流HTML解析器。
您是否传送回应?
常常被遗忘和被忽视的,流的读取或写入数据的异步块,其中只有一个子集的可能是内存可在任何给定时间提供一个接口。基本上,它们允许发出原始请求的页面在第一块数据可用时立即开始使用响应,并使用针对流进行了优化的解析器来逐步显示内容。
我们可以从多个来源创建一个流。例如,您可以让服务工作者构造一个流,其中外壳程序来自缓存,而主体来自网络,而不是提供一个空的UI Shell并让JavaScript填充它。正如Jeff Posnick指出的那样,如果您的网站制作应用程序是由CMS驱动的,该CMS通过将部分模板拼接在一起来服务器呈现HTML,则该模型将直接转换为使用流式响应,并在服务工作者(而不是服务器)中复制模板逻辑。杰克·阿奇博尔德(Jake Archibald)的“网络流年”文章重点介绍了如何构建它。性能提升非常明显。
 
流传输整个HTML响应的一个重要优点是,在初始导航请求期间呈现的HTML可以充分利用浏览器的流HTML解析器。页面加载后插入到文档中的HTML块(通过JavaScript填充的内容很常见)无法利用此优化。
 
浏览器支持?在Chrome,Firefox,Safari和Edge中获得部分支持,从而支持所有现代浏览器都支持该API和Service Workers 。
 
考虑使您的组件具有连接意识。
数据可能会很昂贵,并且随着有效负载的增加,我们需要尊重选择访问我们的网站或应用程序时选择节省数据的用户。在保存,数据客户端提示请求头让我们可以自定义应用程序,并以具成本有效载荷和性能受限的用户。实际上,您可以将对高DPI图像的请求重写为低DPI图像,删除网站制作字体,奇特的视差效果,预览缩略图和无限滚动,关闭视频自动播放,服务器推送,减少显示的项目数并降低图像质量,或者甚至改变您交付标记的方式。蒂姆·韦里克(Tim Vereecke)发表了一篇关于数据平均(h)平均策略的非常详细的文章 具有许多保存数据的选项。
当前仅在Chromium,Android版Chrome或通过台式机设备上的Data Saver扩展程序支持标头。更后,您还可以使用Network Information API来根据网络类型传递低/高分辨率图像和视频。网络信息API和具体navigator.connection.effectiveType使用RTT,downlink,effectiveType值(和一些其他人),以提供连接的表示,并且用户可以处理数据。
 
在这种情况下,Max Stoiber谈到了连接感知组件,而Addy Osmani谈到了自适应模块服务。。例如,使用React,我们可以编写一个针对不同连接类型呈现不同内容的组件。如Max所建议,<Media />新闻文章中的组件可能会输出:
 
Offline:带有alt文本的占位符,
2G/save-data模式:低分辨率图像,
3G 在非视网膜屏幕上:中等分辨率的图像,
3G 在Retina屏幕上:高分辨率Retina图像,
4G:高清视频。
Dean Hume使用服务工作者提供了类似逻辑的实际实现。对于视频,我们可以默认显示视频海报,然后在更好的连接上显示“播放”图标以及视频播放器外壳,视频的元数据等。作为不支持的浏览器的备用,如果事件在2秒钟内未触发,我们可以监听canplaythrough事件并用于Promise.race()使源加载超时canplaythrough。
 
如果您想更深入一点,这里有一些入门资源:
 
Addy Osmani展示了如何在React中实现自适应服务。
React Adaptive Loading Hooks&Utilities提供了React的代码片段,
Netanel Basel在Angular中探索了可感知连接的组件,
Theodore Vorilas分享了在Vue中使用Network Information API服务自适应组件的工作方式。
考虑使您的组件设备知道内存。
但是,网络连接仅在用户上下文方面为我们提供了一种视角。更进一步,您还可以使用设备内存API根据可用的设备内存动态调整资源。返回设备有多少RAM(以GB为单位),四舍五入到更接近的2的幂。该API还具有报告相同值的“客户端提示头” 。navigator.deviceMemoryDevice-Memory
奖励:Umar Hansa展示了如何通过动态导入来推迟昂贵的脚本,以基于设备内存,网络连接性和硬件并发性来改变体验。
 
DevTools中的优先级列
DevTools中的“优先级”列。图片来源:Ben Schwarz,关键请求
预热连接以加快交付速度。
使用资源提示节省时间dns-prefetch(在后台执行DNS查找),preconnect(要求浏览器在后台启动连接握手(DNS,TCP,TLS)),prefetch(要求浏览器请求资源)和preload(它会在不执行资源的情况下预取资源)。
还记得prerender吗 资源提示用于提示浏览器在后台构建整个页面以进行下一次导航。实施方面的问题非常棘手,从巨大的内存占用和带宽使用到多个已注册的分析命中数和广告展示次数,不等。
 
毫不奇怪,它已被弃用,但Chrome团队将其作为NoState Prefetch机制带回了。实际上,Chrome会将prerender提示视为NoState预取,因此我们今天可以使用它。正如Katie Hempenius在那篇文章中解释的那样,“像预渲染一样,NoState Prefetch会预先获取资源;但是与预渲染不同,它不执行JavaScript也不预先渲染页面的任何部分。” NoState Prefetch仅使用〜45MiB的内存,并且将使用IDLENet Priority来获取所获取的子资源。从Chrome 69开始,NoState Prefetch会添加标头用途:对所有请求进行预取,以使其与正常浏览区分开。
 
大多数时候,这些天,我们将使用至少preconnect和dns-prefetch,我们就可以用谨慎prefetch,preload和prerender; 仅当您对用户接下来需要哪些资产(例如,在购买渠道中)有信心时,才应使用前者。
 
请注意,即使使用preconnect和dns-prefetch,浏览器在并行查找/连接的主机数量上也有限制,因此可以安全地根据优先级对主机进行排序(感谢Philip Tellis!)。
 
实际上,使用资源提示可能是提高性能的更简单方法,并且确实效果很好。什么时候使用什么?正如Addy Osmani解释的那样,更好预加载我们非常有信心将在当前页面上使用的资源。预取资源可能会用于将来跨多个导航边界进行导航,例如用户尚未访问的页面所需的网站制作pack捆绑包。
 
Addy的文章“在Chrome中加载优先级”显示了Chrome如何正确解释资源提示,因此,一旦确定了哪些资源对于渲染至关重要,就可以为其分配高优先级。要查看请求的优先级,可以在Chrome DevTools网络请求表(以及Safari)中启用“优先级”列。
 
细分显示了Chrome 46及更高版本如何在Blink中区分不同资源的优先级
(图片来源:Pat Meenan)(大预览)
由于字体通常是页面上的重要资产,因此有时更好要求浏览器使用来下载关键字体 preload。但是,请仔细检查它是否确实对性能有所帮助,因为在预加载字体时会优先考虑优先顺序:正如preload人们所认为的那样,它可能会越过诸如关键CSS之类的更为关键的资源,就显得尤为重要。(谢谢,巴里!)
 
您还可以动态加载JavaScript,有效地延迟执行。另外,由于<link rel="preload">接受media属性,因此您可以选择根据查询规则有选择地对资源进行[email protected]
 
需要牢记的一些陷阱:preload有利于移动资产的开始下载时间较接近初始请求,但预加载的资产位于与请求页面相关的内存缓存中。preloadHTTP缓存可以很好地发挥作用:如果HTTP缓存中已存在该项目,则永远不会发送网络请求。
 
因此,它对于后期发现的资源,通过背景图像加载的英雄图像,内联关键CSS(或JavaScript)以及预加载其余CSS(或JavaScript)非常有用。同样,preload只有在浏览器已从服务器接收到HTML并且超前解析器已找到preload标签后,标签才能启动预加载。
 
通过HTTP标头进行预加载可能会更快一些,因为我们不必等待浏览器解析HTML来启动请求(尽管有人对此进行了辩论)。早期的提示将有助于进一步,使预紧力踢了HTML的响应报头被发送之前就(在路线图铬,火狐)。另外,优先级提示将帮助我们指示脚本的加载优先级。
 
当心:如果您正在使用preload,则as 必须进行定义或不加载任何内容,加上不带该 属性的预加载字体会导致两次获取。crossorigin
 
使用服务人员进行缓存和网络后备。
网络上的任何性能优化都无法比用户计算机上本地存储的缓存快。如果您的网站通过HTTPS运行,请使用“实用程序服务工作者指南”在服务工作者缓存中缓存静态资产,并存储脱机后备(甚至脱机页面),并从用户的计算机中检索它们,而不是去网络。 。另外,请查看Jake的“离线食谱”和免费的Udacity课程“离线网站制作应用程序”。
浏览器支持?如上所述,它得到了广泛的支持,无论如何,后备是网络。它有助于提高性能吗?哦,是的。而且它正在变得越来越好,例如通过Background Fetch允许服务人员后台上传/下载。
 
服务工作者有许多用例。例如,您可以实现“离线保存”功能,处理损坏的图像,在选项卡之间引入消息传递或基于请求类型提供不同的缓存策略。通常,一种常见的可靠策略是将应用程序外壳以及一些关键页面(例如脱机页面,首页和其他可能对您重要的内容)存储在服务工作者的缓存中。
 
但是要记住一些陷阱。配备服务人员后,我们需要提防Safari中的范围请求(如果您将Workbox用于服务人员,则它具有范围请求模块)。如果您偶然在DOMException: Quota exceeded.浏览器控制台中发现错误,请参阅Gerardo的文章何时7KB等于7MB。
 
正如Gerardo所说:“如果当服务工作者缓存从CDN提供的静态资产时,如果您正在构建一个渐进式网站制作应用程序,并且正在经历cache肿的缓存存储,请确保跨域资源存在正确的CORS响应标头,那么您就不会缓存不透明的响应与服务人员无意间,您可以通过将crossorigin属性添加到<img>标签来选择跨域图像资产进入CORS模式。”
 
使用Service Worker的一个很好的起点是Workbox,这是专门为构建渐进式网站制作应用程序而构建的一组Service Worker库。
 
10年建站推广经验

让您每一分投入都有更多回报!

联系展为,马上获得专属免费推广方案

咨询相关问题或预约面谈,可以通过以下方式与我们联系

业务热线:13933871212   固定电话:0311-80836913   微信:9196389