新闻热点
- 谷歌AI写的机器学习代码,完爆程序员 谷歌automl团队提出了一种可以创建自学习代码的机器学习软件,系统会运行数千个模拟来确定代码的哪些方面可以作出改进,以及在改变后继续该过程、直到达成目标。所以,是要失业了吗?
- Google Chrome v62正式版发布惯例更新了安全修复及稳定性改进。升级后,谷歌将更激进地标注 HTTP 链接为不安全,只推荐 HTTPS。同时,新版支持更多的 OpenType 字体、网络稳定性以及快速捕获网页流媒体文件。
- ofo发布首份移动物联网测评报告 物联网智能锁优势全揭秘
- 服役13年的 WPA2 加密协议已被攻破?在家上网都不安全了! KRACK可攻陷所有WiFi网络
- MDN成立产品顾问委员会,将一统Web文档标准
技术深入
-
- 变换(Transformation):设计 React 的核心前提是认为 UI 只是把数据通过映射关系变换成另一种形式的数据。同样的输入必会有同样的输出。这恰好就是纯函数。
- 抽象(Abstraction):你不可能仅用一个函数就能实现复杂的 UI。重要的是,你需要把 UI 抽象成多个隐藏内部细节,又可复用的函数。通过在一个函数中调用另一个函数来实现复杂的 UI,这就是抽象。
- 组合(Composition):组合”就是将两个或者多个不同的抽象合并为一个.
- 状态(State):UI 不单单是对服务器端或业务逻辑状态的复制。实际上还有很多状态是针对具体的渲染目标。
- Memoization:对于纯函数,使用相同的参数一次次调用未免太浪费资源。我们可以创建一个函数的 memorized 版本,用来追踪最后一个参数和结果。这样如果我们继续使用同样的值,就不需要反复执行它了。
- 列表(Lists):大部分 UI 都是展示列表数据中不同 item 的列表结构。这是一个天然的层级。
- 连续性(Continuations):我们可以通过推迟一些函数的执行,进而把一些模板移出业务逻辑。比如,使用“柯里化”(JavaScript 中的 bind)。然后我们可以从核心的函数外面传递 state,这样就没有样板代码了。
- State Map:我们可以把执行和传递 state 逻辑挪动到被复用很多的低层级的函数中去。
- Memoization Map:一旦我们想在一个 memoization 列表中 memoize 多个 item 就会变得很困难。因为你需要制定复杂的缓存算法来平衡调用频率和内存占有率。还好 UI 在同一个位置会相对的稳定。相同的位置一般每次都会接受相同的参数。这样以来,使用一个集合来做 memoization 是一个非常好用的策略。
- 代数效应(Algebraic Effects):多层抽象需要共享琐碎数据时,一层层传递数据非常麻烦。如果能有一种方式可以在多层抽象中快捷地传递数据,同时又不需要牵涉到中间层级,那该有多好。React 中我们把它叫做“context”。
Redux异步方案选型:由于Redux的理念非常精简,没有追求大而全,这份架构上的优雅却在某种程度上伤害了使用体验:不能开箱即用,甚至是异步这种最常见的场景也要借助社区方案。如果你已经挑花了眼,或者正在挑但不知道是否适合,或者已经挑了但不知道会不会有坑,这篇文章应该适合你。
兴趣阅读
- JS 依然最受欢迎,GitHub 2017 开发者年度报告:能用JS解决的,最终都会被JS解决。
- 何为持续集成概念性内容
- 前端要革命?看我在JS里写SQL:js里面写SQL?这不是搞事情么?且听笔者娓娓道来。
- 每个程序员都应该知道的基础数论: 这篇文章讨论了数论中每个程序员都应该知道的几个重要概念。