加入收藏 | 设为首页 | 会员中心 | 我要投稿 湖南网 (https://www.hunanwang.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 业界 > 正文

移动开拓中的Web:WebView、WebKit、JSCore、Web 优化、热修复、跨平台……

发布时间:2019-08-21 22:13:36 所属栏目:业界 来源:朱德权
导读:移动开拓规模连年来已经逐渐辞别了蛮横发展的时期,进入了相对成熟的期间。而一向以来 Native 和 Web 的争论从未遏制,通过开拓者孜孜不倦的全力,Web 的服从和 Native 的体验也一向在寻求着均衡。本文聚焦 iOS 开拓和 Web 开拓的交错点,内容涉及到 iOS

今朝业界一部门 App,都回收了集成 LocalServer 的方法,经受部门 Web 哀求,从而到达会见当地资源的目标。同时集成了 LocalServer,通过将当地资源封装成 Response,操作 HTTP 的缓存技能,进一步的优化了读取的时刻和机能,实现条理化的缓存布局。而行使了当地资源的 HTTP 缓存,就必要思量缓存的节制和逾期时刻,凡是可以通过在 URL 上增进当地文件的修改时刻、或当地文件的 MD5 来确保缓存的有用性。

移动开拓中的 Web:WebView、WebKit、JSCore、Web 优化、热修复、跨平台……

GCDWebServer 浅析

解除 Socket 范例,业界风行的 Objc 版针对 HTTP 开源的 WebServer,不过乎年久失修的 CocoaHTTPServer 以及 GCDWebServer。GCDWebServer 是一个基于 GCD 的轻量级处事器,拥有简朴的四个模块:Server/Connection/Request/Reponse,它通过维护 LIFO 的 Handler 行列传入营业逻辑天生相应。在解除了基于 RFC 的 Request/Response 协议计划之后,要害的代码和流程如下:

  1. //GCDWebServer 端口绑定 
  2.   bind(listeningSocket, address, length) 
  3.   listen(listeningSocket, (int)maxPendingConnections) 
  4.      
  5.   //GCDWebServer 绑定Socket端口并吸取数据源 
  6.   dispatch_source_t source = dispatch_source_create(DISPATCH_SOURCE_TYPE_READ, listeningSocket, 0, dispatch_get_global_queue(_dispatchQueuePriority, 0)); 
  7.      
  8.   //GCDWebServer 吸取数据并建设Connection 
  9.   dispatch_source_set_event_handler(source, ^{ 
  10.       ... 
  11.      GCDWebServerConnection* connection = [(GCDWebServerConnection*)[self->_connectionClass alloc] initWithServer:self localAddress:localAddress remoteAddress:remoteAddress socket:socket];  
  12.      
  13.   //GCDWebServerConnection 读取数据 
  14.   dispatch_read(_socket, length, dispatch_get_global_queue(_server.dispatchQueuePriority, 0), ^(dispatch_data_t buffer, int error) { 
  15.      
  16.   //GCDWebServerConnection 处理赏罚GCDWebServerMatchBlock和GCDWebServerAsyncProcessBlock 
  17.   self->_request = self->_handler.matchBlock(requestMethod, requestURL, requestHeaders, requestPath, requestQuery); 
  18.   ... 
  19.   _handler.asyncProcessBlock(request, [completion copy]); 

在 LocalServer 的行使上,也要留意端口的选择(ports used by Apple),以及前靠山切换时 suspendInBackground 的配置和营业处理赏罚。

3. JavaScript Open Api

跟着 App 营业的不绝成长,纯真的 Web 加载与渲染无法满意伟大的交互逻辑,如照相、音视频、蓝牙、定位等,同时 App 内也必要同一的登录态、同一的分享逻辑以及付出逻辑等,以是针对第三方的 Web 页面,Native 必要注册响应的 JavaScript 接供词 Web 行使。

对付 Api 必要提供的手段、接口计划和文档类型,差异的营业逻辑和团队代码气魄威风凛凛会有差异的界说,微信 JS-SDK 声名文档就是一个很好的例子。而离开 JavaScript Open Api 对外的接口计划和封装,在内部的实现上也有一些通用的要害身分,这里简朴罗列几个:

注入方法和机缘

对付 JavaScript 文件的注入,最简朴的就是将 JS 文件打包到项目中,行使 WKWebView 提供的体系函数举办注入。这种方法无需收集加载,可以公道地选择注入机缘,可是无法动态地举办修改和调解。而对付这部门营业需求必要常常调解的 App 来说,也可以把文件存储到 CDN,通过模板替代可能和 Web 相助者约定,在 Web 的 HTML 中通过 URL 的方法举办加载,这种方法固然动态化水平较高,可是必要相助方的共同,同时对付 JS Api 也不能做到拆分地注入。

针对上面的两种方法的不敷,一个较为公道的方法是 JavaScript 文件回收当地注入的方法,同时成立资源的动态更新体系(上文)。这样一方面支持了动态更新,同时也无需相助方的共同,对付差异的营业场景也可以拆分差异的 Api 举办注入,担保安详。

安详节制

(编辑:湖南网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读