当前位置:新闻中心行业动态 → 正文

Slack桌面3.0迁移到BrowserView

责任编辑:editor005 作者: Andrew Morgan |来源:企业网D1Net  2017-11-24 11:21:40 本文摘自:INFOQ

Slack最近在beta通道中提供了3.0版本,该版本包含大量的性能提升和漏洞修复。大多数主要变更都是围绕从Electron组件WebView到BrowserView的迁移,BrowserView是一个更新且更稳定的替代选择。Slack工程师Charlie Hess发表了一篇博客,概述了这次迁移过程。

Slack使用Electron开发,Electron是一种框架,它使用像NodeJS和Chromium这样的网络技术来开发桌面应用程序。虽然这种技术有助于Slack保持跨平台性,但Slack并未像团队所希望的那样稳定。Hess解释说,这主要是由于WebView,一个用于渲染网页的Electron特性。

WebView的主要问题之一是组件本身直接在Chromium中实现。这意味着bug修复最终要由Chrome团队完成,这会大大妨碍进度。为了解决这个问题,Electron团队引入了BrowserView,它是一个更像Chrome选项卡的组件,并且是操作系统窗口层次结构的一部分。团队正在迁移,这是Slack 3.0中的大部分工作:

我们的意思是,与WebView不同的是,你不能将BrowserView拖放到DOM中,并使用CSS操作它。与顶级窗口类似,这些视图只能从后台Node进程创建。因为我们的应用程序是作为一组React组件来编写的,该组件包装了WebView,这些组件位于DOM内,所以这看起来像一次完全重写。

然而,Hess解释说,通过做出良好的技术选择和设计决策,重写是极其轻松的,并且他估计,最终他们能够保留超过70%的原始代码。

该团队决定引入使用了Redux的redux-electron。本质上,Slack由许多进程组成,每个进程都包含自己的Redux存储。redux-electron使用Electrons IPC(进程间通信)来共享进程之间的动作,该进程使用主进程作为单一数据源(SSoT),并将其它进程作为代理。

另一个选择是TypeScript,Hess说它给这个项目带来了很多好处。在重构过程中,类型检查帮助我们避免了许多可能检测不到的错误:

你永远不用再考虑flatMap的输出(比如获得的是数组还是单个项)、reduce的参数顺序、或一个看起来像throttle但以D(debounce)作为开头的运算符名称。在VS Code中使用自动补全功能时,编写JavaScript感觉就像在编写C#。

最后,Hess解释说,Slack使用redux-observable和基于RxJS 5的中间件。Slack本质上通过一个原语(一个接收和生成动作流的函数)将反应式编程引入Redux。

在线阅读完整的博客,其中用代码示例做了更详细的介绍。此外,最新版本的Slack可以在beta通道下载。

查看英文原文:Slack Desktop Migrated to BrowserView for 3.0

关键字:Slack

本文摘自:INFOQ

x Slack桌面3.0迁移到BrowserView 扫一扫
分享本文到朋友圈
当前位置:新闻中心行业动态 → 正文

Slack桌面3.0迁移到BrowserView

责任编辑:editor005 作者: Andrew Morgan |来源:企业网D1Net  2017-11-24 11:21:40 本文摘自:INFOQ

Slack最近在beta通道中提供了3.0版本,该版本包含大量的性能提升和漏洞修复。大多数主要变更都是围绕从Electron组件WebView到BrowserView的迁移,BrowserView是一个更新且更稳定的替代选择。Slack工程师Charlie Hess发表了一篇博客,概述了这次迁移过程。

Slack使用Electron开发,Electron是一种框架,它使用像NodeJS和Chromium这样的网络技术来开发桌面应用程序。虽然这种技术有助于Slack保持跨平台性,但Slack并未像团队所希望的那样稳定。Hess解释说,这主要是由于WebView,一个用于渲染网页的Electron特性。

WebView的主要问题之一是组件本身直接在Chromium中实现。这意味着bug修复最终要由Chrome团队完成,这会大大妨碍进度。为了解决这个问题,Electron团队引入了BrowserView,它是一个更像Chrome选项卡的组件,并且是操作系统窗口层次结构的一部分。团队正在迁移,这是Slack 3.0中的大部分工作:

我们的意思是,与WebView不同的是,你不能将BrowserView拖放到DOM中,并使用CSS操作它。与顶级窗口类似,这些视图只能从后台Node进程创建。因为我们的应用程序是作为一组React组件来编写的,该组件包装了WebView,这些组件位于DOM内,所以这看起来像一次完全重写。

然而,Hess解释说,通过做出良好的技术选择和设计决策,重写是极其轻松的,并且他估计,最终他们能够保留超过70%的原始代码。

该团队决定引入使用了Redux的redux-electron。本质上,Slack由许多进程组成,每个进程都包含自己的Redux存储。redux-electron使用Electrons IPC(进程间通信)来共享进程之间的动作,该进程使用主进程作为单一数据源(SSoT),并将其它进程作为代理。

另一个选择是TypeScript,Hess说它给这个项目带来了很多好处。在重构过程中,类型检查帮助我们避免了许多可能检测不到的错误:

你永远不用再考虑flatMap的输出(比如获得的是数组还是单个项)、reduce的参数顺序、或一个看起来像throttle但以D(debounce)作为开头的运算符名称。在VS Code中使用自动补全功能时,编写JavaScript感觉就像在编写C#。

最后,Hess解释说,Slack使用redux-observable和基于RxJS 5的中间件。Slack本质上通过一个原语(一个接收和生成动作流的函数)将反应式编程引入Redux。

在线阅读完整的博客,其中用代码示例做了更详细的介绍。此外,最新版本的Slack可以在beta通道下载。

查看英文原文:Slack Desktop Migrated to BrowserView for 3.0

关键字:Slack

本文摘自:INFOQ

电子周刊
回到顶部

关于我们联系我们版权声明隐私条款广告服务友情链接投稿中心招贤纳士

企业网版权所有 ©2010-2024 京ICP备09108050号-6 京公网安备 11010502049343号

^