searchusermenu
  • 发布文章
  • 消息中心
点赞
收藏
评论
分享
原创

提高页面用户体验之SWR

2023-07-24 07:46:37
30
0

      作为用户的体验的主场景,最希望的就是“触之即达”,第一时间对各种操作有响应,web2.0带来的大量loading或者骨架屏已经成为了当前用户所厌恶的典型界面,特别是在刚刚明明进行了请求,重复操作时又会再次loading的场景中,前端开发者也在通过各种办法提升相应界面展示性能。   

        试想一些场景:1. 对一个有翻页的表格进行来回翻页操作(第1页-第2页-第1页),明明前面已经加载了第一页,再翻回去的时候,大概率会加个loading再请求一次;2. 有一个排序列表,进行拖动排序,你会在哪里保存排序后的数据;3. 文章阅读最后有个“点赞”操作,点了之后是立即显示已赞,还是请求后显示已赞? 当看到这些问题时,你可以说我做了缓存,做了双data数据延迟更新用来立即展示用户操作。 OK,如果你做了这些步骤,那就已经引入了乐观UI的处理范畴,在不同场景也会有很多不同的做法。既然这种做法很常见,那么作为最喜欢造轮子和概念的前端娱乐圈里,绝对不会放过这个机会,于是就有了这个概念 SWR (Stale-While-Revalidate)。

        

什么是 SWR?

        SWR 是一种用于优化前端数据获取和缓存的策略。一种由 HTTP RFC 5861 推广的 HTTP 缓存失效策略。在设置的失效时间之内,它能够立即返回缓存数据,让页面得到及时响应,并在缓存失效时回调更新数据驱动界面变化。

SWR 如何工作?

         SWR 的工作流程相对简单而有效。当你需要获取某个数据时,SWR 首先检查本地缓存是否存在相应的数据,并且检查数据是否过期(Stale)。如果本地缓存的数据没有过期,SWR 将立即返回缓存的数据给你。这样做的好处是用户立即获得了先前的数据,不需要等待新数据加载。

与此同时,SWR 也会发起一个新的数据请求(Revalidate)。当数据请求完成后,SWR 将使用新数据更新本地缓存,并通过触发状态更新或回调通知你数据已经更新。这种机制确保了页面上的数据保持最新,并且在等待新数据时也不会出现空白的内容。

SWR 的优势和特点

  1. 提高用户体验:SWR 的快速缓存和平滑更新机制确保用户立即获得过去的数据,并在后台获取新数据,从而显著提高用户体验。

  2. 减少网络请求:通过有效利用缓存数据,SWR 减少了不必要的网络请求,减轻了服务器和网络的负担,加快了页面加载速度。

  3. 自动处理请求重复:SWR 在请求数据时处理了重复请求问题。如果有多个组件同时请求同一数据,SWR 会确保只有一个请求被发送,然后将响应结果分发给所有请求。

  4. 错误处理和重试:SWR 支持自定义错误处理和重试策略,允许开发人员灵活地处理网络错误和失败的情况。

  5. 轻量且易于集成:作为一个简单的库,SWR 的集成非常容易,几乎可以在任何前端项目中使用,不仅限于 React。

 

     需要注意的是,虽然 SWR 不是一个官方的标准,但它的设计和实现受到了一些前端性能优化的最佳实践和原则的影响。这些原则包括减少网络请求、提供优雅的降级策略、尽早展示数据等。因此,虽然 SWR 不是标准,但它体现了一些通用的前端开发原则,并且在实践中已经被证明是一个有效的工具。

尽管 SWR 是一个功能强大且受欢迎的前端优化库,但它也有一些潜在的缺点和限制。以下是一些 SWR 的缺点:

  1. 只适用于特定场景:SWR 主要用于优化前端数据获取和缓存的场景,如果你的应用程序并不涉及频繁的数据获取和缓存,或者使用其他方法来处理数据,那么使用 SWR 可能没有明显的好处。

  2. 依赖服务器支持缓存控制:SWR 使用 HTTP 头部中的缓存控制参数(如 max-age)来管理数据缓存,但这要求服务器正确配置缓存策略。如果服务器未正确设置缓存头,SWR 的缓存效果可能会受到影响。

  3. 不适用于所有数据请求:SWR 最适合用于频繁请求的数据,对于不太频繁变化的数据,使用 SWR 可能会导致不必要的请求和数据传输,从而浪费网络资源。

  4. 不支持文件上传等操作:由于 SWR 旨在处理数据获取和缓存,它不适用于文件上传等需要特殊处理的操作。

  5. 可能导致数据不一致:由于 SWR 的数据更新是异步的,当快速频繁地更新数据时,可能导致页面上的数据不一致,需要开发者谨慎处理这种情况。

  6. 对于特定错误处理的限制:SWR 提供了一些错误处理的支持,但在某些特定的错误处理场景下,可能需要额外的定制和处理。

  7. 数据不一致性风险:如果 SWR 中使用的数据请求是不幂等(non-idempotent)的,可能会导致数据不一致性的风险。这需要开发者保证数据请求的幂等性。

0条评论
0 / 1000
坦行
6文章数
0粉丝数
坦行
6 文章 | 0 粉丝
原创

