惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

The Last Watchdog
The Last Watchdog
C
Cyber Attacks, Cyber Crime and Cyber Security
L
LINUX DO - 热门话题
G
GRAHAM CLULEY
S
Schneier on Security
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
S
SegmentFault 最新的问题
IT之家
IT之家
阮一峰的网络日志
阮一峰的网络日志
Recorded Future
Recorded Future
I
Intezer
云风的 BLOG
云风的 BLOG
博客园 - Franky
月光博客
月光博客
大猫的无限游戏
大猫的无限游戏
T
Tenable Blog
The Hacker News
The Hacker News
T
The Blog of Author Tim Ferriss
Attack and Defense Labs
Attack and Defense Labs
D
DataBreaches.Net
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
N
News and Events Feed by Topic
有赞技术团队
有赞技术团队
Exploit-DB.com RSS Feed
Exploit-DB.com RSS Feed
N
News and Events Feed by Topic
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
S
Secure Thoughts
The Register - Security
The Register - Security
B
Blog
Security Archives - TechRepublic
Security Archives - TechRepublic
The Cloudflare Blog
Webroot Blog
Webroot Blog
W
WeLiveSecurity
H
Heimdal Security Blog
博客园 - 三生石上(FineUI控件)
V
Vulnerabilities – Threatpost
G
Google Developers Blog
O
OpenAI News
V
V2EX
罗磊的独立博客
博客园_首页
N
News | PayPal Newsroom
cs.CL updates on arXiv.org
cs.CL updates on arXiv.org
CTFtime.org: upcoming CTF events
CTFtime.org: upcoming CTF events
TaoSecurity Blog
TaoSecurity Blog
Cloudbric
Cloudbric
H
Hacker News: Front Page
博客园 - 叶小钗
T
Tor Project blog
AI
AI

博客园 - 沐子馨

Agent Loop:从对话式 AI 到自主智能体的范式跃迁 解锁图数据建模的奥秘 基于 Neo4j 与 Milvus 的图RAG系统搭建指南 解决复杂推理难题:KG-RAG 在大模型中的应用 RAG 评估常用工具简介 RAG系统效果不好?一文看懂如何进行系统评估 写出让 AI “秒懂”的技能Skill 深入理解 RAG 中的格式化生成与函数调用 解锁 RAG 系统中的高级检索与重排序策略 掌握查询重构与智能路由的艺术 告别黑盒:手把手实现一个可解释、可调试的 Text2SQL 代理系统 告别简单向量搜索:RAG 中的高级查询构建与优化策略 深入理解 RAG 中的混合搜索策略 告别基础检索:掌握 RAG 中的句子窗口与递归路由策略 构建多模态检索系统:Milvus 部署、Schema 设计与混合检索实践 向量数据库原理与实战:从核心机制到 FAISS 应用 多模态向量嵌入:从文本到图像的语义统一与 RAG 应用 构建高效 RAG 的基石:深度解析 Embedding 模型原理与优化 All-in-RAG:解锁大模型“开卷考试”的终极能力 AI Agent 是如何思考的?一文读懂推理与决策引擎 终端革命:AI Agent 正在重新定义命令行 给企业装上“AI 大脑”:AgentSpace 如何从“手动检索”跨越到“智能决策”? Agentic 框架快速概览 AI 智能体交互如何带领它走出对话框,从屏幕像素迈向真实物理世界 高级提示词技巧如何带领大模型走出“一本正经胡说八道”的误区? 当 AI 学会“开疆拓土”:探索与发现模式如何从源头打破静态知识的桎梏,在陌生领域催生新洞见? 拒绝 AI “手忙脚乱”:优先级模式如何为智能体打造毫秒级的“任务调度官”? 构建生产级可信 Agent:评估与监控中的自动化审计与闭环优化机制 当 AI 学会“三思后言”:安全护栏如何从源头掐灭偏见、幻觉与恶意攻击? 拒绝“张口就来”:推理技术如何让 AI 像人类一样拆解复杂难题? 当家方知柴米贵:资源感知优化如何让 AI 智能体告别“算力浪费”? 开启多智能体互联时代:A2A 协议与 AI 协作网络的底层逻辑 为智能体装上“实时百科全书”:RAG 如何打破 AI 的知识边界? 构建负责任的AI:人类监督、干预与反馈闭环机制 当工具失效、网络中断:AI智能体的应急与自修复指南 赋予AI“北极星”:如何让智能体自主设定并追踪目标 打破“M×N”集成魔咒:MCP如何重塑AI应用架构 赋予模型“生命力”:大语言模型如何通过学习实现持续适应 赋予模型“长期记忆”:大语言模型的记忆管理机制 AI的“社会性”:深入理解多智能体协作机制 理解AI智能体的规划机制 理解大模型的工具使用 智能体的元认知:反思模式与自我优化机制 智能体并行化模式:提升复杂工作流性能的关键技术 超越线性执行:使用LLM实现智能体路由模式 解构复杂任务:深入理解提示词链(Prompt Chaining) 别再被 AI 术语唬住了!一文理清你需要了解的所有概念 不止是多写几句:谷歌如何用69页白皮书重塑提示工程 [转]长PDF文档的总结与评估策略 Context 工程:如何把正确的上下文喂给 AI 前端如何写出优秀的 AI Agent Skills mac安装python后command not found: pip keep-alive 原理剖析 如何优雅地在 React 中使用TypeScript,看这一篇就够了! react useContext React Context 详细介绍(状态共享、数据传递) 以用户为中心的性能指标【译】 vue-router打开新窗口 propmise: allSettled()与all()的区别 使用 new Date() 在chrome、安卓和 IOS 中表现不同
element下拉框远程搜索debounce防抖控制
沐子馨 · 2022-08-15 · via 博客园 - 沐子馨

