当前位置:首页 > 科技  > 软件

Vue3 中如何做高性能的拼音搜索,提高用户体验?

来源: 责编: 时间:2024-05-24 17:25:20 271观看
导读下拉框搜索最近页面中需要一个下拉框,并且支持搜索功能(搜索选项文本和拼音),这是一个挺普通的小功能,代码如下:request.ts 先准备一些假的下拉框数据,并模拟请求:图片Index.vue 中进行请求,并渲染下拉框,配置一些属性,支持搜索

下拉框搜索

最近页面中需要一个下拉框,并且支持搜索功能(搜索选项文本和拼音),这是一个挺普通的小功能,代码如下:BKj28资讯网——每日最新资讯28at.com

request.ts 先准备一些假的下拉框数据,并模拟请求:BKj28资讯网——每日最新资讯28at.com

图片图片BKj28资讯网——每日最新资讯28at.com

Index.vue 中进行请求,并渲染下拉框,配置一些属性,支持搜索选项文本:BKj28资讯网——每日最新资讯28at.com

图片图片BKj28资讯网——每日最新资讯28at.com

可以看到实现了搜索文本,但是产品说还得支持搜索拼音呢~可以看到当前是不支持搜索拼音的。BKj28资讯网——每日最新资讯28at.com

图片图片BKj28资讯网——每日最新资讯28at.com

拼音搜索

拼音搜索其实也不难,用一些库即可,比如 pinyin-pro。BKj28资讯网——每日最新资讯28at.com

pnpm i pinyin-pro

我可以使用 pinyin-pro 这个库,在获取数据的时候为每一项的文本进行拼音翻译,并放到字段 keywords 中。BKj28资讯网——每日最新资讯28at.com

图片图片BKj28资讯网——每日最新资讯28at.com

现在可以看到每一项都有一个 keywords 字段,里面存了每一项的文本和拼音。BKj28资讯网——每日最新资讯28at.com

图片图片BKj28资讯网——每日最新资讯28at.com

接着,在页面中配置一下 Select 的搜索过滤函数。BKj28资讯网——每日最新资讯28at.com

图片图片BKj28资讯网——每日最新资讯28at.com

现在就支持了文本搜索和拼音搜索了。BKj28资讯网——每日最新资讯28at.com

图片图片BKj28资讯网——每日最新资讯28at.com

多个下拉框拼音搜索

上面例子是只有一个,那如果有多个下拉框呢?比如有两个下拉框,我准备了两个下拉框的假数据。BKj28资讯网——每日最新资讯28at.com

图片图片BKj28资讯网——每日最新资讯28at.com

接着在页面中展示两个下拉框:BKj28资讯网——每日最新资讯28at.com

图片图片BKj28资讯网——每日最新资讯28at.com

可以看到两个下拉框的拼音数据耗时情况,其实当时页面上不止两个下拉框,大概有十几个下拉框,且数据都很巨大,如果每一个下拉框都要接近200ms的耗时的话,那用户体验会很不好。BKj28资讯网——每日最新资讯28at.com

图片图片BKj28资讯网——每日最新资讯28at.com

性能优化

根据观察,我发现我这个页面的十几个下拉框其实都有很多下拉项是相同的,这意味着,有一些项存在重复翻译的问题。BKj28资讯网——每日最新资讯28at.com

就比如这个“放米”,options1翻译过一遍了,options2还翻译一遍,这就导致了性能损耗。BKj28资讯网——每日最新资讯28at.com

图片图片BKj28资讯网——每日最新资讯28at.com

所以其实可以使用缓存来进行优化,思路就是:BKj28资讯网——每日最新资讯28at.com

1、准备一个对象,key 是文本,value 是拼音BKj28资讯网——每日最新资讯28at.com

2、每次翻译的时候BKj28资讯网——每日最新资讯28at.com

先检测对象里是否能匹配到。BKj28资讯网——每日最新资讯28at.com

能匹配到直接用,不能匹配到才调用 pinyin-pro 进行翻译。BKj28资讯网——每日最新资讯28at.com

图片图片BKj28资讯网——每日最新资讯28at.com

