前端的“Race Condition”

2021-03-11
阅读 7 分钟
3.2k
theme: qklhk-chocolate关于 Race Condition关于 Race Condition,维基上有具体介绍(英文版的更详细):举个例子,大概就是两个线程去修改全局资源,理想的情况:但在缺少同步锁的情况下,实际的情况可能是这样:如何去解决:大意是大部分语言都提供了资源锁/同步锁这种东西,根据不同的语言选择不同的方法去处理这个问题...
封面图

用个 EventBus 还得找第三方库?直接使用原生实现,B格瞬间提升一级

2020-09-13
阅读 2 分钟
3.9k
​Vue 3 大改了事件绑定机制,事件绑定变成了简单的属性传递,$on、$off 也没了,Vue 对象完全失去了 EventBus 的功能。尤大最后安利了一个第三方库,用个 EventBus 发个事件还要第三方库?这也太 low 了吧。

神奇的 JavaScript 之 bind.bind.bind

2020-08-23
阅读 2 分钟
2.4k
事情起源于一段JS代码: {代码...} 源代码出自 echarts 的底层依赖 zrender,为了优化我的 offscreen-echarts 库我在读 echarts 的源码,于是就发现了这段代码。干嘛要自己重新实现一遍 bind,难道还有浏览器不支持?于是去查了一下 MDN:好吧,果然是我大 IE8。想到 echarts 里大量的 VML 代码,我大百度还是对 IE8 用...

JavaScript:关于数组的四道面试题

2019-12-21
阅读 3 分钟
5.3k
已知后端返回一个对象数组,格式类似这样: {代码...} 按要求写代码: 按照 name 属性降序排序(字母顺序从大到小) 去除 id 属性相同的元素(如出现重复,后出现的覆盖先出现的,不要求保留原始顺序) 过滤出所有的95后(birth >= 1995年1月1日) 如何做前端分页 由于公司是大数据处理业务,数组相关操作使用还是挺...

一个可以用来截图的React组件

2019-10-22
阅读 4 分钟
5.3k
起初只是和同事在去吃路的路上, 互相吹*, 扯一些有的没得, 然后说到了马赛克, 探讨了一下马赛克的实现, 觉得还蛮有意思的, 感觉可以实现一波, 后面我觉得只实现马赛克功能又太单调, 就像做一个类似微信截图的功能.

生成器与迭代器

