Skip to content
Calvin's Blog

摸鱼精选第 2 期

Dec 5, 2021 — Reading

贝壳 App 团队在优化图片内存时的实践过程中,从 Flutter Engine 渲染图片的源码分析开始,先通过 AOP 的方式对 ImagecacheWidthcacheHeight进行设置,这种方式能够减少内存占用,但存在图片释放的及时性、超大图没法解决内存峰值的问题。

最终解决方案是通过原生端做优化,外接纹理的方式。Android 端使用 Glide,iOS 端使用 SDWebImage。

Github 链接:https://github.com/LianjiaTech/bk_flutter_image (opens in a new window)

FDB 的功能包含:

本文分为三部分

全文共三部分:

模板的演进是 C++ 发展史中一条十分重要的线,笔者认为 concept 是这条线中最大的一个特性,本文将详细解读 C++ 的 concept 特性,以期对 C++ 有更深入的了解

本书尝试以实现 µGo 编译器为线索,以边学习边完善的自举方式实现一个玩具语言。

PImpl(Pointer to Implementation)是通过使用指针的方式将实现的细节进行隐藏,它的主要作用是将两个文件见的编译依存关系降至最低。

PIMPL 的优点

  1. 降低模块间的耦合度;
  2. 降低编译依赖,提高编译速度;
  3. 接口和实现分离,提高接口的稳定性。

拓展 1:PImpl Idiom in C++ with Examples (opens in a new window) 拓展 2:Qt 中大量使用 Impl,具体可见https://wiki.qt.io/D-Pointer (opens in a new window)中关于 Q_D 和 Q_Q 宏的解释。

现在 App 的 HTTP 基本上都是基于 Auth0 实现的,登录的时候获取 access_tokenrefresh_token。当access_token 过期时,需要刷新access_token,一般会有一个专门的刷新 API,参数是refresh_token。这个刷新操作在 UI 层面需要不让用户感知到,就是在access_token 过期时就显示登录界面,正确的做法是在 refresh_token过期时,才跳转到登录界面。

Swift 项目的 HTTP 基本上都是基于 Moya 和 RxSwifM 实现,作者先自定义了一个 MoyaProvider,然后 Override 了 func request(_ token: Target) 方法,这样可以在检测到状态码是 401 时,自动调用 refresh 接口,刷新成功之后,自动调用原来的接口。

本文将从最基本的概念开始逐步讲解 Whistle 功能,包含以下内容: