Master

语言 & 框架

采纳?

  • 我们几年前把 ReactiveX(反应式编程开源框架中的一个系列)移到了技术雷达的“采纳”环中。2017年,我们提到了 RxSwift,它可以将反应式编程应用到基于 Swift 的 iOS 开发中。此后,Apple 以 Combine 的形式推出了自己的反应式编程框架。对于仅支持 iOS 13 及更高版本的App而言,Combine 已经成为默认的选择。它比 RxSwift 更容易学习,并且与 SwiftUI 集成得很好。如果您想要将现有项目框架从 RxSwift 转换为 Combine,或者在一个项目中同时使用两者,可以了解一下 RxCombine

    历史信息
  • 如今,我们的移动开发团队认为 LeakCanary 是 Android 开发中的默认选项。它的集成极其简单,同时提供能够清晰回溯内存泄漏原因的通知,从而帮助我们侦测到 Android 上恼人的泄漏问题。我们推荐你把 LeakCanary 加入工具包,它可以帮你节省在多个设备上排查内存泄漏的时间。

    历史信息

试验?

  • 随着继续使用JavaScript开发Web应用,我们也从Testing Library的应用测试方法中获益良多;并且继续针对它的一系列软件包进行探索和经验积累,不仅仅限于React Testing LibraryAngular Testing Library在以用户为中心测试UI组件的方面上拥有这个大家庭的全部优势,鼓励测试用户行为,而非UI细节的实现方式,使得测试更具有可维护性。虽然缺乏完善的文档,但Angular Testing Library提供了良好的测试示例来帮助我们针对于不同场景更好地上手。我们已经成功地在Angular项目上应用了这个测试库,并且建议你们也能尝试一下这个可靠的测试方法。

    历史信息
  • AWS Data Wrangler 是一个开源库,可以将数据框连接到 AWS 数据相关的服务,从而将 Pandas 的功能扩展到 AWS。另外,该库还利用 Apache ArrowBoto3 暴露了一些 API,用于从数据湖和数据仓库中加载、转换和保存数据。AWS Data Wrangler 最大的限制是不支持大型的分布式数据流水线操作。但是,你可以使用原生的数据服务(如 Athena、Redshift 和 Timestream 等)进行大批量的数据上传和提取工作,来表示适用于数据框的复杂转换。我们在生产环境中使用过 AWS Data Wrangler。它可以使你专注于编写转换,而不必在连接AWS数据服务上花费太多时间。

    历史信息
  • 虽然 JavaScript 及其生态系统已经在 Web UI 领域占据了统治地位,但随着 WebAssembly 的出现,一些新的机遇之窗也正在打开。Blazor 依然值得我们的关注;我们的团队使用 C# 在 WebAssembly 之上构建交互丰富的用户界面,取得了良好的效果。同时,能够在前端使用 C#,也意味着可以共享代码和复用现有的库。除此以外,配合使用 bUnit 这类现存的调试和测试工具,这个开源框架值得一试。

    历史信息
  • 越来越多的团队正在使用Python作为他们解决方案的首选语言,这不仅针对数据科学,也同样对于后端服务。在这些场景中,FastAPI给了我们优秀的体验。这是一个使用Python 3.6或更新版本来构建API的现代、快速(高性能)的Web框架。不仅如此,该框架及其生态还包括了诸如用OpenAPI来创建API文档这样的功能,使团队可以聚焦在业务功能并快速创建REST API。这些特性使FastAPI在这个领域成为了现有解决方案的良好替代品。

    历史信息
  • 一直以来我们都很享受使用TypeScript的体验,喜欢它的强类型带来的安全性。然而,当获取的数据(如调用后端服务返回的数据)与TypeScript类型定义不一致时,却可能会导致运行时错误。一个叫做 io-ts 的库可以帮我们解决这个问题。它通过提供编码和解码的功能,帮我们弥补了外部数据在编译期类型检查和运行时数据消费之间的鸿沟。它也可以用作自定义类型保护。随着在工作中获得越来越多使用 io-ts 的经验,我们对它最初的好印象得到验证,并且现在仍然喜欢这种优雅的方式。

    历史信息
  • Kotlin 协程 的引入为Kotlin的创新打开了一扇大门——直接集成到协程库中的Kotlin Flow 就是其中之一。Kotlin Flow是一种基于协程的响应式流的实现。与RxJava不同的是,流是Kotlin原生的API,与熟悉的序列API类似,包括 mapfilter方法。跟序列一样,流是“”的,这就意味着只有当需要使用的时候才构造序列的值。所有这些特性使多线程代码的编写比其他方法更加简单和易于理解。可以预见,通过toList方法将流转换成列表将会成为测试中的一种常见模式。

    历史信息
  • 自从我们于2014年第一次提到Web Components以来,它已经取得了稳步的发展。作为Polymer项目的一部分,LitElement是一个简单的库,你可以使用它创建轻量级Web组件。它实际上只是一个基类,它去掉了很多常见的模板,从而使编写Web组件变得更加容易。我们已经在项目上成功地使用了它,并且随着技术的成熟和LitElement库的广受欢迎,它在Web Components项目中的应用将会越来越普遍。

    历史信息
  • 在上一次我们介绍了有关如何使用Next.js构建React 代码库之后,我们又有了更多的使用经验。Next.js是一个一站式零配置的框架,该框架提供了包括简化的路由、采用WebpackBabel进行自动打包和编译、快速热重载等其它可为开发人员提供便利工作流的工具。它默认提供服务器端渲染、搜索引擎优化和改善初始加载时间等功能,并支持增量静态生成模块代码。使用过Next.js的团队为我们提供了积极的体验报告,同时鉴于其庞大的社区,我们对该框架的发展保持乐观的态度。

    历史信息
  • 适用于Android 系统的按需分发模块是一个框架,允许为适当结构的App下载和安装仅包含所需功能的量身定制的 APK。对于下载速度可能堪忧的大型应用,或用户可能仅在初次安装时使用某些功能的应用来说,此框架值得一试。它还可以简化对多个设备的处理,而无需使用不同的 APK。iOS平台下也有类似的框架

    历史信息
  • Streamlit 是开源的 Python 应用程序框架,供数据科学家使用,以构建交互式数据应用程序。调整机器学习模型需要花费大量时间,但是我们可以在 Streamlit 中快速构建独立的原型,并在实验循环中收集反馈,而不用在主程序(使用模型的应用程序)中反复调整。Streamlit相较于 Dash 等竞争对手表现更佳出众, 因为它专注于快速原型开发,并支持大量的可视化库(例如 Plotly 以及 Bokeh)。 我们已经在几个项目中使用了 Streamlit,并且很喜欢用它轻松地构建交互式可视化应用。

    历史信息
  • 我们团队发现在合适的情况下,使用React Hooks 的库SWR可以达到代码整洁和性能大幅提升的效果。SWR实现了更新的同时使用过期数据(stale-while-revalidate, 缩写即SWR)的HTTP缓存策略,即第一次从缓存中返回(过期)数据,然后发送拉取数据的请求(更新),最后用最新的返回数据刷新缓存。我们告诫团队仅在应用程序应返回过期数据时才使用SWR缓存策略。需要注意的是,HTTP 要求以最新的数据缓存来响应请求,而只能在经过深思熟虑的情况下才允许返回过期的响应。

    历史信息
  • 我们在使用 SSL 公钥绑定时需要格外小心。因为一旦选择了错误的安全策略或者忘记进行绑定备份,应用程序可能会因为异常而停止运行。这正是 TrustKit 的有用之处。它是 iOS 平台上用于简化 SSL 公钥绑定的一个开源框架,同样也支持了 Android 平台。关于如何选择合适的绑定策略,以及更多细节问题的指导,您可以查阅这份上手指南。我们已经在多个项目的生产环境中运用了 TrustKit ,效果很好。

    历史信息

