Vue.js示例:文本编辑器。使用_.debounce()反抖动函数
Markdown编辑器
https://cn.vuejs.org/v2/examples/index.html
新知识:
Underscore.js库
用于弥补标准库,方便了JavaScript的编程。
通常的函数的运行:
- 1.请求,调用
- 2.执行
- 3.响应,返回
问题:
某些场景下的用户行为鼠标移动mousemove,窗口resize,scroll, 文本输入keyup/keydown,触发频率高。如果函数比较复杂,需要较多的执行时间,响应速度跟不上触发频率。导致出现延迟,假死,卡顿现象。
解决:
在客户端/服务器模式,不可能要求客户升级硬件系统。那么在处理函数无法即时响应高频调用的情况下,
只响应(返回)部分请求。这样总执行时间会减少,响应速度就会提高。
网络原文(文摘)很全面生动的一篇文章
_.debounce函数:「防反弹(去抖动)函数」
设定一个记时时段:
- 时段内,如果无新的请求,在时间结束后,响应结果。
- 如果有新的请求,从新开始记时。
源代码:
/**
* 空闲控制 返回函数连续调用时,空闲时间必须大于或等于 wait,func 才会执行
*
* @param {function} func 传入函数
* @param {number} wait 表示时间窗口的间隔
* @param {boolean} immediate 设置为ture时,调用触发于开始边界而不是结束边界
* @return {function} 返回客户调用函数
*/
_.debounce = function(func, wait, immediate) {
var timeout, args, context, timestamp, result; var later = function() {
// 据上一次触发时间间隔
var last = _.now() - timestamp; // 上次被包装函数被调用时间间隔last小于设定时间间隔wait
if (last < wait && last > 0) {
timeout = setTimeout(later, wait - last);
} else {
timeout = null;
// 如果设定为immediate===true,因为开始边界已经调用过了此处无需调用
if (!immediate) {
result = func.apply(context, args);
if (!timeout) context = args = null;
}
}
}; return function() {
context = this;
args = arguments;
timestamp = _.now();
var callNow = immediate && !timeout;
// 如果延时不存在,重新设定延时
if (!timeout) timeout = setTimeout(later, wait);
if (callNow) {
result = func.apply(context, args);
context = args = null;
} return result;
};
};
Vue.js示例:文本编辑器。使用_.debounce()反抖动函数的更多相关文章
- vue项目富文本编辑器vue-quill-editor之自定义图片上传
使用富文本编辑器的第一步肯定是先安装依赖 npm i vue-quill-editor 1.如果按照官网富文本编辑器中的图片上传是将图片转为base64格式的,如果需要上传图片到自己的服务器,需要修改 ...
- 一款纯HTML+CSS+JS富文本编辑器-handyeditor
官网:http://he.catfish-cms.com/ 修改版本(修改一些BUG和图片上传服务器 点击下载: handyeditor富文本编辑器.zip): 图片上传接口上传类型: Content ...
- qt_文本编辑器实现_附带详细注释和源码下载
源码下载: 链接: http://pan.baidu.com/s/1c21EVRy 密码: qub8 实现主要的功能有:新建,打开,保存,另存为,查找(查找的时候需要先将光标放到最下面位置才能查全,不 ...
- 在Vue中用富文本编辑器(可以ctrl+c粘贴)
我司需要做一个需求,就是使用富文本编辑器时,不要以上传附件的形式上传图片,而是以复制粘贴的形式上传图片. 在网上找了一下,有一个插件支持这个功能. WordPaster 安装方式如下: 直接使用Wor ...
- Vue tinymce富文本编辑器
tinymce 官方为 vue 项目提供了一个组件 tinymce-vue 一.安装tinymce-vue npm install @tinymce/tinymce-vue -S 二.下载tinymc ...
- Kindeditor JS 富文本编辑器图片上传指定路径
js //================== KindEditor.ready(function (K) { var hotelid = $("#hotelid").val(); ...
- Vue.js示例:GitHub提交(watch数据,created钩子,filters过滤); 网格组件(功能:1.检索,2排序);
GitHub提交 codePen: https://codepen.io/chentianwei411/pen/wEVPZo 注意:频繁看案例,可能会被限制. 重点: 表单输入绑定, 单选按钮的使 ...
- node.js富文本编辑器
摘要: 最近在搭建自己的博客,这一段时间可能没有时间来写博客了,但是有了好东西还是要分享给大家.博客网站必然要有编辑文章的编辑器,所以在网上查了些资料.大部分编辑器的后台是基于java.php.asp ...
- Vue.js示例:树型视图; 模式组件;
树型图 本示例是一个简单的树形视图实现,它展现了组件的递归使用. mycode pen:https://codepen.io/chentianwei411/pen/KGKQxE 重点:递归是如何形成的 ...
随机推荐
- Oracle常用函数——COALESCE
COALESCE 含义:COALESCE是一个函数, (expression_1, expression_2, ...,expression_n)依次参考各参数表达式,遇到非null值即停止并返回该值 ...
- 【做题】arc080_f-Prime Flip——转换、数论及匹配
题意:有一个无限序列,其中有\(n\)个位置上的数为\(1\),其余都是\(0\).你可以进行若干次操作,每次选取序列上的一个区间\([l,r)\),满足\(r-l\)为奇质数,将在这个区间上的数都异 ...
- How can I move a MySQL database from one server to another?
My favorite way is to pipe a sqldump command to a sql command. You can do all databases or a specifi ...
- oracle 之 插入超长字段并包含&字符的处理方法
oracle 在插入超长数据字符串时是默认转为varchar2类型,而这类型只有4000字节,即使通过oracle改变字符串类型为clob,也是在插入时默认转为varchar2类型. 处理方式:可以通 ...
- Ubuntu yindaoxiufu 引导修复(Boot Repair)
Ubuntu yindaoxiufu 引导修复(Boot Repair) from: http://blog.csdn.net/piaocoder/article/details/50589667 ...
- JOISC 2014 邮戳拉力赛(基础DP)
题意 https://loj.ac/problem/2878 思路 真的神仙题,想到就很好写,想不到就写不出来. 肯定只能一个一个邮戳按顺序分析.首先,将取一枚邮戳的路径分为四种: 上行 \(\rig ...
- 解决win7的outlook打不开的问题
outlook打不开,一直显示正在处理 解决方法: 1. 按住Ctrl,双击打开组件,会提示是否进入安全模式, 进入安全模式 2. 单击Outlook中的文件-选项-加载项- 左下角的“COM加载项“ ...
- jquery.form.js实现将form提交转为ajax方式提交的方法
本文实例讲述了jquery.form.js实现将form提交转为ajax方式提交的方法.分享给大家供大家参考.具体分析如下: 这个框架集合form提交.验证.上传的功能. 这个框架必须和jquery完 ...
- [小问题笔记(九)] SQL语句Not IN 效率低,用 NOT EXISTS试试
项目中遇到这么个情况: t1表 和 t2表 都是150w条数据,600M的样子,都不算大. 但是这样一句查询 ↓ select * from t1 where phone not in (selec ...
- 【译】第45节---EF6-索引属性
原文:http://www.entityframeworktutorial.net/entityframework6/index-attribute-in-code-first.aspx Entity ...