numpy 一维数组与 python 列表类似,略。本文主要讨论多维数组的处理。
产品中的基础删除操作
最近的产品设计中,删除操作已经越来越难用了。根据自身的使用感受,列表内容的删除一定要支持“单项删除”与“批量删除”才算是好的体验。
客户端产品重要的事
本人所经历的产品主要面向移动 C 端用户,同时产品对外提供各种应用级别的开放服务。
本文只是个人的经验记录,以下所有内容——非参考,非规范,非权威。
最最重要的方面
对 C/S 形式的产品来说,最最最最最重要的事,就是
版本升级机制!
最初我们都没有任何经验,因此一开始谁都没有在乎这一点,直到后面碰到各种问题特别是接口被盗取的时候,才开始认真考虑。
产品本身对版本升级应该支持的内容包括:
- 自主可控的升级提示和升级渠道。对于iOS这种无法控制渠道的,也应在应用内保留完整的升级提示机制,并提供打开升级AppStore的快捷方式。
- 对于因版本问题引发的产品问题,一定要给用户强反馈,并引导用户升级。比如,如果由于接口安全升级导致用户无法查询,那么在检测到接口数据的特定标志后,应该给用户一个弹框,告知具体原因并引导升级。
重要的方面
1. 用户体系
产品开始的第一天,就应该确定下来产品的用户访问模式,一个产品可以选择支持游客模式或者注册模式,或者两者都支持,典型代表:
名称 | 游客模式 | 注册模式 |
---|---|---|
今日头条 | 支持 | 支持 |
微信 | 不支持 | 支持 |
需要指出的是,如果产品一开始只支持游客模式而不支持注册模式,那么在引入注册模式之前,尽量不要做任何带有用户成长性质的活动。同一个用户从游客模式转化到注册模式的时候,数据合并策略也应该想清楚衔接方案,保持平稳过渡。
如果选择了注册模式,一定要考虑跨平台的迁移问题。
唯一入口
对于对外开放服务的应用,需要坚持的原则:
- 保持对外沟通的入口与协议的唯一性
- 对外提供的协议应屏蔽任何功能的实现细节
- 禁止任何第三方应用绕开入口或使用非标准协议访问产品功能
次要的方面
次要的方面不是核心问题,但在前期也比较重要。不过这些方面通常有其他方式可以实现基本功能,只有在这些方式确实不满足需求的时期,才需要考虑自行设计实现方案。
原则:做得差的实现,比不做影响更恶劣。
数据统计
统计数据的方式大致有:
- 后台请求数据
- 应用市场的后台数据
- 服务商的后台数据
- 第三方统计SDK
用户反馈
获取用户反馈的方式大致有:
- 应用市场的评论
- 服务商的后台
- 微博、贴吧等大众论坛
- 用户的主动反馈
- 运营的用户访谈
用户分享
与“用户反馈”类似
账号管理
现在基本上所有认证都是通过手机,所以一些重要的认证信息,绑定的手机号有两种选择:
- 全部使用创始人的手机
- 新办理一个手机号挂在创始人名下,专门用于账号认证
前期不重要的方面
只要产品实现度完成了核心功能,并且没有bug,其他方面都暂不重要。
防抖与节流的通俗解释
防抖
用自动门来类比,我们在通过自动门的时候,当门检测到人通过之后,会先保持开启状态约 15 秒钟,如果在这 15 秒之内,再没有人通过,那么门会自动关上。
但是,如果在这 15 秒之内不断有人通过,自动门在确认最后一个人通过 15 秒之后,才会关门。
对于自动门来说,不断通过的人就是抖动,所以有 15 秒的时间来进行防抖。
我们用 lodash 来实现这个机制就是:
1 | const WAIT_TIME = 15 * 1000; |
节流
玩过 moba 游戏(比如王者荣耀)的都知道,很多英雄的被动都有一个冷却时间,在这个冷却时间内,被动技能只能触发一次。比如项羽的被动:
陷阵之志:
冷却值:120秒
被动:当生命低于30%,项羽可在6秒内获得30%伤害与40%免伤加成,此效果有120秒CD
意思就是说在项羽在挨揍的时候,从血量掉到30%以下触发被动效果。同时,这一刻开始,往后的 120 秒内都不能再触发被动了,哪怕这120秒内被打死了,都不会获得被动。
我们用 lodash 来实现这个机制就是:
1 | const COOL_DOWN = 120 * 1000; |
总结
所以,从目的来讲,防抖是为了避免用户误操作触发的尴尬,节流是为了限制用户想连续触发的意图。
finalhandler.js
很多 Node 的 Web 框架中用到了这个 finalhandler.js 模块,它的作用按照官方文档描述如下:
Node.js function to invoke as the final step to respond to HTTP request.
主要是在 req 的处理中作为最后的兜底处理器——错误处理。
Arrow Function
起源:有人发给我下面一段代码:
1 | <script> |
问了两个问题:
为什么打印出来的不是 '22'?
为什么打印出来的不是 undefined?
var & let & const
关于这个话题,我想要讨论的问题只有一个:什么时候应该用var,什么时候应该用 let,什么时候应该用const?
我的观点是,对于现代前端项目,有三个原则:
- 任何时候都不要用 var
- 能用 const 的地方都用 const
- 不能用 const 的地方,就用 let
Facebook Emitter Source Code
EventEmitter 是一个事件订阅、分发库, facebook 出品,被应用在 flux 等库中,也可以独立使用。github 地址 https://github.com/facebook/emitter。