首页 > 其他分享 >关于现代浏览器的 back-and-forward 缓存机制

关于现代浏览器的 back-and-forward 缓存机制

时间:2023-01-16 21:57:59浏览次数:132  
标签:缓存 浏览器 后退 back 按钮 forward SPA 导航 页面

setUpLocationChangeListener:设置位置更改侦听器。 这个侦听器检测从路由器外部触发的导航(例如,浏览器后退/前进按钮)并安排相应的路由器导航,以便触发正确的 guard event.

Angular 路由文档里提到:

Had you clicked the browser's back button instead of the application's "Back" button, the application would have returned you to the heroes list as well. Angular application navigation updates the browser history as normal web navigation does.

如果单击浏览器的后退按钮而不是应用程序的后退按钮,应用程序也会将我们返回到 hero list. Angular 应用程序导航会像普通 Web 导航一样更新浏览器历史记录。

据 Google 一份调查报告统计,移动设备上大约 20% 的页面访问是通过后退和前进按钮进行的。

在考虑用户应该如何体验后退或前进导航时,我们确实有一个理想的体验 - 基于特定移动平台的原生应用。 例如,Android 维护着一个 Activities 栈。 当用户导航到另一个页面时,该堆栈项目将关闭。 返回时,只需将其重新打开即可。 结果,该页面的状态以极其有效的方式显示给用户。

实际上,浏览器将为每个导航创建一个新 frame 。 无论是在同一个站点内进行跳转,还是跨域跳转,浏览器都会将页面冻结。 这包括拍摄页面快照以及其他元数据。 此外,该页面上的所有工作,包括任何延迟的任务,如 setTimeout 都将停止,直到通过 bfcache 再次到达该页面时才会恢复。 当用户使用后退或前进按钮导航回到堆栈中的某个项目时,浏览器会将它从 cache 中取下来,并呈现给用户而不刷新内容。 这包括所有可能处于变化中的输入元素状态。 换句话说,这是一种有状态浏览

在 SPA 即单页面应用里,当用户与浏览器的后退按钮交互时,并没有真正导航到新的 HTML 页面。 我们在 window.onpopstate 上与 history.pushState 和 history.replaceState 等 API 进行交互。

在 SPA 中使用后退和前进按钮的缺点是绘制 DOM 和从浏览器缓存中检索资源的成本。 如果文档非常大,即使从浏览器缓存中检索资源也可能代价高昂。 此外,保持以前的滚动位置可能非常棘手。 在 Ember.js 社区中,ember-router-scroll 已成为帮助 SPA 正确实现这一点的关键。 然而,它对于延迟加载的 DOM 元素和内容繁多的大型文档也很棘手。 当然,导航之前页面的冻结状态将有助于所有 SPA 恢复上次滚动的位置。 然而,这将需要不同的浏览器 API 来解决上面提出的一些问题。

标签:缓存,浏览器,后退,back,按钮,forward,SPA,导航,页面
From: https://www.cnblogs.com/sap-jerry/p/17056378.html

相关文章

  • 关于 Angular 应用对浏览器 Back 按钮支持问题的讨论
    需求1:如果开发人员想禁用整个应用程序或多个组件的后退按钮需求2:如果只想禁用特定组件的后退按钮对于第一个要求,一个可行的办法是,实现一个Guard并将其应用于所需的路由......
  • http协议缓存详解
    浏览器端强制缓存,http响应头expires和cache-control是设置缓存的重要参数expires设置到期时间点,这是http1.0的产物,对于客户端时间和服务器端有时差的情况,会导致缓......
  • Redis 缓存和 MySQL 如何实现数据一致性
    需求起因在高并发的业务场景下,数据库大多数情况都是用户并发访问最薄弱的环节。所以,就需要使用redis做一个缓冲操作,让请求先访问到redis,而不是直接访问MySQL等数据库。......
  • 【微信小程序】缓存过期时间的相关设置
    微信小程序缓存机制介绍  每个微信小程序都可以有自己的本地缓存,可以通过​​wx.setStorage(wx.setStorageSync)​​​、​​wx.getStorage(wx.getStorageSync)​​​、​​w......
  • percona xtrabackup 学习总结
    1.安装版本选择官网:https://www.percona.com/downloads/PerconaXtraBackup8.0    只支持MySQL8.0的版本PerconaXtraBackup2.4   支持MySQL5.11,5......
  • 聊聊分布式缓存
    缓存作为磁盘以外的一种存储数据的方式,它有着比磁盘更快的存取效率,因此,可以有效提高系统的性能。在单体系统中,一般会用到本地缓存。但在分布式系统中,本地缓存就显得不够用......
  • 36 | 局部性原理:数据库性能跟不上,加个缓存就好了?
    平时进行服务端软件开发的时候,我们通常会把数据存储在数据库里。而服务端系统遇到的第一个性能瓶颈,往往就发生在访问数据库的时候。这个时候,大部分工程师和架构师会拿出......
  • spring boot——请求与参数校验——spring-mvc——转发——forward
      packageorg.example.controller.requestparam;importorg.springframework.stereotype.Controller;importorg.springframework.web.bind.annotation.RequestM......
  • 缓存穿透及解决方案
    缓存只是为了缓解数据库压力而添加的一层保护层,当从缓存中查询不到我们需要的数据就要去数据库中查询了。如果被黑客利用,频繁去访问缓存中没有的数据,那么缓存就失去了存在的......
  • .NetCore下基于FreeRedis实现的Redis6.0客户端缓存之缓存键条件优雅过滤
    前言众所周知内存缓存(MemoryCache)数据是从内存中获取,性能表现上是最优的,但是内存缓存有一个缺点就是不支持分布式,数据在各个部署节点上各存一份,每份缓存的过期时间不一......