Sep 22
我们知道在移动端设备上,GPU环节大多都会采用Tile Based Rendering方案。更具体来说,所有的iOS设备的GPU都采用的Tile-Based Deferred Rendering(TBDR)架构。正好翻阅到一篇WWDC2014的Advanced Graphics And Animation Performance文章对iOS中的TBDR进行了详解,因此针对iOS中Tile Based Rendering的基本情况与可能存在并可以进行的适配方案进行讨论。
Sep 21
最近使用html2canvas时遇到一个文字排版错误的缺陷,虽然html2canvas本身兼容性问题挺多的,但是这个看起来是一个广泛发生的问题,便进行了深入追踪。问题现象如下:
點擊在新視窗中瀏覽此圖片
相关issues包括 https://github.com/niklasvh/html2canvas/issues/2648https://github.com/niklasvh/html2canvas/issues/2696等,挺多的。
Sep 5
大家有没有注意到js中有两种对象,一种叫object一般翻译为“对象”,一种叫Object一般不作翻译。typeof得到的"object"即object,除了翻译为对象之外,在讨论时更常见的叫法叫“引用对象”。如果要用实际的例子,"typeof {}"与"typeof []"得到的都是"object"即对象;"[].toString()"得到的[object Array]而"{}.toString()"得到的[object Object]即表示[]属于object数据结构是Array而{}属于object数据结构是Object,同理比如我createElement('div')即能得到一个[object HTMLDivElement]。
點擊在新視窗中瀏覽此圖片
Aug 20
在HTML中的input有一个maxLength的属性,可以很好的控制最大输入文本长度。但是其他GUI框架如iOS/OSX,flutter就没有这样的东西,Android的textview和react-native的input的功能也不健全,web开发也有遇到自己处理input的情况,就需要自己处理maxLength的问题。本小记记录标准的处理方案逻辑。

maxLength咋看起来好处理,但是一不留心bug特别多,看看京东web结算页的input出现的问题:
點擊在新視窗中瀏覽此圖片
Aug 1
前几天Log4j的问题爆出,虽然和移动端无关,不少Android同学也顺带排查了下java项目中是否被误引入log4j(毕竟log4j还真有Android桥接版)。当然除了线下工具链里,线上代码是不存在log4j的,不过话说回来,同时也注意到各个项目中logger使用的混乱与标准不一致。从根因上讲,移动端的logger在解决团队问题的同时也有大量技术问题要解决,因此整理一下,一个优秀的移动端Logger,需要符合哪些期待并且目前最合理的技术方案有哪些?
Jul 6
随着现在互联网工程无限扩大的趋势,每一个技术方向均在经历各种拆拆拆,模块化解耦的过程,当然客户端也不例外。客户端早在5年前就完成了组件化到模块化这一过程,各种模块化方法层出不穷并在各大项目中落地。然而模块化之后,大家前往配置化的路途上却是相当坎坷,相对于服务端方案,web前端方案来说确实拿不出手。在服务端spring风格的xml配置和注解配置让javaweb服务业务基础搭建效率大大提升,web配置甚至能让运营完成活动落地页的搭建而不关心基建部分,它们的配置化都是革新性的银弹技术方案。而客户端做配置化能成为银弹么?
Jun 22
WWDC20221讲到iOS15在相机部分新增了不少识别相关的功能,一种有一项就是人物聚焦——对应背景模糊。同时,我们排查SDK变化时,注意到CIFilter新增了一个personSegmentationFilter,看起来就是对应这个功能的实现了。不过翻阅文档https://developer.apple.com/documentation/coreimage/cifilter/3750390-personsegmentationfilter?language=objc,苹果真是啥都没有讲。尝试了之后,我得到了能实现人物聚焦(背景虚化)的效果的CIFilter使用方式。
Jun 10
iOS15在UIKit中的改动并不多,其中一大项目是为UIButton新增了UIButtonConfiguration功能,为标准化button组件样式复用增加了更多的可能性。
之前我提过从里氏替换原则的角度,目前我们常用的复用UIButton的方法——继承+约束,其实是不合理的,那UIButtonConfiguration能解决我们的问题么?看起来不能。
May 29
业务客户端开发,在某些业务领域总会遇到高并发问题。这里并不是指的日常访问流量高并发,比如本来应用访问流量大QPS高并不是问题。而是特指的用户业务流程高并发影响大:交易系统订单秒杀如何处理?营销推送同时触达怎么处理?紧急业务状态变更证明处理?当然这些问题在服务端高并发的解决方案中均有涉及,但是随着治理与优化的深入一定会到客户端这边来。同时客户端还有一个问题分发滞后性,假如1个月之后双11我们要提前进行并发优化储备,到双11应用覆盖面能有80%顶天了。

因此本文讨论的是,具有高并发业务特征的客户端,如何在业务开发设计阶段针对这一特点做好开发储备,防范于未然。
Apr 24
在客户端开发的过程中,我们总是会考虑下系统大字号的支持。之前的产品App统计的数据上,实际上有25%的用户调整到了比系统默认字号更大的字体,甚至在iOS上有10%的用户调整到归为Accessibility的特大号字体了(如图)。而事实上,iOS应用几乎没有应用去做大字号适配,目前的主流App相对来说腾讯的软件做得最好,QQ会根据系统设置自动适配,而微信则单独提供了内部字号设置界面。
點擊在新視窗中瀏覽此圖片