写点什么

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:502532

评论

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

平面设计之PS(中)

空城机

PhotoShop ps 4月日更

游戏数据埋点

data_y

游戏 数据埋点 游戏数据分析 埋点定义

【得物技术】算法入门一:算法的好坏?复杂度告诉你

得物技术

算法 时间复杂度 大前端 入门 复杂度

在业务高峰期拔掉服务器电源是一种怎样的体验?

冰河

分布式 微服务 数据恢复 MySQL 高可用 异常处理

浅论结构体与联合体

Integer

c

CI/CD之基于Jenkins的发布平台实践

小江

DevOps jenkins CI/CD 发布流程

Android音视频 - MediaCodec编解码音视频

LoveYFan

android 音视频 编解码

那束漂亮的手捧花

小天同学

爱情 4月日更 幸福 传递

CIAM的7个基本原则

龙归科技

安全性 用户 业务增长

新的物联网技术应用有哪些

cdhqyj

互联网 物联网 通信 计算机

聪明人的训练(九)

Changing Lin

4月日更

我的 2015-2018 —— 银行软开三年项目回顾

清秋

大前端 重构 鉴权 4月日更

Go1.16 中模块的新变化

Rayjun

Go 语言

Redis 最后一课

escray

redis 学习 极客时间 Redis 核心技术与实战 4月日更

Github限时开放!阿里内部强推的《微服务容器化参考指南》简直太牛了!

Java架构之路

Java 程序员 架构 面试 编程语言

线上PHP服务故障排查之路

风翱

PHP-FPM 线上事故 4月日更

一周信创舆情观察(3.29~4.4)

统小信uos

AI 事件驱动场景 Serverless 实践

阿里巴巴云原生

人工智能 Serverless 容器 云原生 消息中间件

一个DNS引发的“血案”

穿过生命散发芬芳

Wireshark 数据包分析 4月日更

你真的懂反馈吗?

石云升

28天写作 职场经验 管理经验 4月日更

JavaScript小笔记

赫鲁小夫

4月日更

Fl Studio真的不如Cubase或者Logic Pro等电音软件专业吗?

奈奈的杂社

编曲 电音 电音制作 中国电音 编曲宿主

调整云计算资源大小时要避免的10个错误

云计算

经典递归

山@支

三翼鸟的羽翼下,人诗意地栖居在智能生活里

脑极体

微服务网关:Spring Cloud Gateway —— Zuul

程序员架构进阶

微服务 网关 28天写作 4月日更

Android音视频 - EGL源码解析以及C++实现

LoveYFan

android 音视频 OpenGL ES

新华三“云屏”发布:云屏融合重塑工作体验,全力构建智“会”时代

DT极客

深入浅出 LVS 负载均衡系列(一):NAT、FULLNAT 模型原理

UCloud技术

负载均衡

翻译:《实用的Python编程》08_01_Testing

codists

Python

如何引入TDD实践

顿晓

TDD 4月日更

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