iOS对接Hybrid框架VasSonic教程

NDIS herman 153浏览 0评论

腾讯开源的 Hybrid 框架 VasSonic 这两天被推出来了,今天知乎上也是热评如潮。上面详细的说明了 VasSonic 的发展史。

从目前来看,以后微信的小程序打开速度将更快了。下面说说VasSonic的主要原理。

VasSonic的主要原理

VasSonic在内容请求方面用了三招:

  1. 动态缓存
  2. 增量更新
  3. 并行加载

通过对HTML内容添加注释来定义了一个自定义的格式,对HTML文档进行分块。

  • 动态缓存:指在页面范围内,对分块后的同容进行更细化(全局、局部)的缓存。
  • 增量更新:有缓存的情况下,只对分块后的局部内容进行增量更新。
  • 并行加载:VasSonic使用终端应用层原生传输通道取代系统浏览器内核自身资源传输通道来请求页面主资源。就是通过VasSonic在WebView初始化过程中时,同步并行从服务器加载页面,而不是webview初始化后再去请求。

下面回到今天的主题。iOS对接Hybrid框架VasSonic教程。

vas Sonic

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实例就完成了。赶紧试试吧。