美文网首页
JavaScript的函数节流

JavaScript的函数节流

作者: 祈念念念 | 来源:发表于2019-01-03 13:44 被阅读0次

title: JavaScript的函数节流
date: 2018-10-30 21:37:46
tags: [JavaScript]
categories: JavaScript


前言

我在我的网易云音乐项目中,因搜索歌曲的需求,需要监听输入框的oninput事件。
但后来发现我的数据库接受请求次数有些异常,原来是用户每一次输入过程中都会向后端发送请求,非常浪费性能
之后搜索并了解到js的函数节流,有效解决了这一问题,便有了这篇博客。

函数节流的原理

函数节流的原理就是定时器
当我触发一个时间时,先setTimout让这个事件延迟一会再执行,如果在这个时间间隔内又触发了事件,那我们就clear掉原来的定时器,再setTimeout一个新的定时器延迟一会执行,就是这样。

代码实现

定义一个节流函数:

function throttle(fn, delay){
    var timer = null;
    return function(){
        var context = this, args = arguments;
        clearTimeout(timer);
        timer = setTimeout(function(){
            fn.apply(context, args);
        }, delay);
    };
};

调用:

this.view.$el.on('input', '#search',(e)=>{
    event(e)
})    
let event = this.throttle((e)=>{
    let val = $(e.currentTarget).val()
    //...发送AJAX请求
}, 800, 1500)   

理论上这样写很完美了,但仍存在一种问题:如果输入框一直在输入文字,文字就一直不会显示出来。我们需要做一个处理:使得文字在超过某个时间间隔后要输出一次。
优化代码:

function throttle(fn, delay, mustRunDelay){
    var timer = null;
    var t_start;
    return function(){
        var context = this, args = arguments, t_curr = +new Date();
        clearTimeout(timer);
        if(!t_start){
            t_start = t_curr;
        }
        if(t_curr - t_start >= mustRunDelay){
            fn.apply(context, args);
            t_start = t_curr;
        }
        else {
            timer = setTimeout(function(){
                fn.apply(context, args);
            }, delay);
        }
    };
 };

注:本文参考资料

相关文章

  • 函数节流(throttle)与函数去抖(debounce)

    JavaScript-性能优化,函数节流(throttle)与函数去抖(debounce)JS魔法堂:函数节流(t...

  • Javascript 基础

    1、函数防抖和函数节流 【《javascript高级程序设计》里,函数节流是这里讲的函数防抖。】函数防抖: 在事件...

  • 函数防抖与函数节流

    debounce -- 函数防抖,throttle -- 函数节流都是在JavaScript中可以限制函数发生频率...

  • 函数的节流与防抖

    概念 函数的节流与防抖是优化JavaScript的高频率执行的一种手段。 节流 函数的节流应用于一些函数高频率的场...

  • 函数的节流与防抖

    概念函数的节流与防抖是优化JavaScript的高频率执行的一种手段。 节流函数的节流应用于一些函数高频率的场景,...

  • 函数防抖和函数节流

    函数防抖和函数节流 函数防抖和函数节流:是优化高频率执行的JavaScript代码的一种手段。常用于JavaScr...

  • 彻底弄懂函数防抖和函数节流

    函数防抖和节流 函数防抖和函数节流:是优化高频率执行的JavaScript代码的一种手段。常用于JavaScrip...

  • 节流函数的应用场景

    vue实现输入框的模糊查询(节流函数的应用场景) 上一篇讲到了javascript的节流函数和防抖函数,那么我们在...

  • 封装推拽对象

    一、HTML 二、javascript 缺点:mousemove触发的事件函数move()应该节流

  • javaScript 函数节流

    今天给大家介绍一下js函数节流吧! 什么是javascript函数节流?从其字面意思可以大概猜到是一种为提升函数调...

网友评论

      本文标题:JavaScript的函数节流

      本文链接:https://www.haomeiwen.com/subject/voatrqtx.html