精华内容
下载资源
问答
  • wkwebview和uiwebview对比
    千次阅读
    2018-06-01 10:43:54

    在开发过程中,iOS 中实现加载 web 页面主要有两种控件,UIWebView 和 WKWebview,两种控件对应具体的实现方法不同。WKWebView 是苹果在iOS 8中引入的新组件,目的是提供一个现代的支持最新Webkit功能的网页浏览控件,摆脱过去 UIWebView的老、旧、笨,特别是内存占用量巨大的问题。它使用与Safari中一样的Nitro JavaScript引擎,大大提高了页面js执行速度。的。
    相比于UIWebView的优势:
    在性能、稳定性、占用内存方面有很大提升;
    允许JavaScript的Nitro库加载并使用(UIWebView中限制)
    增加加载进度属性:estimatedProgress,不用在自己写假进度条了
    支持了更多的HTML的属性

    具体分析WKWebView的优劣势
    1.内存占用是UIWebView的1/4~1/3
    2.页面加载速度有提升,有的文章说它的加载速度比UIWebView提升了一倍左右。
    3.更为细致地拆分了 UIWebViewDelegate 中的方法
    4.自带进度条。不需要像UIWebView一样自己做假进度条(通过NJKWebViewProgress和双层代理技术实现),技术复杂度和代码量,根贴近实际加载进度优化好的多。
    5.允许JavaScript的Nitro库加载并使用(UIWebView中限制)
    6.可以和js直接互调函数,不像UIWebView需要第三方库WebViewJavascriptBridge来协助处理和js的交互。
    7.不支持页面缓存,需要自己注入cookie,而UIWebView是自动注入cookie。
    8.无法发送POST参数问题

    这个是WKWebView比UIWebView内存方面的优化比较:《实测:UIWebView 与WKWebView 性能内存优化对比》 https://www.jianshu.com/p/181889939a85

    iOS8.0是2014年9月17日发布了,距离2017年已经有近三年了。现在使用ios10.0以下的系统已经很少了,iPhone 6plus的初始操作系统的iOS8.4(iPhone 6和iPhone 6 plus在苹果的手机占有还很高),iOS8.0以下的系统已经可以忽略了,不能让1%的用户影响99%的用户体验。所以WKWebView代替UIWebView是大趋势。

    更多相关内容
  • 2.WK将UIWebViewDelegate和UIWebView封装成了14个类3个协议 3.支持更多的H5特性 4.高达60FPS的滚动刷帧率内置手势 5.性能、稳定性、功能都更好,加载网页占内存更少(比如模拟器加载百度占内存23M,只有...

    一、WebViewView比UIWebView的优点

    1.WK是iOS8以上推出,目前都是建议用WK

    2.WK将UIWebViewDelegate和UIWebView封装成了14个类和3个协议

    3.支持更多的H5特性

    4.高达60FPS的滚动刷帧率和内置手势

    5.性能、稳定性、功能都更好,加载网页占内存更少(比如模拟器加载百度占内存23M,只有UIWebView的1/4左右)

    6.允许JS的Nitro加载并使用

    二、UIWebView实现交互的方法和原理

    UIWebView实现H5与iOS混编主要通过JavaScriptCore这个框架去实现的,具体这个框架的原理请移步之前写的2篇

    JavaScriptCore详解https://blog.csdn.net/idealPC/article/details/115075029

    交互即跳转、调用方法、传值https://blog.csdn.net/idealPC/article/details/108399793

    三、WKWebView实现交互的方法和原理

    WKScriptMessageHandler

    1.H5调iOS

    点击JS的登录按钮,JS将登录成功后的token数据传递给iOS,iOS将收到的数据展示出来

    实现原理:
    1、JS与iOS约定好方法jsToOcMethod,用作JS在调用iOS时的方法;
    2、iOS使用WKUserContentController的-addScriptMessageHandler:name:方法监听name为jsToOcMethod的消息;
    3、JS通过window.webkit.messageHandlers.jsToOcMethod.postMessage()的方式对jsToOcMethod方法发送消息;
    4、iOS在​​​​​​-userContentController:didReceiveScriptMessage:方法中读取name为jsToOc的消息数据message.body。

    WKScriptMessageHandler协议的代理方法:-userContentController:didReceiveScriptMessage: js通过messageHandlers调用方法、传递参数,在这个代理里都可以获取到​

    2.iOS调H5

    这点是和UIWebView中类似

    通过WKWebView的evaluateJavaScript: completionHandler:

     

    参考文章地址:https://www.jianshu.com/p/56f0215cb15e

    https://blog.csdn.net/sinat_31177681/article/details/90293727

     

    展开全文
  • 对于最近新发布的新组件...wkwebviewUIwebview之间的一些函数的对比uiwebview的函数: - (void)webViewDidStartLoad:(UIWebView *)webView;  //开始加载的时候执行该方法。 - (void)webViewDidFini

          对于最近新发布的新组件wkwebview,网上的资料不多,我自己摸索了一下,有了一些心得。wkwebview与UIwebview之间的一些函数的对比;

    uiwebview的函数:

    - (void)webViewDidStartLoad:(UIWebView *)webView;

                //开始加载的时候执行该方法。

    - (void)webViewDidFinishLoad:(UIWebView *)webView; 

               //加载完成的时候执行该方法。

    - (void)webView:(UIWebView *)webView didFailLoadWithError:(NSError *)error;

              //加载页面出错时

    而对于新组件wkwebview的这些函数则是:

    wkwebview的函数:

    - (void)webView:(WKWebView *)webView didStartProvisionalNavigation:(WKNavigation *)navigation;

            //开始加载的时候执行该方法。

    - (void)webView:(WKWebView *)webView didFinishNavigation:(WKNavigation *)navigation;

           //加载完成的时候执行该方法。

    - (void)webView:(WKWebView *)webView didFailProvisionalNavigation:(WKNavigation *)navigation withError:(NSError *)error;

           //加载页面出错时



    我做了一个比较,一个是用uiwebview做的简单浏览器,一个是用wkwebview做的简单浏览器

    具体的需要用XCODE进行编译,理解;这是链接:http://pan.baidu.com/s/1c0q4Sl6

    展开全文
  • 1.UIWebView和WKWebView UIWebView 1)UIWebView是iOS2就有了的,占用内存也比较多,内存峰值也挺夸张的 2)UIWebView继承自UIView 是用来加载网页的类,可以简单理解成就是一个view WKWebView 1)相比UIWebView的话,...

    1.UIWebView和WKWebView

    UIWebView

    1)UIWebView是iOS2就有了的,占用内存也比较多,内存峰值也挺夸张的

    2)UIWebView继承自UIView 是用来加载网页的类,可以简单理解成就是一个view

    WKWebView

    1)相比UIWebView的话,支持更多的HTML5的特性

    2)滚动刷新率在60fps以及内置手势

    3)添加了加载进度属性:estimatedProgress

    4)和Safari想听的JavaScript引擎

    WKWebView的流程

    在发送请求之前决定是否跳转 --> 第一次进入页面 --> 页面开始加载时调用 --> 收到服务器跳转请求之后执行 --> 收到服务器跳转请求之后再执行 --> 收到响应后决定是否跳转 --> 内容开始返回时调用 --> 页面加载完成之后调用 

    之后进入页面 --> 在发送请求之前决定是否跳转 -->  收到服务器跳转请求之后执行 --> 收到服务器跳转请求之后再执行 --> 收到响应后决定是否跳转 --> 内容开始返回时调用 --> 页面加载完成之后调用 

    在开发过程中会经常遇到网页加载慢的现象,原因有:网速过慢,大图渲染,图片异步下载等,只要与线程异步处理有关都是,设备系统只是影响用户体验度。

    OC和JS的交互方式

     WKWebViewConfiguration *config = [[WKWebViewConfiguration alloc] init];

        WKUserContentController *userController = [[WKUserContentController alloc] init];

        config.preferences.javaScriptEnabled = YES;

        config.userContentController = userController;

        [userController addScriptMessageHandler:self name:@"callbackNative"];

            WKWebView *web = [[WKWebView alloc] initWithFrame:CGRectMake(0, TOPBAR_H,SCREEN_W,SCREEN_H - TOPBAR_H) configuration:config];

        self.webView = web;

        web.UIDelegate = self;

        web.navigationDelegate = self;

        [web loadRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:self.urlStr]]];

        [self.view addSubview:web];

     

    #pragma mark - 处理与js交互回调

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

    {

        //message中包含了js中所有的信息

        //有两个重要的属性,一个是name,进行区分判断具体响应某个方法

        //body中就是js传过来的参数

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

            NSLog(@"----%@\n----%@\n-----%@",message,message.body,message.frameInfo);

            id obj = [NSJSONSerialization JSONObjectWithData:[message.body dataUsingEncoding:NSUTF8StringEncoding] options:NSJSONReadingAllowFragments error:nil];

            NSDictionary *dict = obj;

         }

    }

    网页内部也会进行一些处理方式,比如goback, [self.webview reload]等操作

    在具体落实开发详情页面,会使用到网页进行加载,需要的就是计算webview的高度,再计算scrollView的高度,计算webview的高度就很耗时,因为网页是需要全部展示出来后才会去计算高度的,先算高度,再展示网页的文字,再展示网页的图片,图片可以慢慢缓存后再显示,这样的话不至于白屏时间过长

     

    第一步:添加观察者

    [_webView.scrollViewaddObserver:selfforKeyPath:@"contentSize"options:NSKeyValueObservingOptionNewcontext:nil];

    第二步:观察者监听webView的contentSize变化

    - (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void*)context {

       if ([keyPathisEqualToString:@"contentSize"]) {

          dispatch_async(dispatch_get_global_queue(0,0), ^{

              //document.documentElement.scrollHeight

              //document.body.offsetHeight

              [_webViewevaluateJavaScript:@"document.documentElement.offsetHeight"completionHandler:^(id_Nullable result,NSError * _Nullable error) {

                  CGRect frame =_webView.frame;

                 frame.size.height = [resultdoubleValue] + 50;

                 _webView.frame = frame;

                 _scrollViewHeight =220 + _webView.height;

                 _scrollView.contentSize =CGSizeMake(kScreenWidth,_scrollViewHeight);

              }];

           });

        }

    }

    第三步:移除观察者

    - (void)dealloc

    {

       [_webView.scrollViewremoveObserver:selfforKeyPath:@"contentSize"];

    }

     

    展开全文
  • 首先来看下UIWebView的做法: UIWebView *webView = [[UIWebViewalloc]initWithFrame:CGRectMake(0,0,WIDTH,0)]; webView.delegate =self; [self.viewaddSubview:webView]; [webView ...
  • WKWebView替换UIWebView

    2017-08-16 19:17:03
    先使用WKWebView基本方法写个例子,加载baidu页面,写法跟UIWebView类似- (void)viewDidLoad { [super viewDidLoad]; // Do any additional setup after loading the view. WKWebViewConfigu
  • 对比UIWebView:加载速度慢、内存占用多WKWebView(苹果官方文档):在性能、稳定性、功能方面有很大提升(高达60fps的滚动刷新率以及内置手势);支持了更多的HTML5特性、JavaScript库;将UIWebViewDelegate与UIWebView...
  • UIWebView替换WKWebView看这篇就够了

    千次阅读 2020-05-19 09:29:15
    调研UIWebView和WKWebView的异同 一、UIWebView 介绍 1.UIWebView网页加载展现的几种方法 // 使用 NSURLRequest 的方式加载网页 (url可以是远程也可以是本地) - (void)loadRequest:(NSURLRequest *)request; /*! ...
  • 在app的内容页(详情页)中,富文本的显示一直是经常需要处理的问题,而通常在...以下对这3种方式进行内存的测试对比,毕竟详情页是相对比较大,而且打开频率高的页面,所以内存占用是必须要考虑的问题。基本环境:...
  • WKWebView性能比UIWebView多两倍 WKWebView呈现大约8500个对象, UIWebView呈现大学3500个对象 CPU使用率的百分比说明了实际性能,WKWebView使用25%的CPU呈现相同数量的粒子,而UIWebView使用90%的CPU用于同一任务...
  • WKWebViewUIWebView

    2017-04-07 15:37:00
    applegoogle为webkit该浏览器引擎的发扬光大做出了重要贡献,在WWDC 2014发布会上发布iOS8中,apple公布了WebKit...webkit使用WKWebView来代替IOS的UIWebView和OSX的WebView,并且使用Nitro JavaScript引擎,这意...
  • http://www.skyfox.org/ios-wkwebview-cookie-opration.html 经典  1》cookie的使用场景-场景描述 我们以实际例子驱动的方式来开始这个话题。 实际例子描述:在App里内嵌一个UIWebView,通过UIWebView打开...
  • 一、整体介绍UIWebView自iOS2就有,WKWebView从iOS8才有,毫无疑问WKWebView将逐步取代笨重的UIWebView。通过简单的测试即可发现UIWebView占用过多内存,且内存峰值更是夸张。WKWebView网页加载速度也有提升,但是并...
  • 但是我做了一个PPT,更方便详细的介绍了两者的用法区别,并在调试中遇到的问题,详细请下载demo文件,内含PPT、demo源码二、调研笔记:调研UIWebview和WKWebview异同点 1、UIWebview+Javasc
  • WKWebView的使用各种坑的解决方法(OC+Swift) WKWebView 的使用
  • UIWebViewWKWebView

    2017-07-07 14:50:20
    WKWebView 是 iOS 8 引入的一个 WebKit API,替换 iOS 的 UIWebView OSX 的 WebView,WKWebView 使用 Nitro JavaScript 引擎,运行 JavaScript Safari 一样快。WKWebView UIWebView 使用上有很多区别,这篇...
  • 引擎中包含的UIWebView不能直接用WKWebView替换,因为涉及调用的地方很多,在触控官方论坛网站上找到了修改前后的对比https://github.com/cocos2d/cocos2d-x/pull/20098/files,官方论坛也提供了一些版本的升级方式...
  • wkwebview是苹果公司推出的替代uiwebview的方案,它在内存占用稳定性方面有很大的优势,性能对比此篇文章就不讲了。 但是就目前情况而言,uiwebview还有有一些不能被完全替代的原因,比如wkwebview无法用...
  • UIWebView自iOS2就有,WKWebView从iOS8才有,毫无疑问WKWebView将逐步取代笨重的UIWebView。通过简单的测试即可发现UIWebView占用过多内存,且内存峰值更是夸张。WKWebView网页加载速度也有提升,但是并不像内存那样...
  • Native开发原生应用是手机操作系统厂商(目前主要是苹果的iOSgoogle的Android)对外界提供的标准化的开发模式,他们对于native开发提供了一套标准化实现优化方案。但是他们存在一些硬伤,比如App的发版周期偏长...
  • 本文是本系列文章的第二篇,主要为小伙伴们分享下WKWebView相关的内容:iOS中UIWebViewWKWebView、JavaScript与OC交互、Cookie管理看我就够(上)iOS中UIWebViewWKWebView、JavaScript与OC交互、Cookie管理看我...
  • WKWebView 的优势不必多说,这里将两者与 JS 的交互分别做对比. 首先,前端以及安卓同学定义好一样的方法: js 调用原生: jsCallNativeDoSomethingWithParams() 原生调用js: nativeCallJSSendParams() ...
  • WebView就是一个内嵌浏览器控件,在iOS中主要有两种WebView:UIWebView和WKWebViewUIWebView是iOS2之后开始使用,WKWebView是在iOS8开始使用,WKWebView将逐步取代笨重的UIWebView。 由于项目需要,新近实现了一个...
  • UIWebViewWKWebView 支持 WebP 图片显示

    千次阅读 2019-05-08 16:16:53
    WebP 作为一种更高效的图片编码格式,平均大小比 PNG/JPG/ GIF / 动态 GIF 格式减少 70%(对比测试页面),且质量没有明显的差别,是其他图片格式极佳的替代者。 一、MagicWebViewWebP.framework 架构 主要文件...
  • UIWebKit和WKWebView体验

    千次阅读 2015-09-13 09:38:41
    工作忙好久没有学习新东西了,第...体验uiwebkit和wkwebview的区别: 代码如下: import UIKit import WebKit class ViewController: UIViewController { // var wk:WKWebView!  var uk:UIWebView!  override func

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 448
精华内容 179
关键字:

wkwebview和uiwebview对比