HTML /性能:预呈现多个页面

Rol*_*uhs 3 html

在用户将去往的可能方向(例如图库或类似图片)的情况下,可以不仅猜测用户在下次点击之后将去哪里,可以预测接下来的5次点击或更多.

当一个人使用"prerender"链接(或对不懂"prerender"的浏览器"预取")到多个页面时,浏览器将下载并呈现所有这些链接,但在用户点击后会忘记数据一个链接,预取/预渲染版本可以使用多长时间?是否有关于该功能的明确文档?

换句话说:"预渲染" - 链接到接下来的5个页面会使网站更快(因为用户可以快速跳过页面)或更慢(因为浏览器在每次点击时不必要地预呈现5个页面)?

编辑:我现在已经做了一些测试,如果你只是放入prerender链接,似乎多个prerender-links不会让它更快.

Shl*_*sid 9

好问题,首先我们需要明确指出"预渲染"和"预取"是两种不同的特征,具有许多不同的限制和行为.这里的一个重要问题是,根据webrowser,它们的行为会略有不同,而且它们经常被误解和误用.

快速概述

prefetch预取的概念包含在更好地用于加载资源(样式表,js,图片等)的HTML5规范中 - 这是因为它作为子资源加载到缓存中.在预取页面时,浏览器会下载(一旦当前页面完全加载),页面的顶层将被链接(目标页面中的Iframe将不会被预取).预取整个页面可能会导致性能不足.预取的好处是限制更高 - 预取过程是每个标签(不是webbrowser实例),你可以设置许多预取链接(IE <9 - Max 10 Links,Mozilla未知).

prerender首先由Chrome提供并由IE11实现稍后 - 当添加到页面时,它将在后台执行链接页面的页面完整加载过程(在隐藏选项卡上) - 您可以看到它被触发(一旦主页面被加载)通过查看任务管理器(Chrome).这里的一个重要问题是a prerender process是浏览器的每个实例(不是每个标签打开),这意味着如果另一个站点已经打开并触发了这个过程,你的过程可能会被忽略或延迟(这取决于哪个浏览器).另一个有趣的事实是,你每页只能添加一个"prerender"链接,如果你添加更多,它们将被忽略 - 如果你动态加载prerender链接,你需要知道有一个间隔限制问题(500ms - 在Chrome中).

渲染扩展了预取的概念.它不是仅下载顶级资源,而是完成向用户显示页面所需的所有工作,而不会在用户点击之前实际显示该页面.预渲染的行为类似于用户在页面上的中间点击(在后台选项卡中打开它)然后切换到该选项卡.但是,在预渲染中,"背景选项卡"对用户完全隐藏,当用户点击时,其内容将无缝交换到用户正在查看的同一选项卡中.从用户的角度来看,页面加载速度比以前快得多.

已知问题和重要说明:

  • 显示页面时可能不会显示某些动画.这可能是因为它们已经在页面在后台加载时运行.
  • 定时器可能会产生意外结果.
  • 保留由异步操作(例如IndexedDB和Web存储)所做的Cookie,缓存内容和更改.
  • 某些浏览器中的私密浏览将禁用预渲染和预取("隐身").
  • 有些浏览器不支持HTTPS链接(IE> 11,gecko <1.9.1,Chrome不支持).
  • Chrome和IE不支持 HTTP Link: header - <meta http-equiv="Link" content="</images/big.jpeg>; rel=prefetch">

预取摘要:

  • 浏览器:是HTML5规范的一部分(较早的IE <9充当dns-prefetch).
  • 加载到:作为当前Tab的子资源进入缓存.
  • 限制: IE11中的10个链接(IE10未知,FireFox未知).
  • 续航时间: 5分钟.
  • 下载深度:仅限顶层(网页).
  • 链接: HTTP,HTTPS(IE> 10,Gecko> 1.9.1),没有"同源"限制.
  • 动态:支持.

预渲染摘要:

  • 浏览器: Chrome,IE> 10.
  • 加载到:单独隐藏的选项卡.
  • 限制: 1个链接 - 将为每个浏览器实例触发一个.
  • 生命周期:直到另一个预渲染过程被触发(从任何打开的标签).
  • 下载深度:整页加载.
  • 链接: HTTP(HTTPS不会),没有"同源"限制.
  • 动态:每次更改之间500毫秒.

预取延迟或忽略:

  • 目标URL不是HTTP GET XMLHTTPRequests - 忽略(POST,PUT,DELETE)
  • 使用mozila下载某些内容 - 延迟
  • IE> 9 - 页面上超过10个链接 - 被忽略
  • 两个浏览器(Mozila)在带宽上竞争 - 延迟
  • 开发者工具打开 - 忽略
  • 私人模式已启用 - 已忽略
  • 目标URL是文件下载 - 忽略

预渲染中止或忽略/延迟:

  • 目标URL不是HTTP GET XMLHTTPRequests - 忽略(POST,PUT,DELETE)
  • 另一个Prerender进程正在运行 - 延迟(可以忽略)
  • 页面上超过1个链接 - 被忽略(仅首先运行)
  • 浏览器在带宽上竞争 - 延迟
  • 开发者工具或'隐身' - 被忽略
  • 目标URL是文件下载 - 已中止
  • 在IE <10:用户切换到不同的选项卡或浏览器实例 - 中止和删除
  • 页面中的HTMLAudio或视频 - 已中止
  • 弹出/窗口创建 - 中止
  • 触发恶意软件警告的页面 - 已中止

更多