React Native探索(三):与 react-web 的融合

  这两年,教育可以说是 AI 落地场景中最为热闹的场景之一,不同公司分别从各种角度切入市场。有的公司以拍照搜题打开市场、更专注数理化科目,比如我们上一期采访的学霸君;有的公司更关注语音测评,比如科大讯飞,和我们今天文章的主角先声教育。 但只是侧重不同科目,足以在竞争激烈的 AI 教育市场圈地为王吗?这到底是一个怎么样的市场,小公司又该如何突破?

  这两年,教育可以说是 AI 落地场景中最为热闹的场景之一,不同公司分别从各种角度切入市场。有的公司以拍照搜题打开市场、更专注数理化科目,比如我们上一期采访的学霸君;有的公司更关注语音测评,比如科大讯飞,和我们今天文章的主角先声教育。 但只是侧重不同科目,足以在竞争激烈的 AI 教育市场圈地为王吗?这到底是一个怎么样的市场,小公司又该如何突破?

  Netflix使用会员的视频观看记录实时准确地记录用户的观看情况,并为会员提供个性化推荐。Netflix的发展,对视频观看记录时序数据存储的规模化提出了挑战,原有的单表存储架构无法适应会员的大规模增长。本文介绍了Netflix团队在规模化时序存储中的做法,包括数据存储方式的改进,以及在存储架构中添加缓存层。存储架构在Netflix的实际应用验证了该时序数据存储的有效性。

  当前人们日渐疏远传统的瀑布式开发,并转型为敏捷开发方法。有观点认为,开发中已不再需要做软件项目估算。这个观点看上去合情合理,但并不正确。实践中,即便是那些已经采用敏捷方法的企业,软件估算依然十分有价值。

  近期,InfoQ与solo.io的CEO Idit Levine进行了一次座谈。Idit新创立了一种称为“Squash”的开源微服务调试器。在此次座谈中,她介绍了观察和调试分布式系统和应用中的挑战。

  亲爱的读者:我们最近添加了一些个人消息定制功能,您只需选择感兴趣的技术主题,即可获取重要资讯的邮件和网页通知。

  对于react-native在实际中的应用, facebook官方的说法是react-native是为多平台提供共同的开发方式,而不是说一份代码,多处使用。 然后一份代码能够多处使用还是很有意义的,我所了解到的已经在尝试做这件事情的:

  现阶段大家都是在摸索中,且react-native 还不够成熟,为此我也想通过一个实际的例子提前探究一下共享代码的可行性。

  react-native基本上是View套上Text这样来布局,为了做web和native的兼容,我们得提供继承版本的View ,针对不同的平台返回不同做兼容,我们将提供:

  我们知道react-native的样式是css很小的一个子集,大概支持50种属性,为了做到web和native使用同样地样式,那么我的想法是:

  这样做的另外一个原因是,因为css是全集,react-native是子集,全集到子集可以通过删减来处理,但是如果想通过子集到全集就会很麻烦(react-style就是通过react-native来生成css)。 且这样做还有很多好处,例如我们可以支持react-native里边不支持的css写法,例如padding: a b c d;这种写法很容易得到兼容。

  对于react-native,是通过packager来打包的,具体的实现和逻辑可以随时查看packager的readme文档。 那我们怎么将适用于native的代码打包成web的代码,首先想到的是browserify,webpack。 都是遵循commonJs规范,个人更喜欢前者, 用它来应该足以满足需求。

  web和native的代码都写在同一个地方,如何做区分呢? 这个问题当然最好就是不做区分,或者就像女生的衣服,期望是越少越好,但永远不可能木有(猥琐了:-】)。

  我设想中的一个最简模型的目录结构,web和ios有不同的入口,web和ios有单独的目录, 组件共享, 如下:

  我们已经整理了具体的实现思路,下面是我就会直接吐出我的实现代码, 重点的地方都会在源码里边有注释

  这样的写法有些像less,我们可以知道元素的层级关系, 这样我可以遍历这个对象,查找子元素有设置flex的,父元素加上display:flexbox。

  通过标签的方式, 相当于给react-native或者react添加了一个网格系统,同时我们可以直接在Row上设置display:flex.

  完全同react-native原生的写法,直接在web中兼容,遍历所有有flex样式的节点,直接做兼容。

  对于write once, run anywhere这个观点. 相信不同的人会有不同的看法,但无论如何,如果兼容成本不大,这样的兼容技术方案对业务开发是有极大意义的。

  我们理解您使用ad blocker的初衷,但为了保证InfoQ能够继续以免费方式为您服务,我们需要您的支持。InfoQ绝不会在未经您许可的情况下将您的数据提供给第三方。我们仅将其用于向读者发送相关广告内容。请您将InfoQ添加至白名单,感谢您的理解与支持。

相关阅读