阿里云飞天发布时刻,领先大模型限免,超7000万 tokens免费体验 了解详情
写点什么

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

评论

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

重点操作之上线、恢复、部署 - 大屏云极简使用手册

shulinwu

Go学习笔记——条件判断if

为自己带盐

Go 学习笔记 3月月更

java培训:Redis和Mysql数据怎么保持一致

@零度

MySQL redis JAVA开发

在 Nebula K8s 集群中使用 nebula-spark-connector 和 nebula-algorithm

NebulaGraph

数据库 开源 分布式系统 图数据库

Java 8 Stream 从入门到进阶——像SQL一样玩转集合

Geek_rze78a

Java JAVA stream

尚硅谷Maven新版视频教程发布

@零度

maven

理解Restful风格

蜜糖的代码注释

RESTful 接口规范 REST API 3月月更

AI算力加速之道

安第斯智能云

人工智能 深度学习 异构计算

大数据Flink培训:维表Join/双流Join的方法

@零度

flink join 大数据开发

实用机器学习笔记二十四:模型调参

打工人!

学习笔记 机器学习算法 3月月更 模型调参

upload上传文件类型的限制的几种方式(element)

lo

JavaScript

31 家企业入选阿里云首期云原生加速器,共建云原生行业新生态

阿里巴巴云原生

阿里云 云原生 云原生加速器 招募 行业生态

程序员硬核测评:全方位测评 GaussDB(for Redis) 和开源 Redis

华为云数据库小助手

性能分析 GaussDB GaussDB ( for Redis ) 华为云数据库 开源Redis

优雅的DO,VO,DTO转换工具MapStruct

卢永德

3月月更

AHPA:开启 Kubernetes 弹性预测之门

阿里巴巴云原生

阿里云 Kubernetes 云原生 AHPA 弹性预测

一文带你了解动态数组方法实现

xiaoyu

数据结构 算法 数组 java; 动态数组

科技创新力强,旺链科技创始人刘涛荣登G60科创走廊创业榜单

旺链科技

区块链 产业区块链 创新创业

CNI 这么多,怎么选?| 容器网络系列第1期

BoCloud博云

Kubernetes 容器云 cni 容器网络平台

OpenHarmony开源开发者成长计划 | 知识赋能第四期课程——标准系统HDF开发

Anna

直播 赋能 OpenHarmony

作为前端上传图片的两种方法

小学僧

3月程序媛福利 3月月更

这场汇聚行业顶级大咖的Meetup,有哪些不容错过的干货?| IDP Meetup 01

Baihai IDP

人工智能 AI 生态 Meetup

web技术分享| WebRTC控制摄像机平移、倾斜和缩放

anyRTC开发者

前端 音视频 WebRTC 摄像头 web技术分享

信息安全无小事!教你如何做日志脱敏

卢永德

程序设计优化之管道数据流

有道技术团队

虎符交易所完成2月HOO回购 HOO单月涨幅高达40%

区块链前沿News

Hoo 虎符交易所 平台币

豆瓣9.6分,Scala编程圣经第5版重磅来袭!

博文视点Broadview

HarmonyOS UI组件在线预览,程序员直呼“不要太方便~”

HarmonyOS开发者

UI HarmonyOS

黄东旭当选 CCF 数据库专业委员会、开源发展委员会、大数据专家委员会执行委员

PingCAP

web前端培训:react基础面试题分享

@零度

前端开发 React

云原生小课堂 | Envoy请求流程源码解析(二):请求解析

York

云原生 istio 网络 envoy Service Mesh (ASM)

优雅的编码习惯总是让人心情愉悦(Shell篇)

XinXing

Shell Code 优雅 脚本 规范

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