这样的话,能避免文本的重复翻译,从而提升性能,由于 options2 有很多跟 options1 相同的项,所以 options2 很多项的翻译都是直接取缓存的,数据处理的速度大大提升!BKj28资讯网——每日最新资讯28at.com

图片图片BKj28资讯网——每日最新资讯28at.com

其实这种方式也是有局限性的,如果每一个 options 的数据重合度都不高的话,那么这种优化方式也就没啥意义了BKj28资讯网——每日最新资讯28at.com

所以最好的方式还是叫后端翻译好拼音,传给前端。BKj28资讯网——每日最新资讯28at.com

类似的场景

其实不止是上面举的例子,还有其他项目中类似的场景,需要用到这种优化方式,比如:复杂的翻译、复杂的数据处理。BKj28资讯网——每日最新资讯28at.com

例子终究是例子,重要的是能举一反三。BKj28资讯网——每日最新资讯28at.com

本文链接:http://www.28at.com/showinfo-26-90669-0.htmlVue3 中如何做高性能的拼音搜索,提高用户体验?

声明:本网页内容旨在传播知识,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。邮件:2376512515@qq.com

上一篇: 来自 Rust 生态的强烈冲击?谈谈 Leptos 在语法设计上的精妙之处

下一篇: 分享七个.NET开源、功能强大的快速开发框架

标签:
  • 热门焦点
  • 一加Ace2 Pro真机揭晓 钛空灰配色质感拉满

    终于,在经过了几波预热之后,一加Ace2 Pro的外观真机图在网上出现了。还是博主数码闲聊站曝光的,这次的外观设计还是延续了一加11的方案,只是细节上有了调整,例如新加入了钛空灰
  • 6月安卓手机性价比榜:Note 12 Turbo断层式碾压

    6月份有一个618,虽然这是京东周年庆的日子,但别的电商也都不约而同的跟进了,反正促销没坏处,厂商和用户都能满意。618期间一些产品也出现了历史低价,那么各个价位段的产品性价比
  • Raft算法:保障分布式系统共识的稳健之道

    1. 什么是Raft算法?Raft 是英文”Reliable、Replicated、Redundant、And Fault-Tolerant”(“可靠、可复制、可冗余、可容错”)的首字母缩写。Raft算法是一种用于在分布式系统
  • 之家push系统迭代之路

    前言在这个信息爆炸的互联网时代,能够及时准确获取信息是当今社会要解决的关键问题之一。随着之家用户体量和内容规模的不断增大,传统的靠"主动拉"获取信息的方式已不能满足用
  • 三言两语说透柯里化和反柯里化

    JavaScript中的柯里化(Currying)和反柯里化(Uncurrying)是两种很有用的技术,可以帮助我们写出更加优雅、泛用的函数。本文将首先介绍柯里化和反柯里化的概念、实现原理和应用
  • 一文掌握 Golang 模糊测试(Fuzz Testing)

    模糊测试(Fuzz Testing)模糊测试(Fuzz Testing)是通过向目标系统提供非预期的输入并监视异常结果来发现软件漏洞的方法。可以用来发现应用程序、操作系统和网络协议等中的漏洞或
  • JVM优化:实战OutOfMemoryError异常

    一、Java堆溢出堆内存中主要存放对象、数组等,只要不断地创建这些对象,并且保证 GC Roots 到对象之间有可达路径来避免垃 圾收集回收机制清除这些对象,当这些对象所占空间超过
  • Temu起诉SHEIN,跨境电商战事升级

    来源 | 伯虎财经(bohuFN)作者 | 陈平安日前据外媒报道,拼多多旗下跨境电商平台Temu正对竞争对手SHEIN提起新诉讼,诉状称Shein“利用市场支配力量强迫服装厂商与之签订独家
  • 10天营收超1亿美元,《星铁》比《原神》差在哪?

    来源:伯虎财经作者:陈平安即便你没玩过《原神》,你一定听说过的它的大名。恨它的人把《原神》开服那天称作是中国游戏史上最黑暗的一天,有粉丝因为索尼在PS平台上线《原神》,怒而
Top