公告:“业余草”微信公众号提供免费CSDN下载服务(只下Java资源),关注业余草微信公众号,添加作者微信:xttblog2,发送下载链接帮助你免费下载!
本博客日IP超过2000,PV 3000 左右,急需赞助商。
极客时间所有课程通过我的二维码购买后返现24元微信红包,请加博主新的微信号:xttblog2,之前的微信号好友位已满,备注:返现
受密码保护的文章请关注“业余草”公众号,回复关键字“0”获得密码
所有面试题(java、前端、数据库、springboot等)一网打尽,请关注文末小程序
腾讯云】1核2G5M轻量应用服务器50元首年,高性价比,助您轻松上云
本博客日IP超过2000,PV 3000 左右,急需赞助商。
极客时间所有课程通过我的二维码购买后返现24元微信红包,请加博主新的微信号:xttblog2,之前的微信号好友位已满,备注:返现
受密码保护的文章请关注“业余草”公众号,回复关键字“0”获得密码
所有面试题(java、前端、数据库、springboot等)一网打尽,请关注文末小程序
腾讯云】1核2G5M轻量应用服务器50元首年,高性价比,助您轻松上云
腾讯开源的 Hybrid 框架 VasSonic 这两天被推出来了,今天知乎上也是热评如潮。上面详细的说明了 VasSonic 的发展史。
从目前来看,以后微信的小程序打开速度将更快了。下面说说VasSonic的主要原理。
VasSonic的主要原理
VasSonic在内容请求方面用了三招:
- 动态缓存
- 增量更新
- 并行加载
通过对HTML内容添加注释来定义了一个自定义的格式,对HTML文档进行分块。
- 动态缓存:指在页面范围内,对分块后的同容进行更细化(全局、局部)的缓存。
- 增量更新:有缓存的情况下,只对分块后的局部内容进行增量更新。
- 并行加载:VasSonic使用终端应用层原生传输通道取代系统浏览器内核自身资源传输通道来请求页面主资源。就是通过VasSonic在WebView初始化过程中时,同步并行从服务器加载页面,而不是webview初始化后再去请求。
下面回到今天的主题。iOS对接Hybrid框架VasSonic教程。
iOS使用
步骤1:导入并声明
构建声波框架 将Sonic.framework添加到主项目中的依赖项。然后@import Sonic注册SonicURLProtocol:
[NSURLProtocol registerClass:[SonicURLProtocol class]]; @interface SonicWebViewController : UIViewController<SonicSessionDelegate,UIWebViewDelegate>
步骤2:实施 SonicSessionDelegate
#pragma mark - Sonic Session Delegate /* * 调用回来时,声波会发送请求。 */ - (void)sessionWillRequest:(SonicSession *)session { //This callback can be used to set some information, such as cookie and UA. } /* *当Sonic要求WebView重新加载时回调,例如模板更改或发生错误。 */ - (void)session:(SonicSession *)session requireWebViewReload:(NSURLRequest *)request { [self.webView loadRequest:request]; }
步骤3:在WebView ViewController中使用Sonic
- (instancetype)initWithUrl:(NSString *)aUrl { if (self = [super init]) { self.url = aUrl; //用URL创建一个声音会话。 [[SonicClient sharedClient] createSessionWithUrl:self.url withWebDelegate:self]; } return self; } /* * 在WebView初始化后立即发送Sonic属性的请求。 */ - (void)loadView { [super loadView]; self.webView = [[UIWebView alloc]initWithFrame:self.view.bounds]; self.webView.delegate = self; self.view = self.webView; NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:self.url]]; /* * 如果SonicSession不为空,Sonic使用自定义SonicWebRequest而不是原始网络请求。 */ if ([[SonicClient sharedClient] sessionWithWebDelegate:self]) { [self.webView loadRequest:sonicWebRequest(request)]; }else{ [self.webView loadRequest:request]; } }
步骤4:通过JavaScript回调与网站交互。
- (void)getDiffData:(NSDictionary *)option withCallBack:(JSValue *)jscallback { /* * ViewController发送Sonic请求并通过回调返回结果。 */ [[SonicClient sharedClient] sonicUpdateDiffDataByWebDelegate:self.owner completion:^(NSDictionary *result) { /* * 返回结果。 */ NSData *json = [NSJSONSerialization dataWithJSONObject:result options:NSJSONWritingPrettyPrinted error:nil]; NSString *jsonStr = [[NSString alloc]initWithData:json encoding:NSUTF8StringEncoding]; JSValue *callback = self.owner.jscontext.globalObject; [callback invokeMethod:@"getDiffDataCallback" withArguments:@[jsonStr]]; }]; }
步骤5:删除声音会话。
- (void)dealloc { [[SonicClient sharedClient ] removeSessionWithWebDelegate:self ]; }
OK,经过上面5个步骤,一个完整的IOS实例就完成了。赶紧试试吧。
最后,欢迎关注我的个人微信公众号:业余草(yyucao)!可加作者微信号:xttblog2。备注:“1”,添加博主微信拉你进微信群。备注错误不会同意好友申请。再次感谢您的关注!后续有精彩内容会第一时间发给您!原创文章投稿请发送至532009913@qq.com邮箱。商务合作也可添加作者微信进行联系!
本文原文出处:业余草: » iOS对接Hybrid框架VasSonic教程