【ArchSummit】如何通过AIOps推动可量化的业务价值增长和效率提升?>>> 了解详情
写点什么

Slack 桌面 3.0 迁移到 BrowserView

  • 2017-11-23
  • 本文字数:1015 字

    阅读完需:约 3 分钟

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

2017-11-23 17:502246

评论

发布
暂无评论
发现更多内容

网络攻防学习笔记 Day2

穿过生命散发芬芳

5月日更 网络攻防

我与 InfoQ 写作平台的这些事

xcbeyond

个人成长 1 周年盛典 InfoQ 写作平台 1 周年 5月日更

Excel用户如何学习数据分析语言DAX?

博文视点Broadview

从零搭建一款PC页面编辑器PC-Dooring

徐小夕

大前端 可视化 lowcode 代码编辑器

复杂Gremlin查询的调试方法

Tom(⊙o⊙)

gremlin调试

【人间碎片】关于努力这件事

南吕

人生修炼 人生故事

【LeetCode】砖墙Java题解

Albert

算法 LeetCode 5月日更

【音视频】弱网下的音视频通讯

Bob

音视频 直播技术

将本地文件/文章上传到 GitHub 的流程

彭宏豪95

git GitHub 效率 编程

多家银行增设数字金融部 架构调整背后透露出哪些信号?

CECBC

银行

区块链如何推动人力资源和薪酬管理体系变革?

CECBC

人力资源

名可名

顿晓

5月日更 命名

通向未来的十二个趋势

CECBC

人工智能

数字化转型能力成为中国纺织服装业未来发展的核心动能

CECBC

纺织面料

【LeetCode】员工的重要性Java题解

Albert

算法 LeetCode 5月日更

如何选择开源许可证

HoneyMoose

如何在 GitHub 上面为你的项目选择开源许可证

HoneyMoose

当你觉得老板的决策是错的,你会怎么做?

石云升

职场经验 5月日更

书单 | 月度畅销好书,助你技能满格,摆脱低效,走向财富人生

博文视点Broadview

Redis-技术专题-Redis分布式锁实现方案

洛神灬殇

redis 分布式锁 5月日更

鹅厂疯子整理了万字Java笔记!小白:硬核资源基础知识已入门

牛哄哄的java大师

Java Object

超硬核!阿里技术大牛肝了2晚整理的Java知识,这也太强了!

飞飞JAva

Java Java泛型

SwiftUI @ Netflix:推动新技术落地是怎样一种体验?

故胤道长

swift 移动开发 iOS Developer SwiftUI

限时白嫖!腾讯内部员工培训Java资料,网友:大厂就是不一样

牛哄哄的java大师

Java

外行在谈论流派,大师在讨论颜料

顿晓

极限编程 5月日更 门道

Redis-技术专区-知识问题总结大全(上篇)

洛神灬殇

redis 5月日更 问题分析

未来5年或将出现颠覆型区块链应用,资产通证化将重构实体经济

CECBC

区块链

技术探索系列 - 轻松带你掌握 JMM(1)

洛神灬殇

Java JVM JMM 并发 5月日更

BPF 之巅:洞悉 Linux 系统和应用性能

博文视点Broadview

你的烂代码终于有了解决方案

博文视点Broadview

OAuth 2.0 了解了,OAuth 2.1 呢?

Zhang

OAuth 2.0 认证授权 OAuth 2.1

Slack桌面3.0迁移到BrowserView_HTML5_Andrew Morgan_InfoQ精选文章