2天时间,聊今年最热的 Agent、上下文工程、AI 产品创新等话题。2025 年最后一场~ 了解详情
写点什么

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

评论

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

JVM垃圾收集器全面剖析:算法、实现和优化

xfgg

Java JVM GC

超融合产品集成 Kata 虚拟化容器技术的方案演进 | 龙蜥技术

OpenAnolis小助手

开源 容器 虚拟化 龙蜥社区 龙蜥大讲堂

聊聊「短信」渠道的设计与实现

Java 架构

线程是如何通讯的?

javacn.site

华为云Toolkit活动:领取云计算8大领域50本干货电子书!

云计算 程序员 开发者 编程数据

Flutter热更新技术探索 | 京东云技术团队

京东科技开发者

flutter ios App an'droid 企业号 5 月 PK 榜

易观千帆 | 2023年4月银行APP月活跃用户规模盘点

易观分析

金融 数字经济 手机银行

技术分享| 融合会议协议大解密

anyRTC开发者

音视频 视频会议 快对讲 H.323 融合会议

文心一言 VS 讯飞星火 VS chatgpt (22)-- 算法导论4.2 2题

福大大架构师每日一题

福大大 ChatGPT 文心一言 讯飞星火

大象转身只需点点鼠标,爆火 DragGAN 原理浅析

Zilliz

Towhee draggan

2023-05-25:给定一个正整数 x,我们将会写出一个形如 x (op1) x (op2) x (op3) x ... 的表达式 其中每个运算符 op1,op2,… 可以是加、减、乘、除之一 例如

福大大架构师每日一题

Go 算法 rust 福大大

YB时代,正寻找新的数据支点

脑极体

存储

音频编辑工具 Celemony Melodyne Studio5激活

真大的脸盆

Mac Mac 软件 音频编辑 音频处理工具 编辑音频

【深度剖析】JavaScript中块级作用域与函数作用域

Immerse

JavaScript 闭包 作用域 函数作用域 块级作用域

实例讲解Spring boot动态切换数据源

华为云开发者联盟

后端 开发 华为云 华为云开发者联盟 企业号 5 月 PK 榜

数据可视化:部分整体类可视化图表大全

2D3D前端可视化开发

数据分析 数据可视化 数据可视化工具 可视化图表 数据可视化设计

破解提升 LLMs 性能的黑匣子—— LlamaIndex

Zilliz

Milvus AIGC LLM llamaindex

用eBPF/XDP来替代LVS(三)

九零后程序员

云计算 Linux 云原生 LVS ebpf

WICC · 出海嘉年华|嘉宾就位、话题揭晓,峰会 & 派对报名倒计时

融云 RongCloud

融云 峰会 泛娱乐 出海 wicc

iOS MachineLearning 系列(18)—— PoseNet,DeeplabV3与FCRN-DepthPrediction模型

珲少

Django笔记三十六之单元测试汇总介绍

Hunter熊

Python django 单元测试

AIGC背后的技术分析 | 机器学习?机器如何学习?

TiAmo

机器学习 AIGC julia

使用CST电磁仿真之前,如何安装硬件加速卡?【操作流程】

思茂信息

cst cst使用教程 cst操作 cst电磁仿真 cst仿真软件

Kafka实时数据即席查询应用与实践

vivo互联网技术

kafka 实时数仓

得物前端巡检平台的建设和应用

得物技术

巡检

数智领航营:酒类农牧业数智化转型中的数智化决策实践

博睿数据

可观测性 博睿数据 数智化 数智领航营 酒类农牧业

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