一、需求:下拉框支持远程搜索,根据用户输入字符,调接口获取数据渲染到下拉列表上,供用户选择。

二、为什么要做 防抖控制?在做远程搜索时,如果每输入1个字就调用1次接口,就会频繁地掉接口请求数据,假设我们的查询是"12345",不考虑用户输入错误的情况,至少会请求5次。很明显这样频繁地查询数据库是不合理地,而且当数据过多的时候这里就会卡顿,造成性能浪费,因此需要防抖,即 设置多少毫秒内不管用户输入多少个字符,最终只根据最后一次输入完毕后输入框的字符去后台请求匹配数据。

  debounce防抖也属于前端性能优化地一部分。

三、使用

 1、安装loadsh依赖包(附上lodash的官方文档

npm install –save lodash

   2、在vue文件种引入(局部)

 3、实现

<el-select
    v-model="value"
    placeholder="请选择"
    @change="selectChange"
    filterable
    remote
    clearable
    :remote-method="remoteMethod"
    :loading="remoteLoading"
    no-match-text="没有匹配到数据"
>
    <el-option
        v-for="item in options"
        :key="item.value"
        :label="item.label"
        :value="item.value"
     >
     </el-option>
</el-select>

//data层
export default {
    data() {
        return {
            remoteLoading:false,
            keyWord:"",     //远程搜索条件
            options:[],     //下拉列表展示数据
            value: '',      //select绑定所选值
       allOptions:[],  //全部数据
        }
    },
    computed: {
        queryParams() {
            return {
                pageSize:-1,            //-1,查询所有数据
                pageNumber:1,
                schoolKey:this.keyWord
            }
        },
    },
    methods:{
        remoteMethod(searchKey) {        //输入值发生变化时的回调函数
             if(searchKey !== "") {
                 this.remoteLoading = true
                 this.keyWord=searchKey
                 this.getRemote()
             } else{
           this.options = this.allOptions
         }
        },
        getRemote: _.debounce(function(){
            //防抖,这里设置300毫秒请求一次后台
            this.getList(this.queryParams)
        },300),
        async getList(params) {
            //请求接口
            this.remoteLoading = false
            const [err,res] = await getInterfaceList(params)
            const data = res.datas || []
            this.options= data.map(item => {
                return {
                    value:item.value,
                    label:item.label
                }
             })
        },
    }
}

注意,这里的防抖不是针对remoteMethod() 方法,而是remoteMethod() 方法里面调用的那个远程搜索方法(getRemote方法)。

 4、结果:用户每次输入一个字符都会触发remoteMethod() 方法,remoteMethod() 会调用getRemote() 方法,这里通过对getRemote()设置防抖,达到不管用户输入数据怎么变化 300ms内只去后台请求一次。

引申:

  • 节流:将一个函数的调用频率限制在一定阈值内,例如1s内一个函数不能被调用两次。(throttle)
  • 防抖:当调用函数n秒后,才会执行该动作,若在这n秒内又调用该函数则将取消前一次并重新计算执行时间,比节流的流量控制效果更佳明显(debounce)。举个简单的例子,我们要根据用户输入做suggest,每当用户按下键盘的时候都可以取消前一次,并且只关心最后一次输入的时间就行了。

  两者都是函数调用频率的控制器。

 1、原理:

 函数节流的核心是,让一个函数不要执行得太频繁,减少一些过快的调用来节流。也就是在一段固定的时间内只触发一次回调函数,即便在这段时间内某个事件多次被触发也只触发回调一次。

 防抖的原理是在事件被触发n秒后再执行回调,如果在这n秒内又被触发,则重新计时。也就是说事件来了,先setTimeout定个时,n秒后再去触发回调函数。它和节流的不同在于如果某段时间内事件以间隔小于n秒的频率执行,那么这段时间回调只会触发一次。节流则是按照200ms或者300ms定时触发,而不仅仅是一次。

 2、应用场景:

 防抖的应用场景是连续的事件响应我们只触发一次回调,比如下面的场景:

  • resize/scroll 触发统计事件
  • 文本输入验证,不用用户输一个文字调用一次ajax请求,随着用户的输入验证一次就可以

 节流是个很公平的函数,隔一段时间就来触发回调,比如下面的场景:

  • DOM 元素的拖拽功能实现(mousemove)
  • 计算鼠标移动的距离(mousemove)
  • 搜索联想(keyup)

 3、为什么这些适合节流而不是防抖呢?

 我们想想哈,按照防抖的概念如果n秒内用户连续不断触发事件,则防抖会在用户结束操作结束后触发回调。 那对于拖动来说,我拖了半天没啥反应,一松手等n秒,啪。元素蹦过来了,这还是拖动吗?这是跳动吧,2333;

原文链接:https://www.cnblogs.com/morango/p/15193035.html