WKWebview 加载过程中的性能指标图解

背景

讨论 WKWebview 在加载 h5 页面时,Objective-C里的 WKNavigationDelegate、window.performance.timing、WKUserScriptInjectionTimeAtDocumentStart、WKUserScriptInjectionTimeAtDocumentEnd,以及和前端最常用的document.readystate\domContentLoaded\document.onload 事件等时间维度的关系,为native和前端在相互调用时,能够明确沟通的时机。

探索 messageHandler 的传输性能极限

本次测试的目标是 iOS 8+ 之后提供的 WKWebview 提供的 JS 和 Native 通讯机制之 messageHandler,比较浅显的探索下它各方面的极限。 测试 Demo

主要的测试场景包括

  1. messageHandler 可传输的数据类型有哪些?
  2. 以字符串为例,messageHandler 最多可传输多少字节?
  3. 承接 2,在不同量级下的传输效果(是否丢失、速度等)如何?
  4. 如果是 native 向 WKWebview 传输数据,是否有类似的表现?
  5. 探索使用 messageHandler 的最佳方法。

测试方法

  1. 测试设备,iPhone XR 模拟器,Xcode 10.2
  2. 硬件,MacBook Pro (13-inch, 2016),Mem 16 GB 2133 MHz LPDDR3,3.1 GHz Intel Core i5
  3. 测试流程。启动 App,将 Xcode 切换到 Debug Navigation,观察内存消耗;同时打开 Safari 开发者工具,切换到 Timing tab 里,观察内存的占用情况

objc 中最好的多行字符串声明方式

1. 问题

在 AppHost.framework【注1】(以下简称 AppHost) 的编码中,需要处理很多预先导入到 webview 里的 js 文件,有一些不关键功能是用 .js 的文件读到内存的,还有一些比较短小的 js 源码,如;

1
2
3
4
          (function(e){
                e.setAttribute('src','%@');
                document.getElementsByTagName('body')[0].appendChild(e);
            })(document.createElement('script'));

要写到代码里和 objc 代码一起。还有,在 AppHost 里,有个 ah_doc 模块,在编写注释时,需要输出完整的 js 代码,如

1
2
3
4
5
6
7
8
window.appHost.invoke('startNewPage', { 'url': 'http://you.163.com/','title': 'title',
    'type': "push",
    'backPageParameter': {
        'url': 'http://qian.163.com',
        'title': 'title',
        'type': 'push'
    }
})

这个字符串里包含了大量的单引号、双引号,而且为了保持可读性、维护性,需要多行输出。

这是非常典型的问题,传统的多行字符串声明有没有方法很好的解决?

记一次独自带小宝宝

今天是妈妈的生日,她和其他的兄弟 3 个人去看《风中有朵雨做的云》电影,晚上 9 点到 11 点就是我和宝宝两个人了,丈母娘他们在楼下,也有自己的事情,想想自己配宝宝逗他玩,应该不是问题,所以给他们买好票,到 8 点半了,还送他们上车。 在临走之前,我还告诉老婆,让宝宝自己先吃好奶,这样就不用怕她一会需要吃奶,然后吃不到,哇哇哇的哭。 没想到我还是想的太简单了。 刚刚开始的时候我陪她在床上玩她的玩具,她对当当当响的东西,

关于TapGesture、UIResponder 链和 target-action 事件的相互影响的机理和应用

https://github.com/hite/IOSEventTest

这是一个供探索、验证、对比测试而精心设计的demo。
用来研究 UIControl,普通的 View 在 使用 target-action, addTapGestureRecognizer 方式时,不同情况下如何相互作用。
试图解答以下问题;

  1. 第一响应者如何确认?(包括 alpha,hidden,clipToBound 属性的影响,都不是本次试验的重点)
  2. target-action 和 tapGesture 混用时,如何表现,加入变量 cancelsTouchesInView 时,是否有不同?
  3. target-action 或者 tapGesture 是否各自都有多个?
  4. 包括相同类型 event state 和 gesture Type 是否有多个?
  5. 包括不同类型 event state 和 gesture Type 是否有多个?
  6. 相同和不同类型 target-action 或者 tapGesture 的添加顺序和执行顺序是否有关系?

新型 code review 系统设计

主要设计方案在 keynote 里,属于一个前期的功能规划设计,它的特点是让 发掘 code 本身的资源,让 code 可以流动起来,建立人和 code 直接的关系。 详细见链接

关于是否有必要学习少儿编程的观点

回答下内网论坛里的评论

没有必要

编程目前是一种职业,在不久将来,它将成为一种日常的技能,我们生活实用的电器、设施都是由编程来控制的。但是是不是都必须要去学编程呢?这些设施和电器等他们的目的是让人类的生活更加便利,所以只需要一部分让使用编程的技巧,让剩余的人能够不需要参与编程,就能使用,这才是基础设置和电器的存在的意义。

兰州:一个有希望的城市

因为家人生病的原因,从杭州到兰州看他,时隔10年再次踏上了这块土地,这块新面孔里留着老样子的地方,与其说勾起了我的回忆,不如说对这些年来他的变化,感到十分的高兴。这几天来看到的人事、城市建设、旧地故友的变迁,在不动声色中,发生着的变化。 下了飞机,我这十年前留下的冻疮的脚,里面被自己的鞋子挤压的厉害。这个病就像骑车这样的技巧,已经变成了一种本能,不管过了多久,到了兰州这个气候了,依然找到我,这些是一