gouqi
gouqi copied to clipboard
Roadmap without any promises
- [ ] View 层的分离和测试。这个是一定会做的,这个项目就是跑测试送 App,没有测试就没意思了。虽然之前写 View 都是怎么快怎么来,但大部分 container 的子组件还是都提前写成了 functional 的样子,所以改起来应该不算麻烦。这里包括两步:
- [ ] 用 Reselect 重写
connect
,之前写 View 层基本就是怎么快怎么来,虽然 chrome profile 和 Xcode 调试显示还没有性能问题,这个我倒是想提前优化一下; - [ ] 用 Recompose 分离组件,这里尽量就不用
class
来写 component 了(不过这里还有一个 React Native animation 的问题),保证每个组件都是 functional component,这样即便不用 Jest 的 snapshot 测试起来也很方便
- [ ] 用 Reselect 重写
- [ ] 用 normalizr 重写数据结构。当时写枸杞的时候 Twitter 还没有发他们新的 mobile 版本,在 Redux devtools 看了一下他们的数据结构发现原来这么搞才更科学。
- [ ] 接入别的音乐 API。这里依赖于前一个 todo。原理就是给每一个音乐源的 API 都写一个 normalizr,因为 saga 测试 AJAX 的 I/O 都做了提前的处理,所以 saga 的测试不用重写。
- [ ] 支持 Android。由于我没有真机也没法做调试,另外听说现在 Android 有了很大进步,现在 2k 到 3k 阶段有什么可以推荐吗?希望对开发者友好。
- [ ] 适配更多机器。目前应该 iPhone 5(s/SE) 和 6(s/7) 两种都没问题,但播放器写死了图片的大小,
- [ ] 音乐的 cached。现在播放音乐使用的是
react-native-video
,在 iOS 上AVFoundation
的简单实现,每次加载音乐都要把整首歌全都下载过来才能播放。另外一个选择是react-native-sound
,这个也写好了但效果并不比react-native-video
好。一些支持 cache 的音乐播放实现实际上用的是StreamKit
或DOUAudioStreamer
,但他们的 API 还不满足现在枸杞的需求。如果纯用 JavaScript 的话倒是有一个思路:把音乐先 fetch 成blob
,然后用react-native-fetch-blob
转换成 stream 给react-native-video
播放,下载完成之后缓存在本地第二次播放的时候就直接播放本地文件。不过具体到底能不能 work 还不清楚。最好还是有原生语言开发者能做这类事。