2019-04-22
阅读 4 分钟
1.9k
range 就是一个生成器函数,它自身是函数可以调用(typeof range === 'function' // true),但又与普通函数不同,生成器函数(GeneratorFunction)永远返回一个生成器(Generator)

编写自适应高度的 textarea

2019-02-25
阅读 3 分钟
5.4k
有些初学者可能会想:自适应高度不就是 height: auto 么?可是你想一下,一个 textarea 没有手工给它指定过样式,不应该就默认是 height: auto 么?但是它还是有自己的初始高度,并没有像一个 div 那样高度为 0。

二进制状态码

2019-02-01
阅读 1 分钟
4.1k
我们知道计算机中数据都是用二进制数存储。二进制数是一系列0和1的组合,长整型64位,最短的字节型也有8位。其中每一位0和1都可以看做一种状态的开和关,所以就有了这样的一种状态码存储方式:把同一对象的多种状态按位组合到一个整数中。

庆祝新年?画一颗圣诞树?还是...

2019-01-21
阅读 6 分钟
2.8k
圣诞节,元旦,看大家(情侣)在朋友圈里发各种庆祝的或者祝福的话语,甚是感动,然后悄悄拉黑了。作为单身狗,我们也有自己庆祝节日的方式,今天我们就来实现一些祝福的效果。

Service worker (@nuxtjs/workbox) 采坑记

2018-09-20
阅读 3 分钟
7.9k
PWA(Progressive Web App)是前端的大趋势,它能极大的加快前端页面的加载速度,得到近乎原生 app 的展示效果(其实难说)。PWA 其实是多种前端技术的组合,其中最重要的一个技术就是 service worker。

Angularjs 1 深度解析:组件化编程

2018-05-13
阅读 6 分钟
6.1k
前端组件化是前端开发模式中一个不可逆转的趋势,三大主要前端框架 angular 2 react vue 都不约而同的把组件化编程作为自己的一大卖点,angular 1 作为一个历史相对悠久的框架,在私生子 angular 2 的推动下,终于也搭上了组件化编程的末班车,公司里那些老项目终于也有机会体验组件化编程的滋味。

微信小游戏的前端攻城狮玩法

2018-05-13
阅读 5 分钟
5.4k
别人的截图都是25分左右,还有30分以上的。自己玩了两把,20分都没上,于是只能悻悻的闷声当没看见。但如果你是一名前端攻城狮,并且还有一台电脑在手边,那就大不一样了。因为:前端攻城狮有前端攻城狮的玩法。

如何检测浏览器是否支持某个伪类

2018-05-10
阅读 1 分钟
2.6k
原理:如果 CSS 解析器不认识某个伪类,CSS 会认为其整条规则都不合法,并将其忽略。style.sheet.cssRules 只会存放解析成功的规则,所以如果浏览器不认识这个伪类,就不会把这条规则存入 cssRules

给你的网页游戏添加游戏手柄支持

2018-04-23
阅读 2 分钟
8.5k
HTML5 中获取游戏手柄的 API 是 navigator.getGamepads()。navigator.getGamepads 会返回一个可能包含 null 的数组。标准规定,对于同一个游戏手柄会在同一个下标中返回,不同的手柄必须不能使用其他手柄用过的下标——即便前者已经中断连接。如果没有检测到任何游戏手柄,实测在 Firefox 中会返回一个空数组,而在 Chrome...

redux中的异步

2018-03-29
阅读 5 分钟
4.6k
无论是前端开发还是后端的nodejs,异步基本上总是核心。我所在的公司是做大数据处理的,经常需要从后台拿取大量的数据,导致整个请求会比较耗时。如下一个场景:我选择A应用,点击搜索,这时候我马上去选择应用B,点击搜索,可能的情况是,A的数据量比B的数据量大,导致A的结果是你最后获取到的,这是就会出现这样的问题...

使用正则表达式找出所有不包含某字符串的行

2018-03-05
阅读 2 分钟
18.8k
通过 /\.(jpg|png|svg|gif|webp)$/ 判断图片文件,如果符合条件则将其储存至 images 目录下。然而这样做会把类似 fontawesome-webfont.svg 和 glyphicons-halflings-regular.svg 这样的字体文件也匹配进去

可拖动table表头的实现

2018-02-09
阅读 6 分钟
8.1k
自己做的项目碰到这样一个需求,就是对所有的表格添加表头可以拖动的效果。我一想,这不简单,分分钟钟给你做出来。拿起我的电脑,啪啪啪就敲起来了。一定是哪里不对,以我的聪明才智,结果应该不是这样的,然后净下心来,好好理了下思路后,总算是做出来了。至于结果嘛,我肯定是做出来的,像下面这种:

巧用 `Promise.all` 实现函数:有一个 Promise 被 resolve 整个函数就被 resolve

2018-02-04
阅读 2 分钟
3.8k
对于这样的问题,一个比较简单的方案是依次调用各个接口,如果前一个接口未成功返回再调用第二个接口。这样做的好处是对于服务器资源消耗比较小,但对于用户来说效率非常低下。设想调用第一个接口经过 20 秒超时出错才调用第二个接口,如果第二个接口又是 20 秒超时,用户就已经等待了 40 秒。用户的等待时间按线性增长...

scrollIntoView 与平滑滚动

2018-01-15
阅读 2 分钟
18.4k
经常有这样的需求:点击一个链接(内链)跳转到当前页面中间某个部分。对于这样的需求,很容易想到使用锚点实现。但有一个问题:滚动一步到位,太生硬了。

给初学者:JavaScript 的常见注意点

2018-01-06
阅读 5 分钟
5.1k
上篇说了一些 JS 中数组操作的常见误区,这次来总结一下初学者常见的其他易错点。 写立即执行函数时前置 void 立即执行函数(IIFE)在 JS 非常常用,作用就是构造一个函数级的变量作用域。常见的写法如下: {代码...} 这样写可能会被 JS 理解成为一个函数调用 {代码...} 从今天改变习惯,这样写: {代码...} 有些人喜欢...

推荐几款好用的Chrome插件

2018-01-01
阅读 2 分钟
5.2k
‘工欲善其事,必先利其器’。优秀的开发者不仅体现在其在技术方面的精通,还体现在其对各种开发工具的充分了解与使用,这会让其开发效率事半功倍。作为一个前端开发者,平时主要是跟浏览器打交道,Chrome浏览器不仅性能优异,而且包含大量的扩展程序,能够让我们根据自身需求扩展浏览器功能,因而受到广大开发者的青睐。...

使用 Web Worker 实现简单的非阻塞异步

2017-12-24
阅读 3 分钟
9.1k
之前的文章提到了 JavaScript 中的异步编程,然而无论早就存在的 setTimeout 还是 ES6 中的 Promise,它们都是 阻塞 异步,执行函数的时候,会阻塞线程。setTimeout 只会把一个函数延后执行,但还是在主线程中执行,执行函数的时候会阻塞线程。换句话说,setTimeout 只实现了过程间并发(concurrent)而未实现并行(para...

给初学者:JavaScript 中数组操作注意点

2017-12-17
阅读 3 分钟
7.2k
这是 JavaScript 初学者常见的误区。for_in 用于遍历对象中包括原型链上的所有可枚举的(enumerable)的 key,本来不是为遍历数组而存在。

用两种不同的姿势来实现拖动排序

2017-12-08
阅读 4 分钟
15.1k
说来惭愧,上图不是我写的,不然我还能吹一波,没有看代码,但闭着眼就能猜到用的是html5的drag系列的api,相关的API可以看MDN上的介绍,我把文档拷一下做个介绍吧==

echarts 入门心得

2017-12-07
阅读 5 分钟
6.5k
公司项目中负责的主要部分是图表展示,初次大规模使用echarts,边写边摸索,以下为一个阶段性的总结,当然ECharts中还有一些好玩的实用的(例如自定义图表)还没涉及到,以后慢慢补充。这篇是总结常见图表:柱状图,折线图,饼图,多Y轴图,气泡图,地图,日历图,折线标注图······

巧用 Object.assign 合并小对象

2017-12-03
阅读 2 分钟
3.2k
之前遇到过这样一个问题,把下面一段服务器返回的文本 {代码...} 转换为对象的形式。 这是一整段字符串,当然首先要按行分割为多段。设原始字符串为 str,则 {代码...} 就获得了一个字符串数组。每个字符串头部都有空格,需要去除空格。 {代码...} key 和 value 是放在同一段字符串里的,需要拆分开 {代码...} 这样就得...

正则表达式之字符匹配

2017-11-14
阅读 4 分钟
5.4k
sharplook作为专业的日志采集分析系统,涉及的技术点,从后到前着实不少,内容也较为复杂。正则作为日志解析的手段,起着举足轻重的作用,在此小生将晦涩难懂的内容,拆解出来以便学习之用。

所见即所得,实现一个有趣的动画效果

2017-10-16
阅读 4 分钟
2.6k
每次刷新的头像和‘You’的位置都是不同的,说实话,我觉得蛮有意思的,于是我自己尝试去实现了一下。下面我会从我的角度去分析实现这样的效果,因为我不知道FED他们是怎么实现的

react + koa2实现的论坛

2017-10-16
阅读 5 分钟
7.7k
线上地址:点击查看 (访问会有点慢,至于原因,下面会说明)前端(主要):reactv15.6.1、react routerv4.2.0、reduxv3.7.2、antdv2.13.0、axiosv0.16.2和处理样式的sass;后端(主要):nodev8.3.0、koa2v2.3.0、koa-routerv7.2.1;数据库:mongodb;后端是部署在heroku,线上数据库用的mLab,具体的流程不细说,总体来...

SPA那点事

2017-09-23
阅读 9 分钟
8.4k
前端猿一天不学习就没饭吃了,后端猿三天不学习仍旧有白米饭摆于桌前。IT行业的快速发展一直在推动着前端技术栈在不断地更新换代,前端的发展成了互联网时代的一个缩影。而单页面应用的发展给前端猿分了一杯羹。