提高页面用户体验之SWR

2023-07-24 07:46:37
30
0

      作为用户的体验的主场景,最希望的就是“触之即达”,第一时间对各种操作有响应,web2.0带来的大量loading或者骨架屏已经成为了当前用户所厌恶的典型界面,特别是在刚刚明明进行了请求,重复操作时又会再次loading的场景中,前端开发者也在通过各种办法提升相应界面展示性能。   

        试想一些场景:1. 对一个有翻页的表格进行来回翻页操作(第1页-第2页-第1页),明明前面已经加载了第一页,再翻回去的时候,大概率会加个loading再请求一次;2. 有一个排序列表,进行拖动排序,你会在哪里保存排序后的数据;3. 文章阅读最后有个“点赞”操作,点了之后是立即显示已赞,还是请求后显示已赞? 当看到这些问题时,你可以说我做了缓存,做了双data数据延迟更新用来立即展示用户操作。 OK,如果你做了这些步骤,那就已经引入了乐观UI的处理范畴,在不同场景也会有很多不同的做法。既然这种做法很常见,那么作为最喜欢造轮子和概念的前端娱乐圈里,绝对不会放过这个机会,于是就有了这个概念 SWR (Stale-While-Revalidate)。

        

什么是 SWR?

        SWR 是一种用于优化前端数据获取和缓存的策略。一种由 HTTP RFC 5861 推广的 HTTP 缓存失效策略。在设置的失效时间之内,它能够立即返回缓存数据,让页面得到及时响应,并在缓存失效时回调更新数据驱动界面变化。

SWR 如何工作?

         SWR 的工作流程相对简单而有效。当你需要获取某个数据时,SWR 首先检查本地缓存是否存在相应的数据,并且检查数据是否过期(Stale)。如果本地缓存的数据没有过期,SWR 将立即返回缓存的数据给你。这样做的好处是用户立即获得了先前的数据,不需要等待新数据加载。

与此同时,SWR 也会发起一个新的数据请求(Revalidate)。当数据请求完成后,SWR 将使用新数据更新本地缓存,并通过触发状态更新或回调通知你数据已经更新。这种机制确保了页面上的数据保持最新,并且在等待新数据时也不会出现空白的内容。

SWR 的优势和特点

  1. 提高用户体验:SWR 的快速缓存和平滑更新机制确保用户立即获得过去的数据,并在后台获取新数据,从而显著提高用户体验。

  2. 减少网络请求:通过有效利用缓存数据,SWR 减少了不必要的网络请求,减轻了服务器和网络的负担,加快了页面加载速度。

  3. 自动处理请求重复:SWR 在请求数据时处理了重复请求问题。如果有多个组件同时请求同一数据,SWR 会确保只有一个请求被发送,然后将响应结果分发给所有请求。

  4. 错误处理和重试:SWR 支持自定义错误处理和重试策略,允许开发人员灵活地处理网络错误和失败的情况。

  5. 轻量且易于集成:作为一个简单的库,SWR 的集成非常容易,几乎可以在任何前端项目中使用,不仅限于 React。

 

     需要注意的是,虽然 SWR 不是一个官方的标准,但它的设计和实现受到了一些前端性能优化的最佳实践和原则的影响。这些原则包括减少网络请求、提供优雅的降级策略、尽早展示数据等。因此,虽然 SWR 不是标准,但它体现了一些通用的前端开发原则,并且在实践中已经被证明是一个有效的工具。

尽管 SWR 是一个功能强大且受欢迎的前端优化库,但它也有一些潜在的缺点和限制。以下是一些 SWR 的缺点:

  1. 只适用于特定场景:SWR 主要用于优化前端数据获取和缓存的场景,如果你的应用程序并不涉及频繁的数据获取和缓存,或者使用其他方法来处理数据,那么使用 SWR 可能没有明显的好处。

  2. 依赖服务器支持缓存控制:SWR 使用 HTTP 头部中的缓存控制参数(如 max-age)来管理数据缓存,但这要求服务器正确配置缓存策略。如果服务器未正确设置缓存头,SWR 的缓存效果可能会受到影响。

  3. 不适用于所有数据请求:SWR 最适合用于频繁请求的数据,对于不太频繁变化的数据,使用 SWR 可能会导致不必要的请求和数据传输,从而浪费网络资源。

  4. 不支持文件上传等操作:由于 SWR 旨在处理数据获取和缓存,它不适用于文件上传等需要特殊处理的操作。

  5. 可能导致数据不一致:由于 SWR 的数据更新是异步的,当快速频繁地更新数据时,可能导致页面上的数据不一致,需要开发者谨慎处理这种情况。

  6. 对于特定错误处理的限制:SWR 提供了一些错误处理的支持,但在某些特定的错误处理场景下,可能需要额外的定制和处理。

  7. 数据不一致性风险:如果 SWR 中使用的数据请求是不幂等(non-idempotent)的,可能会导致数据不一致性的风险。这需要开发者保证数据请求的幂等性。

文章来自个人专栏
FEX
6 文章 | 1 订阅
0条评论
0 / 1000
请输入你的评论
0
0