一直想写一个优秀开源npm包的分享与学习系列,长久写,持续写。但深知坚持不容易,且万事开头难。
今天刚好有些闲暇,在看一些webpack loader源码的时候,发现一个不错的包——Ajv,有了一种想学习和分享之的冲动。于是这个系列就有了开头。
https://ajv.js.org/,官网上有如下描述:
The fastest JSON-Schema validator for Node.js and browser. Supports draft-04/06/07.
标题实在不知道怎么写了,感觉怎么写都有点不太准确。简单描述下场景。
比如在hybrid开发时,使用JsBridge提供操作给js,如果提供的操作需要在web页面加载完立即调用(如埋点日志之类的),可能调用失败,即使是在window.onload里调用也未必能获取到,而系统又没有提供准确的监听事件来判断,所以通常的做法可能会是这样的:
1 | setTimeout(() => { |
延迟一小段时间再去执行,这种方法虽然可行,但总觉得很蛋疼。因为虽然JsBridge不会立即加载完成,但不同的系统下或由于缓存的情况下,加载时间各不相同。
当前前端的开发,已经基本离不开babel
的使用了。
而babel
下两员大将babel-polyfill
和transform-runtime
也经常出现在各位前端同胞的业务及库的开发中,让我们得以欢快地使用js的各种高级语法以及牛X的api。可虽说是如此常用,很多前端同胞甚至是前端老司机也常常搞不清二者的关系,以至陷入莫名的疑惑当中。
正在这个时候,一名不愿露面的网友,本着刨根问底的钻(qiu)研(nue)精神,一窥二者的本质,向大家聊一聊两者的关系。
上一篇文章学习了Flex布局的语法,今天来个经典的布局实例练练手。
圣杯布局由页头 (header),中间部分 (center),页脚 (footer),和三栏组成。中间的一栏是主要内容,左边和右边提供如广告、导航的链接。
大部分的 CSS 解决方案都是以下列为目标:
先来看一道题:
1 | setTimeout(function() { |
在编写javascript代码时,适当地使用缓存技术可以提高数据的重复使用率,以达到优化性能的目的。
最直接最暴力的做法是,直接创建一个没有原型的空对象,然后一股脑的往里塞数据:
1 | var _data = Object.create(null) // 这是我们实现的缓存对象(捂脸) |
在Vue1.x版本里有个vm.$get(expression)
方法,可以根据表达式获取vm上绑定的数据的值,并能进行一些简单的算术运算。在Vue2的版本里,这个方法被废弃了。但是在一些特殊场景下,我们可能还是需要这样一种方便获取对象属性值的方法。