Show me the code
截流(throttle)
概念理解:固定函数执行的速率。
使用场景:DOM 事件绑定,短时间内触发多次绑定事件造成性能问题,如 onresize
,onscroll
等,使用节流函数可确保在指定时间内只触发一次。
简单实现:1
2
3
4
5
6
7
8
9
10
11
12
13
14let throttle = (func, wait) => {
let context, args;
let previous = 0;
return function () {
let now = +new Date();
context = this;
args = arguments;
if (now - previous > wait) {
func.apply(context, args);
previous = now;
}
};
};
防抖(debounce)
概念理解:强制一个函数在某个连续时间段内只执行一次,哪怕它本来会被调用多次。
使用场景:
- 表单远程搜索,键盘多次输入取最后一次输入值作为查询关键词。
- 下拉菜单的延时消失。
简单实现:1
2
3
4
5
6
7
8
9
10
11let debounce = (func, wait) => {
let timeout;
return function () {
let context = this;
let args = arguments;
clearTimeout(timeout);
timeout = setTimeout(function () {
func.apply(context, args)
}, wait);
};
};
工具和模块
推荐功能强大的HTTP
抓包调试工具:Fiddler。假如有这样一个场景,线上突然出现bug,而你正在休假、手头又没有源码,但又急需你参与问题排查,怎么办?Fiddler 便是你的救🔥利器。
- 官网:http://www.telerik.com/fiddler
- 插件(官方&第三方):http://www.telerik.com/fiddler/add-ons
- 快速上手:十分钟学会 Fiddler
- 视频教程:http://www.imooc.com/learn/37
- 系列文章
文章推荐
代码覆盖率工具 Istanbul 入门教程
使用 Mocha 进行单元测试时,还需要了解测试的覆盖程度,这个指标就叫做”代码覆盖率”(code coverage)。这篇文章非常全面地介绍了Istanbul,让你轻松上手。深入了解:nyc深入浅出浏览器渲染原理
对于 HTTP 协议和浏览器渲染原理都是理解容易但不好讲明白,那么为什么不采用 Node.js 来阐述呢?以实践的方式、最简单的方式来向你展示不好讲的东西,对于 Node.js 开发者和大前端开发来说都是非常实用的。-
- 了解vue的双向数据绑定原理以及核心代码模块
- 了解如何实现双向绑定
不用call和apply方法模拟实现ES5的bind方法
这个问题是对JavaScript基本功很好的一个检测,看JavaScript掌握的怎么样以及平时有没有去深入研究一些方法的实现,简而言之,就是有没有折腾精神。通过ES6 Generator函数实现异步操作
文章对 Generator函数实现异步进行了深入的讲解,最后使用 promise和 generator这样的模式实现异步操作,对于实现的过程进行深入细致的分析。你了解CSS设计模式吗?
简单来了解下CSS设计模式:- BEM全称(block、element、modifier)是Yandex 团队提出的CSS Class命名法
- OOCSS全称(Object Oriented CSS)由Nicole Sullivan提出的css理论
- SMACSS是Jonathan Snook的一个CSS框架
- Atomic Design,原子设计
- 我接触过的前端数据结构与算法
作者总结了前端常常碰到的算法,主要涉及递归、节流、数组去重、栈和堆、图像处理等。代码示例较为清晰,对于初学者还是很有帮助的,比较赞同作者的观点:算法的目的是用最小的时间和最小的空间解决问题。但是有时候不用太拘泥于一定要最优的答案,能够合适地解决问题就是好方法,而且对于不同的应用场景可能要采取不同的策略。
- JavaScript 中 4 种常见的内存泄露陷阱
虽然Javascript有内存自动回收机制,但这并不以为着js开发使完全不用关心内存管理。文中详细介绍了什么是内存泄漏和js中容易引起内存泄漏的点,并提供了使用Chrome分析内存的方法。
招聘
TalkingData DTU 可视化团队招聘:
- 资深前端工程师
- 前端实习生
简历投递:1
2const email = 'xiang.wang#tendcloud.com'.replace('#', '@');
console.log(email);