h5界面事件回传原生反应时间研究

一、问题

使用h5来实现某些界面,有时是方便而且快捷的,但是h5界面在iOS设备上的表现始终有些迟顿感,比如我们在h5界面上布一个button并用js来接收事件,其反应总会让人有一种卡顿的感觉。

对此,我们使用计时的方式,各种从h5传事件回原生的方式进行统计。有以下方式:1、UIWebView使用js接收事件;2、UIWebView使用JSCore接收事件;3、WKWebView使用ScriptDelegate接收事件。4、直接获取点击,然后通过elementFromPoint来计算元素,然后在oc中写事件响应。

二、过程

1、使用UIWebView原生js

html中:

js 事件:

function inwebAction() {

let date = new Date();

console.log("inweb:" + date.getTime()/1000);

alert("hello");

}

为了测量该方法的反应时间,我们使用alert来弹出一个时间: alert("inweb:" + date.getTime()/1000);

给webView增加一个点击手势,在点击时记录时间:

self.web = [[UIWebView alloc] initWithFrame:self.view.bounds];

self.web.autoresizingMask = UIViewAutoresizingFlexibleWidth|UIViewAutoresizingFlexibleHeight;

[self.view addSubview:self.web];

NSLog(@"tap time: %.3f", [[NSDate date] timeIntervalSince1970]);

测出的反应时间:1513235863.718 - 1513235864.101 = 0.38

1513235976.569 - 1513235976.921 = 0.35

1513236032.943 - 1513236033.296 = 0.35

2、使用jscore来接收事件

在oc中使用jscore来写入一个回调方法:

JSContext *ctx = [self.web valueForKeyPath:@"documentView.webView.mainFrame.javaScriptContext"];

ctx[@"actionJsCore"] = ^() {

NSLog(@"tap time: %.3f", [[NSDate date] timeIntervalSince1970]);

UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"提示" message:@"点击了" delegate:nil cancelButtonTitle:@"取消" otherButtonTitles:nil];

[alert show];

};

然后在js中调用这个方法:

测出反应时间: 1513236281.103 - 1513236281.456  = 0.35

1513236302.359 - 1513236302.712  = 0.353

1513236332.141 - 1513236332.494  = 0.353

跟上一个方法差不多。

3、使用wkwebview来处理事件

html里:

function usewk() {

// AppModel是我们所注入的对象

window.webkit.messageHandlers.AppModel.postMessage({body: 'call js confirm in js'});

}

oc中处理事件:

[self.wkweb.configuration.userContentController addScriptMessageHandler:self name:@"AppModel"];

- (void)userContentController:(WKUserContentController *)userContentController didReceiveScriptMessage:(WKScriptMessage *)message {

if ([message.name isEqualToString:@"AppModel"]) {

NSLog(@"tap time: %.3f", [[NSDate date] timeIntervalSince1970]);

UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"提示" message:@"点击了" delegate:nil cancelButtonTitle:@"取消" otherButtonTitles:nil];

[alert show];

}

}

结果:1513236537.402 - 1513236537.763 = 0.361

1513236584.727 - 1513236585.083 = 0.356

1513236625.780 - 1513236626.136 = 0.356

似乎,wk中处理比uiwebview还要慢一些。

4、直接在oc中处理

直接获取点击手势的位置,然后通过该位置来获取被点击的元素:

CGPoint pt = [tap locationInView:self.web];

NSString *js = [NSString stringWithFormat:@"window.document.elementFromPoint(%f, %f).id", pt.x, pt.y-20];

NSString *value = [self.web stringByEvaluatingJavaScriptFromString:js];

if ([value isEqualToString:@"oc"]) {

NSLog(@"tap time: %.3f", [[NSDate date] timeIntervalSince1970]);

UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"提示" message:@"点击了" delegate:nil cancelButtonTitle:@"取消" otherButtonTitles:nil];

[alert show];

}

实测这种方式的时间接近于原生。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 215,133评论 6 497
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,682评论 3 390
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 160,784评论 0 350
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,508评论 1 288
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,603评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,607评论 1 293
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,604评论 3 415
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,359评论 0 270
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,805评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,121评论 2 330
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,280评论 1 344
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,959评论 5 339
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,588评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,206评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,442评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,193评论 2 367
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,144评论 2 352

推荐阅读更多精彩内容