写点什么

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

评论

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

熬夜肝完! 阿里P8的Java进阶知识典藏版,我从18K飙到30K

程序知音

Java 编程语言 java面试 java架构 Java面试题

一个神奇的需求:doc批量转docx,1行Python代码实现

程序员晚枫

Python word 自动化办公

Django笔记一之运行系统、创建视图并访问

Hunter熊

django

设计模式之美--经常被用错的KISS、YAGNI原则

GalaxyCreater

设计模式

【算法数据结构专题】「延时队列算法」史上手把手教你针对层级时间轮(TimingWheel)实现延时队列的开发实战落地(上)

码界西柚

4月月更 时间轮(TimeWheel) 算法指南 技术调整

阿里大佬力荐K8s项目实战笔记!图文并茂带你深度解析Kubernetes

Java Kubernetes k8s

负载均衡算法的实现

王玉川

c++ 负载均衡 高可用 高并发 一致性哈希

真的香!腾讯SpringBoot高阶笔记,限时开源48小时

程序知音

Java 微服务 编程语言 springboot java架构

卓越工程之开发过程管理

agnostic

卓越工程

深度学习基础入门篇[一]:神经元简介、单层多层感知机、距离计算方法式、相似度函数

汀丶人工智能

人工智能 机器学习 深度学习 多层感知机

前端面试实录HTML篇

Immerse

html 面试 前端 HTML5, CSS3

Service进阶

芯动大师

service intentservice 轮询

不敲一行代码,用ChatGPT开发App

FN0

移动开发 ChatGPT

一路披荆斩棘腾讯6面面经(已拿offer)大厂远没想象中的难

小小怪下士

Java 程序员 面试 后端

字节资深架构师用7大部分13章节,彻底讲透SpringBoot生态体系

Java spring 微服务 Spring Boot 框架

细节拉满,80 张图带你一步一步推演 slab 内存池的设计与实现

bin的技术小屋

内存管理 Linux Kenel 内核 内存池

创业公司如何不沦为OpenAI“死侍军团”:训练小众数据,服务特定用户

B Impact

涨薪跳板! 2023阿里突击版Java面试宝典

程序知音

Java 编程语言 java面试 java架构 后端技术

火了!北大学霸爆肝3个月的算法小抄完整笔记,GitHub疯狂转发

Java 数据结构 算法

新一代分布式任务调度框架

程序员大彬

Java 面试

OneCode :如何构建部署低代码引擎工程

codebee

浅谈 Spring 如何解决 Bean 的循环依赖问题

Java spring 循环依赖

业务防资损,质量保障的第一要务!

老张

业务价值 交付质量 防资损

GitHub标星35k+微服务深度原理实践进阶PDF,竟让阿里换下了Dubbo

Java 架构 面试 微服务

从0为你讲解,什么是服务降级?如何实现服务降级?

为 NGINX 配置免费的 Let’s Encrypt SSL/TLS 证书

NGINX开源社区

Python数据分析库介绍及引入惯例

timerring

Python pandas

5.5G,运营商能接受吗?

脑极体

5.5G

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