本文共 1117 字,大约阅读时间需要 3 分钟。
Slack最近在beta通道中提供了3.0版本,该版本包含大量的性能提升和漏洞修复。大多数主要变更都是围绕从组件WebView到BrowserView的迁移,BrowserView是一个更新且更稳定的替代选择。Slack工程师Charlie Hess发表了一篇博客,。
\\Slack使用Electron开发,Electron是一种框架,它使用像和这样的网络技术来开发桌面应用程序。虽然这种技术有助于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%的原始代码。
\\该团队决定引入使用了的。本质上,Slack由许多进程组成,每个进程都包含自己的Redux存储。redux-electron使用Electrons IPC(进程间通信)来共享进程之间的动作,该进程使用主进程作为单一数据源(SSoT),并将其它进程作为代理。
\\另一个选择是,Hess说它给这个项目带来了很多好处。在重构过程中,类型检查帮助我们避免了许多可能检测不到的错误:
\\\\\你永远不用再考虑flatMap的输出(比如获得的是数组还是单个项)、reduce的参数顺序、或一个看起来像throttle但以D(debounce)作为开头的运算符名称。在VS Code中使用自动补全功能时,编写JavaScript感觉就像在编写C#。
\
最后,Hess解释说,Slack使用和基于的中间件。Slack本质上通过一个原语(一个接收和生成动作流的函数)将反应式编程引入Redux。
\\在线阅读,其中用代码示例做了更详细的介绍。此外,最新版本的Slack可以在下载。
\\查看英文原文:
\\转载地址:http://vygjx.baihongyu.com/