评估?

  • 我们不会在雷达中介绍每一个新的.NET版本,但 .NET 5 意味着在将.NET Core 和.NET Framework 合并为单一平台方面迈出了重要一步。各组织应该开始制定策略,当.NET 5或6 版本可用时,将他们的开发环境(根据部署目标的不同而混合不同的框架)迁移到单一版本的.NET 5 或6 。这种方法的优势将是一个通用的开发平台,不必考虑预期环境:Windows、Linux、跨平台移动设备(通过Xamarin)或浏览器(使用Blazor)。虽然对于有工程文化支持的公司来说,多语言开发仍将是首选方法,但其他公司会发现在单一平台上进行标准化的.NET 开发更有效率。目前,我们希望将其保留在“评估”环中,看看.NET 6中的最终统一框架表现如何。

    历史信息
  • bUnit 是一款专门为Blazor 量身打造的测试库,它可以在已有的单元测试框架(如NUnit、xUnit或MSUnit)中轻松地创建Blazor组件测试。它为组件提供了一个外观(facade),可以在熟悉的单元测试范式中运行和测试,从而允许快速反馈并对组件测试进行隔离。如果你正在开发Blazor,我们建议你把bUnit添加到工具列表并进行尝试。

    历史信息
  • Dagster 是一个用于机器学习、机器分析,以及纯 ETL 数据管道的开源数据编排框架。与其他任务驱动框架不同,Dagster 知晓流经流水线的数据并可以提供类型安全性。借助对流水线和产生资产的统一视图,Dagster 可以计划和编排 Pandas,Spark,SQL,或任何 Python 可调用的接口。该框架相对较新,我们建议您对其在数据流水线中的能力进行评估。

    历史信息
  • 到目前为止,Flutter主要支持iOS和Android原生应用。但是Flutter团队的愿景是让Flutter支持在任何平台上构建应用。 Flutter for Web 朝此方向迈出了一步,让我们能够基于同一代码库构建适用于iOS、Android和浏览器的应用。它的测试版在一年前已处于可用状态,而随着最近Flutter 2.0版本的发布,Flutter for Web迎来了一个稳定的里程碑版本。在此版本中,Flutter团队专注于渐进式Web应用单页面应用,以及将现有的移动应用扩展到Web平台。它的应用和框架代码(全部基于Dart)也被编译为JavaScript,而非用于移动应用的ARM机器码。 Flutter的Web引擎为我们提供了两种渲染器:使用HTML,CSS,Canvas和SVG的HTML渲染器,以及使用WebAssembly和WebGL将Skia绘制命令展现到浏览器canvas的CanvasKit渲染器。我们有一些团队已经开始使用Flutter for Web,并对试用结果表示满意。

    历史信息
  • 我们在之前的技术雷达中评价过尚处试验开始阶段的React应用程序状态管理。我们将Redux移回到试验环, 标明它不再是我们的默认选项,并且提到了Facebook的Recoil。在这一期的技术雷达中,我们要强调的是 JotaiZustand。它们都是React的状态管理包,且目标都是小巧易用。也许不完全是巧合,两者的名字分别是日语和德语中对于单词 状态的翻译。 除了这些相同点,两者的设计也是有所不同的。Jotai的设计与Recoil相似,都是状态由存储在React组件树中的原子组成,而Zustand将状态存储在React外部的单个状态对象中,就像Redux采取的方式一样。Jotai的作者提供了一个非常有用的对照表,可供你决策使用哪一个工具。

    历史信息
  • 在跨平台移动开发的趋势下,Kotlin Multiplatform Mobile(KMM) 成为了该领域的新成员。KMM 是JetBrains 提供的 SDK,它利用了 Kotlin跨平台能力,包含丰富的工具和特性,使整个构建跨平台移动应用的体验变得更加愉悦和高效。使用 KMM 时,您只需用 Kotlin 对业务逻辑和核心应用程序编写一份代码,然后即可被 Android 和 iOS 应用共享。仅在必要时(如利用原生UI元素),您才需要针对特定的平台编写代码,且这些特定代码保存在各个平台的不同视图中。尽管仍处在 Alpha 测试阶段,Kotlin Multiplatform Mobile 正在高速演进中。我们一定会密切关注它,希望您也如此。

    历史信息
  • 随着智能家居和可穿戴设备的日益普及,对直观的图形用户界面(GUI)的需求越来越大。但是,如果从事嵌入式设备的开发,而不是Android/iOS,GUI的开发可能需要花费很多精力。作为一个开源的嵌入式图形库,LVGL越来越受欢迎。LVGL已经适配了主流的嵌入式平台,如NXP、STM32、PIC、Arduino和ESP32。它的内存占用空间非常小:64 kB闪存和8 kB RAM就足以让它工作,而且它可以在各种Cortex-M0低功耗MCU上平稳地运行。LVGL支持触摸屏、鼠标和按钮等输入类型,并包含30多个控件,包括适合智能手表的TileView。它选择的MIT授权并不限制企业和商业用途。我们的团队对这个工具的反馈是积极的,且一个使用LVGL的项目已经投入生产,更确切地说是小批量生产。

    历史信息
  • 构建Web表单仍然是前端开发的长期挑战之一,尤其在使用React技术栈的时候。 我们有很多团队在使用React,他们也一直在使用Formik来简化这个过程。但是现在一些团队正在评估 React Hook Form 作为潜在的替代方法。 React Hooks在React Hook Form出现之前就已经存在,因此可以将它们作为一级概念: 该框架通过钩子将表单元素注册和跟踪为不受控制的组件,从而大大减少了重新渲染的需要。 它的大小和所需的样板代码数量也非常轻量级。

    历史信息
  • 众多机器学习方法的核心皆在于从一组训练数据创建一个模型。一旦创建了模型,就可以反复使用它。然而世界并不是静止的,通常模型需要随着新数据的出现而改变。单纯地重新训练模型可能会非常缓慢和昂贵。增量学习解决了这个问题,它使从数据流中增量地学习成为可能,从而更快地对变化做出反应。作为额外的好处,计算和内存需求更低,而且是可预测的。我们在基于River框架的实现中积累了良好的经验,但到目前为止,我们需要在模型更新后增加校验,有时要手动进行。

    历史信息
  • Webpack 5 模块联邦 功能的发布,受到了微前端架构开发者的高度期待。该功能引入了一种更加标准化的方式来优化模块依赖和共享代码的管理与加载。模块联邦允许共享模块规范,通过一次加载多个模块使用的代码,从而帮助消除微前端之间的重复依赖。它还能够区分本地模块和远程模块,远程模块实际上并不是构建的一部分,而是异步加载的。与诸如npm软件包之类的构建时依赖项相比,这可以显著简化那些随着多个下游依赖而更新的模块的部署。但是请注意,这要求你将所有微前端与Webpack捆绑在一起,而不是像导入映射那样,最终可能会成为W3C标准的一部分。

    历史信息

暂缓?

    无法找到需要的信息?

    每期技术雷达中的条目都在试图反映我们在过去六个月中的技术洞见,或许你所搜索的内容已经在前几期中出现过。由于我们有太多想要谈论的内容,有时候不得不剔除一些长期没有发生变化的条目。技术雷达来自于我们的主观经验,而非全面的市场分析,所以你可能会找不到自己最在意的技术条目。

    新的,移进/移出 ,没有变化