zoukankan      html  css  js  c++  java
  • 短视频直播源码开发,防抖和节流的区别和实用场景

    在短视频直播源码开发时,要做好防抖和节流,用以提高用户的使用体验。
    防抖:是指短视频直播源码中单位时间内事件触发会被重置,避免事件被误伤触发多次。代码实现重在清零 clearTimeout。触发高频事件,n秒内事件只会执行一次,如果n秒内再次触发,则会重新计算时间
    短视频直播源码防抖的实用场景:
    登录发短信按钮,避免用户多次点击发起多次请求
    调整浏览器大小 resize 次数过于频繁,造成计算过多,此时需要一次到位,就用到了防抖
    文本编辑器实时保存,当无任何更改操作一秒后进行保存
    联想输入法,每次输入之后都有联想词弹出,这个控制联想词的方法就不可能是输入框内容一改变就触发的,他一定是当你结束输入一段时间之后才会触发。
    举例:

    <!DOCTYPE html>
    <html>
        <head>
            <meta charset="utf-8">
            <title></title>
            <style type="text/css">
                *{
                    margin: 0;
                    padding: 0;
                }
                .div1{
                     200px;
                    height: 200px;
                    text-align: center;
                    line-height: 200px;
                    background-color: palegoldenrod;
                }
            </style>
        </head>
        <body>
            <div class="div1"></div>
        </body>
    </html>
    <script type="text/javascript">
        // 防抖函数
        function debounce (f, wait) {
          let timer;  // 创建一个标记用来存放定时器的返回值
    
          return (...args) => {
            // 每当用户输入的时候把前一个 setTimeout clear 掉
            clearTimeout(timer)
            // 然后又创建一个新的 setTimeout, 这样就能保证interval 间隔内如果时间持续触发,就不会执行 fn 函数
            timer = setTimeout(() => {
              f(...args)
            }, wait)
          }
        }
        let count = 0;
        let divEl = document.getElementsByClassName("div1")[0];
        function moveFn(){
            divEl.innerHTML = count++;
        }
        // divEl.addEventListener("click", moveFn,false)
        divEl.addEventListener("click", debounce(moveFn, 1000));
        
    </script>

    节流:顾名思义,控制水的流量。控制短视频直播源码中事件发生的频率,如控制为1s发生一次,甚至1分钟发生一次。与服务端(server)及网关(gateway)控制的限流 (Rate Limit) 类似。控制流量,单位时间内事件只能触发一次,如果服务器端的限流即 Rate Limit。代码实现重在开锁关锁timer=timeout; timer=null
    短视频直播源码节流的实用场景:
    scroll 事件,每隔一秒计算一次位置信息等
    浏览器播放事件,每隔一秒计算一次进度信息等
    input 框实时搜索并发送请求展示下拉列表,每隔一秒发送一次请求 (也可做防抖)
    举例:

    <!DOCTYPE html>
    <html>
        <head>
            <meta charset="utf-8">
            <title></title>
            <style type="text/css">
                *{
                    margin: 0;
                    padding: 0;
                }
                .div1{
                     200px;
                    height: 200px;
                    text-align: center;
                    line-height: 200px;
                    background-color: palegoldenrod;
                }
            </style>
        </head>
        <body>
            <button class="addBtn">点击count++</button>
            <span class="count">0</span>
        </body>
    </html>
    <script src="/js/jquery.min.js" type="text/javascript" charset="utf-8"></script>
    <script type="text/javascript">
    //节流函数
        function throttle (f, wait) {
          let timer
          return (...args) => {
            if (timer) { return }
            timer = setTimeout(() => {
              f(...args)
              timer = null
            }, wait)
          }
        }
        function addCount(num){
            let initCount = parseInt($(".count").html());
            initCount = initCount+num;
            $(".count").html(initCount);
        }
        /* jq的方式来使用节流代码 */
        $(".addBtn").click(throttle(()=>{addCount(8)}, 2000)) 
        
        
    </script>

    函数节流不管短视频直播源码事件触发有多频繁,都会保证在规定时间内一定会执行一次真正的事件处理函数,而函数防抖只是在短视频直播源码最后一次事件后才触发一次函数。 比如在页面的无限加载场景下,我们需要用户在滚动页面时,每隔一段时间发一次 Ajax 请求,而不是在用户停下滚动页面操作时才去请求数据。这样的场景,就适合用节流技术来实现。

    本文转载自网络,转载仅为分享干货知识,如有侵权欢迎联系云豹科技进行删除处理
    原文链接:https://www.jianshu.com/p/47c37af00fa4

  • 相关阅读:
    汤姆大叔 深入理解JavaScript系列(20):《你真懂JavaScript吗?》答案详解 后六道题答案
    canvas绘制自定义的曲线,以椭圆为例,通俗易懂,童叟无欺
    nodejs 平台的 webscoket 的实现
    javascript 控制台输出 图片 console.log 真强大 真佩服你们的创造力
    ichartjs 使用BUG,assign_scale:true 解决
    timequest静态时序分析学习笔记之工具使用
    timequest静态时序分析学习笔记之命令约束
    timequest静态时序分析学习笔记之基本概念
    浅谈“意识”的物质性
    构建异步处理网络服务器
  • 原文地址:https://www.cnblogs.com/yunbao/p/14954819.html
Copyright © 2011-2022 走看看