前几天被新浪的一位程序员刷屏了,婚礼现场还要跑去修 bug,这事得赖鹿晗。看到之后想起我的婚礼,那是一年前也是在国庆。距婚礼还有一个月的时候,心想这可是一辈子的大事,在众多亲朋好友面前搞点比较 cool 的事情,这样会不会让大家印象深刻点。 怎样会比较 cool 希望你看到这个标题不要以为是让基友拉着我私奔😱。让现场所有宾客都能参与进来,对,这应该比较 cool。根据以往参加别人婚礼的经验,流程大概是:主持人引导新郎新娘进场,新郎新娘立下海誓山盟,新郎新娘双方父母登台,然后全场一起举杯祝福新人,最后一直吃到婚礼结束。宾客除了那一次举杯,全程都是路人,参与感非常低。有的婚礼会有些互动,这完全看主持人的个人风格了。 要调动现场,站在台上撒红包这种土豪的做法显然不适合木讷的我。眼下几乎人人都有智能机,人人都有微信,…

HTML5中 Web Storage 的出现,主要是为了弥补使用 Cookie 作为本地存储的不足。Cookie 存储的数据量非常小,而且数据会自动携带到请求头里,但服务器端可能并不关心这些数据,所以会造成带宽的浪费。 Web Storage 提供了两个存储对象:localStorage 和 sessionStorage。 sessionStorage 存储的数据仅在本次会话有用,会话结束后会自动失效,而且数据仅在当前窗口有效,同一源下新窗口也访问不到其他窗口基于 sessionStorage 存储的数据。也是由于这些特性,导致 sessionStorage 的使用场景会比较少。 localStorage 可以永久存储,而且同源下数据多窗口也能共享,。看起来很美好,但 localStorage…

匿名函数最早是LISP语言引入,后面发展为不仅是函数式语言所特有,在解释型语言和编译型语言中也越来越多地看到匿名函数的身影,它或许有个更潮的名字叫 lambda 表达式。 闭包多是用匿名函数实现,在匿名函数中引用了外部变量,那这个匿名函数就形成了闭包。由于闭包和匿名函数之间有着千丝万缕的关系,所以经常会把两者搞混淆。其实在 Js 中匿名函数、闭包、自执行函数、回调函数、箭头函数,这些概念似乎相同,却又不同,请读者朋友自行了解。 匿名函数拥有可动态编程的执行过程。巧妙使用可以让你的代码简约而不失优雅,灵活而不失约束。好了,正式切入本文的正题,巧用匿名函数重构代码。按照重构的惯例,先指出代码中的坏味(Bad Smell): 定义冗长的重复配置 条件多变的集合过滤 说一不二的方法调用 定义冗长的重复配置…

这篇文章作为之前两篇文章的延续,来的稍微有点迟。 如何优雅地写js异步代码 如何优雅地写js异步代码(2) 时隔一年,以上两篇文章内容或有过时,请读者自行斟酌。好下面正式开始本文内容。 循环的方式 假设我们有个数组,包含 5 个数字:let times = [100, 150, 200, 250, 300]; 还有一个异步的睡觉方法:sleep(time, cb)。 import Promise from 'bluebird'; // 当没有 cb 时,返回一个 Promise 对象…

一般在设计通知中心时,都会在入口处显示一个未读消息数,这样不仅可以醒目地告知用户有未读消息,还能让用户更容易从众多小图标中区分出通知中心的入口。比如 ucloud 控制台的顶栏: 我们网站的通知中心也一样,在入口同样加上了未读消息数的显示。 上线后平稳运行,以为可以就这样一直美下去。程序只要有人用,总会有出 bug 的那一天,最近高峰期经常会出现来自通知表的慢查询语句,仔细一查,原来就是统计未读消息数的语句,而且都是来自几个大用户。我们通知里分了多个组,每个组都有自己的一个未读数,sql 语句差不多是下面这样: SELECT groupID, count(0) unreadCount FROM notification WHERE userID=xxx AND hasRead=…