精华内容
下载资源
问答
  • wkwebview加载速度慢
    2020-12-23 01:25:09

    我们开发详情页面,有的时候需要计算webView或者WKWebView的高度,然后再计算scrollView的高度,把webView放到scrollView上面。但是计算webView高度这个过程很耗费时间,原因是以下代理,网页彻底加载完才会计算出来高度,我们需要的是先算出高度,先出现网页的文字,至于网页的图片,可以慢慢缓存显示全。这样不至于白屏时间过长。

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

    {

    /**计算高度*/

    dispatch_async(dispatch_get_global_queue(0,0), ^{

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

    //获取webView高度

    CGRect frame = _webView.frame;

    frame.size.height = [result doubleValue] + 50;

    _webView.frame = frame;

    _scrollViewHeight = 220 + _webView.height;

    _scrollView.contentSize = CGSizeMake(kScreenWidth, _scrollViewHeight);

    }];

    });

    }

    注:上边的代理被弃用,太耗费时间了。取而代之用下面的方法:(用的WKWebView举例说明的)

    ---------------------

    第一步:添加观察者

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

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

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

    if ([keyPath isEqualToString:@"contentSize"]) {

    dispatch_async(dispatch_get_global_queue(0,0), ^{

    //document.documentElement.scrollHeight

    //document.body.offsetHeight

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

    CGRect frame =_webView.frame;

    frame.size.height = [result doubleValue] + 50;

    _webView.frame = frame;

    _scrollViewHeight =220 + _webView.height;

    _scrollView.contentSize =CGSizeMake(kScreenWidth,_scrollViewHeight);

    }];

    });

    }

    }

    第三步:移除观察者

    - (void)dealloc

    {

    [_webView.scrollView removeObserver:selfforKeyPath:@"contentSize"];

    }

    总结:以上这个方法,不能说特别快速加载,但是在我这里速度至少提升了几倍。我也在找更好的优化方法,比如缓存等等。有知道的更好的方法,欢迎贴出来,大家共享!!

    ---------------------

    更多相关内容
  • 我一直在尝试将WKWebView集成为UIViewController中另一个webview的子视图 ....我还测试了加载WKWebView只是一个空的HTML体,没有任何脚本加载 . 这仍然需要600毫秒才能加载 .如果HTML包含空体,则 viewDidLoad 和 ...

    我一直在尝试将WKWebView集成为UIViewController中另一个webview的子视图 . 我已经能够加载内容并与swift和javascript正确通信 . 但是,没有任何数据操作的HTML内容的加载时间大约需要2秒 .

    我还测试了加载WKWebView只是一个空的HTML体,没有任何脚本加载 . 这仍然需要600毫秒才能加载 .

    如果HTML包含空体,则 viewDidLoad 和 webView(webView: WKWebView, didFinishNavigation navigation: WKNavigation!) 之间的时间差为600毫秒 .

    viewDidLoad function of the ViewController

    override func viewDidLoad() {

    NSLog("started - %@.%@", String(self.dynamicType), __FUNCTION__)

    super.viewDidLoad()

    let wkConfiguration: WKWebViewConfiguration = WKWebViewConfiguration()

    let userController: WKUserContentController = WKUserContentController()

    wkConfiguration.userContentController = userController

    wkConfiguration.processPool = VCWKWebView.wkProcess

    self.wkWebView = VCWKWebView(frame: self.webView.bounds,configuration: wkConfiguration)

    if let wkWebView = self.wkWebView {

    self.webView.addSubview(wkWebView)

    wkWebView.translatesAutoresizingMaskIntoConstraints = false

    let height = NSLayoutConstraint(item: wkWebView, attribute: .Height, relatedBy: .Equal, toItem: self.webView, attribute: .Height, multiplier: 1, constant: 0)

    let width = NSLayoutConstraint(item: wkWebView, attribute: .Width, relatedBy: .Equal, toItem: self.webView, attribute: .Width, multiplier: 1, constant: 0)

    webView.addConstraints([height, width])

    //wkWebView.delegate = self

    wkWebView.navigationDelegate = self

    wkWebView.loadContent()

    }

    NSNotificationCenter.defaultCenter().addObserver(self, selector: "keyboardWillShow:", name: UIKeyboardWillShowNotification, object: nil)

    NSNotificationCenter.defaultCenter().addObserver(self, selector: "keyboardWillHide:", name: UIKeyboardWillHideNotification, object: nil)

    NSLog("ended - %@.%@", String(self.dynamicType), __FUNCTION__)

    }

    VCWKWebView类:

    class VCWKWebView: WKWebView {

    static let wkProcess: WKProcessPool = WKProcessPool()

    private static let _url: NSURL = NSURL(fileURLWithPath: NSBundle.mainBundle().pathForResource("index", ofType: "html",inDirectory:"www")!)

    private static let _accessUrl: NSURL = NSURL(fileURLWithPath: NSBundle.mainBundle().pathForResource("www", ofType: nil)!)

    func loadContent(){

    NSLog("started - %@.%@", String(self.dynamicType), __FUNCTION__)

    if #available(iOS 9.0, *) {

    self.loadFileURL(VCWKWebView._url, allowingReadAccessToURL: VCWKWebView._accessUrl)

    } else {

    // Fallback on earlier versions

    }

    NSLog("ended - %@.%@", String(self.dynamicType), __FUNCTION__)

    }

    override init(frame: CGRect, configuration: WKWebViewConfiguration) {

    super.init(frame:frame, configuration:configuration)

    }

    convenience init(frame: CGRect){

    let wkConfiguration: WKWebViewConfiguration = WKWebViewConfiguration()

    self.init(frame:frame,configuration:wkConfiguration)

    }

    deinit{

    print("deinit of VCWKWebView is called")

    }

    }

    任何人都可以帮我集成WKWebView,以便内容加载更快?

    展开全文
  • 最近在工作中遇到了WKWebView白屏的问题,所以这篇文章主要给大家介绍了关于iOS中WKWebView白屏问题的分析与解决方法,文中通过示例代码介绍的非常详细,对同样遇到这个问题的朋友具有一定的参考学习价值,需要的...
  • iOS开发~WKWebView白屏适配

    千次阅读 2021-11-03 11:39:52
    公司项目使用Cordova框架,做原生项目嵌入H5,业务复杂了以后,H5资源也越来越大,占用内存越来越多,加载也越来越,直到做热更新时候,遇到了白屏问题。 第一步:有说白屏时候回调...

    WKWebView虽好,但白屏问题也很苦恼,下面分享一下自己解决问题的过程。

    公司项目使用Cordova框架,做原生项目嵌入H5,业务复杂了以后,H5资源也越来越大,占用内存越来越多,加载也越来越慢,直到做热更新时候,遇到了白屏问题。

    第一步:有说白屏时候回调webViewWebContentProcessDidTerminate方法,那就加上吧:

    - (void)webViewWebContentProcessDidTerminate:(WKWebView *)webView {
        [webView reload];
    }

    然而没用,根本不回调。

    第二步:-(void)webView:(WKWebView *)webView didFinishNavigation:(WKNavigation *)navigation {  }方法中加载外部JS导致白屏,那就去掉,然而还是没用。

    第三步:由于做热更新,加载了本地H5资源,注意本地H5资源必须放到沙盒Documents目录下才能被WKWebView访问,放在tmp或Library下根本不行。

    NSURL *url = [NSURL fileURLWithPath:urlString];
    [webView loadRequest:[NSURLRequest requestWithURL:url]];

    这样使用,还是不行。改成:

    NSURLRequest *request = [NSURLRequest requestWithURL:url cachePolicy:NSURLRequestReloadIgnoringCacheData timeoutInterval:30];
    [webView loadRequest:request];

    并且WKWebView初始化时候,加上允许访问FileURL:

     [configuration.preferences setValue:@YES forKey:@"allowFileAccessFromFileURLs"];
     [configuration setValue:@YES forKey:@"_allowUniversalAccessFromFileURLs"];

    发现模拟器上不白屏了,但高兴太早了,真机测试,依然白屏。

    第四步:参考字节分享的白屏重载方法

    -(void)webView:(WKWebView *)webView didFinishNavigation:(WKNavigation *)navigation
    {
        [self judgeLoadingStatus:webView withBlock:^(webviewLoadingStatus status) {
                switch (status) {
                    case WebViewErrorStatus:
                        self.reloadTime += 1;
                        if (self.reloadTime > 2) {
                            return;
                        }
                        [webView reload];
                        NSLog(@"遇到白屏,重新加载🆘");
                        break;
                        
                    default:
                        break;
                }
            }];
    }
    
    // 判断是否白屏
    - (void)judgeLoadingStatus:(WKWebView *)webview withBlock:(void (^)(webviewLoadingStatus status))completionBlock {
        webviewLoadingStatus __block status = WebViewPendStatus;
        if (@available(iOS 11.0, *)) {
            if (webview) {
                // 状态栏高度
                CGFloat statusBarHeight = [[UIApplication sharedApplication] statusBarFrame].size.height;
                // 导航栏高度
                CGFloat navigationHeight = 0;
                
                WKSnapshotConfiguration *shotConfiguration = [[WKSnapshotConfiguration alloc] init];
                // 仅截图检测导航栏以下部分内容(底部安全区域不影响)
                shotConfiguration.rect = CGRectMake(0, statusBarHeight + navigationHeight, webview.bounds.size.width, (webview.bounds.size.height - navigationHeight - statusBarHeight));
                @weakify(self);
                [webview takeSnapshotWithConfiguration:shotConfiguration completionHandler:^(UIImage * _Nullable snapshotImage, NSError * _Nullable error) {
                    @strongify(self);
                    if (snapshotImage) {
                        UIImage *scaleImage = [self scaleImage:snapshotImage];
                        BOOL isWhiteScreen = [self searchEveryPixel:scaleImage];
                        if (isWhiteScreen) {
                            status = WebViewErrorStatus;
                        } else {
                            status = WebViewNormalStatus;
                        }
                    }
                    if (completionBlock) {
                        completionBlock(status);
                    }
                }];
            }
        }
    }
    
    // 遍历像素点 白色像素占比大于99%认定为白屏
    - (BOOL)searchEveryPixel:(UIImage *)image {
        CGImageRef cgImage = [image CGImage];
        size_t width = CGImageGetWidth(cgImage);
        size_t height = CGImageGetHeight(cgImage);
        // 每个像素点包含r g b a 四个字节
        size_t bytesPerRow = CGImageGetBytesPerRow(cgImage);
        size_t bitsPerPixel = CGImageGetBitsPerPixel(cgImage);
        
        CGDataProviderRef dataProvider = CGImageGetDataProvider(cgImage);
        CFDataRef data = CGDataProviderCopyData(dataProvider);
        UInt8 *buffer = (UInt8 *)CFDataGetBytePtr(data);
        
        int whiteCount = 0;
        int totalCount = 0;
        
        for (int j = 0; j < height; j ++ ) {
            for (int i = 0; i < width; i ++) {
                UInt8 *pt = buffer + j * bytesPerRow + i * (bitsPerPixel / 8);
                UInt8 red   = * pt;
                UInt8 green = *(pt + 1);
                UInt8 blue  = *(pt + 2);
                
                totalCount ++;
                if (red >= 254 && green >= 254 && blue >= 254) {
                    whiteCount ++;
                }
            }
        }
        float proportion = (float)whiteCount / totalCount ;
        NSLog(@"当前像素点数:%d,白色像素点数:%d , 占比: %f",totalCount , whiteCount , proportion );
        if (proportion > 0.99) {
            return YES;
        } else {
            return NO;
        }
    }
    
    // 为了提升检测性能,考虑将快照缩放至1/5,减少像素点总数,从而加快遍历速度
    - (UIImage *)scaleImage:(UIImage *)image {
        CGFloat scale = 0.2;
        CGSize newsize;
        newsize.width = floor(image.size.width * scale);
        newsize.height = floor(image.size.height * scale);
        if (@available(iOS 10.0, *)) {
            UIGraphicsImageRenderer *renderer = [[UIGraphicsImageRenderer alloc] initWithSize:newsize];
            return [renderer imageWithActions:^(UIGraphicsImageRendererContext * _Nonnull rendererContext) {
                [image drawInRect:CGRectMake(0, 0, newsize.width, newsize.height)];
            }];
        } else {
            return image;
        }
    }
    
    //补充:相关代码我给补上吧
    
    #ifndef keywordify
    #if DEBUG
    #define keywordify autoreleasepool {}
    #else
    #define keywordify try {} @catch (...) {}
    #endif
    #endif
    
    #ifndef weakify
    #if __has_feature(objc_arc)
    #define weakify(object) keywordify __weak __typeof__(object) object##_##weak_ = object;
    #else
    #define weakify(object) keywordify __block __typeof__(object) object##_##block_ = object;
    #endif
    #endif
    
    #ifndef strongify
    #if __has_feature(objc_arc)
    #define strongify(object) keywordify __typeof__(object) object = object##_##weak_;
    #else
    #define strongify(object) keywordify __typeof__(object) object = object##_##block_;
    #endif
    #endif
    
    
    typedef NS_ENUM(NSUInteger, webviewLoadingStatus) {
        WebViewNormalStatus,
        WebViewPendStatus,
        WebViewErrorStatus,
    };

    神奇的居然不白屏了,然而高兴还是早了,只是偶尔不白屏,大概率还是白屏。而且白屏时候会回调:

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

    还不错,至少有个报错信息了:

    Error Domain=kCFErrorDomainCFNetwork Code=1 "(null)" UserInfo={_NSURLErrorFailingURLSessionTaskErrorKey=LocalDataTask <6A1A8E7A-A2BC-41CC-B1BE-A698457A75B2>.<1>, _WKRecoveryAttempterErrorKey=<WKReloadFrameErrorRecoveryAttempter: 0x2815f11c0>}

    第五步:根据第四步报错信息,找到个链接,然后查看WKWebView.h,发现一个有希望的API:

    - (nullable WKNavigation *)loadFileURL:(NSURL *)URL allowingReadAccessToURL:(NSURL *)readAccessURL

    kCFErrorDomainCFNetwork (error code 1) in real device but no in simulator · Issue #396 · react-native-webview/react-native-webview · GitHub

    尝试修改

    NSURLRequest *request = [NSURLRequest requestWithURL:url cachePolicy:NSURLRequestReloadIgnoringCacheData timeoutInterval:30];
    NSString*documentPath = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask,YES).firstObject;            
    
    [WebView loadFileURL:request.URL allowingReadAccessToURL:[NSURL fileURLWithPath:documentPath]];

    终于不白屏了,虽然加载的慢点。

    如果还有其他办法欢迎补充,共同进步。

    展开全文
  • WebView加载速度优化

    千次阅读 2021-02-01 05:31:21
    在做混合应用的时候,有几个痛点,一个是无网络无法使用,还有一个是受网络环境影响的网页加载速度。今天就这两个问题,和大家交流一下自己的经验。离线缓存这个比较容易,开启webView的缓存功能就可以了。...

    在做混合应用的时候,有几个痛点,一个是无网络无法使用,还有一个是受网络环境影响的网页加载速度。今天就这两个问题,和大家交流一下自己的经验。

    离线缓存

    这个比较容易,开启webView的缓存功能就可以了。

    WebSettings settings = webView.getSettings();

    settings.setAppCacheEnabled(true);

    settings.setDatabaseEnabled(true);

    settings.setDomStorageEnabled(true);//开启DOM缓存,关闭的话H5自身的一些操作是无效的

    settings.setCacheMode(WebSettings.LOAD_DEFAULT);

    这边我们通过setCacheMode方法来设置WebView的缓存策略,WebSettings.LOAD_DEFAULT是默认的缓存策略,它在缓存可获取并且没有过期的情况下加载缓存,否则通过网络获取资源。这样的话可以减少页面的网络请求次数,那我们如何在离线的情况下也能打开页面呢,这里我们在加载页面的时候可以通过判断网络状态,在无网络的情况下更改webview的缓存策略。

    ConnectivityManager cm = (ConnectivityManager)getSystemService(Context.CONNECTIVITY_SERVICE);

    NetworkInfo info = cm.getActiveNetworkInfo();

    if(info.isAvailable())

    {

    settings.setCacheMode(WebSettings.LOAD_DEFAULT);

    }else

    {

    settings.setCacheMode(WebSettings.LOAD_CACHE_ONLY);//不使用网络,只加载缓存

    }

    这样我们就可以使我们的混合应用在没有网络的情况下也能使用一部分的功能,不至于什么都显示不了了,当然如果我们将缓存做的更好一些,在网络好的时候,比如说在WIFI状态下,去后台加载一些网页缓存起来,这样处理的话,即使在无网络情况下第一次打开某些页面的时候,也能将该页面显示出来。

    当然缓存资源后随之会带来一个问题,那就是资源无法及时更新,WebSettings.LOAD_DEFAULT中的页面中的缓存版本好像不是很起作用,所以我们这边可能需要自己做一个缓存版本控制。这个缓存版本控制可以放在APP版本更新中。

    if (upgrade.cacheControl > cacheControl)

    {

    webView.clearCache(true);//删除DOM缓存

    VersionUtils.clearCache(mContext.getCacheDir());//删除APP缓存

    try

    {

    mContext.deleteDatabase("webview.db");//删除数据库缓存

    mContext.deleteDatabase("webviewCache.db");

    }

    catch (Exception e)

    {

    }

    }

    预加载

    有时候一个页面资源比较多,图片,CSS,js比较多,还引用了JQuery这种庞然巨兽,从加载到页面渲染完成需要比较长的时间,有一个解决方案是将这些资源打包进APK里面,然后当页面加载这些资源的时候让它从本地获取,这样可以提升加载速度也能减少服务器压力。重写WebClient类中的shouldInterceptRequest方法,再将这个类设置给WebView。

    webView.setWebViewClient(new WebViewClient()

    {

    @Override

    public WebResourceResponse shouldInterceptRequest(WebView view, String url)

    {

    if (url.contains("[tag]"))

    {

    String localPath = url.replaceFirst("^http.*[tag]\\]", "");

    try

    {

    InputStream is = getApplicationContext().getAssets().open(localPath);

    Log.d(TAG, "shouldInterceptRequest: localPath " + localPath);

    String mimeType = "text/javascript";

    if (localPath.endsWith("css"))

    {

    mimeType = "text/css";

    }

    return new WebResourceResponse(mimeType, "UTF-8", is);

    }

    catch (Exception e)

    {

    e.printStackTrace();

    return null;

    }

    }

    else

    {

    return null;

    }

    }

    });

    这里我们队页面中带有特殊标记的请求进行过滤替换,也就是上面代码中的[tag],这个可以跟做后台开发的同事约定好来就行了。对图片资源或者其他资源进行替换也是可以的。补充一个小点可以通过settings.setLoadsImagesAutomatically(true);来设置在页面装载完成之后再去加载图片。

    H5优化

    Android的OnPageFinished事件会在Javascript脚本执行完成之后才会触发。如果在页面中使 用JQuery,会在处理完DOM对象,执行完$(document).ready(function() {});事件自会后才会渲染并显示页面。而同样的页面在iPhone上却是载入相当的快,因为iPhone是显示完页面才会触发脚本的执行。所以我们这边的解决方案延迟JS脚本的载入,这个方面的问题是需要Web前端工程师帮忙优化的,网上应该有比较多LazyLoad插件,这里放一个比较老的链接Painless JavaScript lazy loading with LazyLoad,同样也放上一小段前端代码,仅供参考。

    loadComplete() {

    //instead of document.read();

    }

    function loadscript() {

    LazyLoad.loadOnce([

    '/css/j/jquery-1.6.2.min.js',

    '/css/j/flow/jquery.flow.1.1.min.js',

    '/css/j/min.js?v=2011100852'

    ], loadComplete);

    }

    setTimeout(loadscript,10);

    展开全文
  • WKWebview详解

    千次阅读 2018-05-15 17:07:28
    而这个自iOS2.0开始使用的Web容器一直是开发的心病:加载速度慢,占用内存多,优化困难。如果加载网页多,还可能因为过量占用内存而给系统kill掉。各种优化的方法效果也不那么明显,常见的优化缓存方式:1、尽量使用...
  • 简介 如果项目支持iOS7之前的系统版本的话,可以做个系统判断,这里就不介绍了,这里还是推荐使用WKWebView,先...这个自iOS2开始使用的网页加载器一直是开发的心病:加载速度慢,占用内存多,优化困难。如果加载网页多
  • 你心里不免会抱怨(这东西你跟前端说去呀,凭什么他们的锅要我们来背呀),这时候前端拼命修改拼命优化,但是前端加载速度还是很,难道已经到达极限了吗,难道我们native只能束手无策吗,难道这个月的奖金...
  • 因为UIWebView加载速度慢,占用内存多,优化困难,所以iOS8以后,苹果推出了新框架Webkit,提供了组件WKWebView。 注意:WKWebView在ios8系统上,JS进行post请求有数据不正确的问题,所以从ios9开始使用WKWebView(静...
  • iOS 8以后苹果推出了WKWebView来代替webview,WKWebView加载速度快,占用内存少,是加载网页的最佳选择。先看下WKWebView的特性:在性能、稳定性、功能方面有很大提升(最直观的 体现就是加载网页是占用的内存,模拟器...
  • 解决 WKWebView goback执行无效的bug

    千次阅读 2018-10-10 14:23:14
    WKWebView 是 Apple WWDC 2014随iOS 8和OS X 出来的,解决UIWebView加载速度慢、占用内存大的问题。之前的开发中我们要适配iOS7,所以未使用。现在项目都适配iOS 8以上了,所以就开始使用WKWebView了。下面是在开发....
  • 背景为了快递迭代、更新,公司app有一大模块功能使用H5实现,但是体验比原生差,这就衍生了如何提高H5加载速度,优化体验的问题。此文,记录一下自己的心路历程。腾讯bugly发表的一篇文章《移动端本地 H5 秒开方案...
  • WKWebView详解&WKWebVieW和JS交互

    千次阅读 2020-07-01 11:16:01
    而这个自iOS2.0开始使用的Web容器一直是开发的心病:加载速度慢,占用内存多,优化困难。如果加载网页多,还可能因为过量占用内存而给系统kill掉。各种优化的方法效果也不那么明显iOS8 以后,苹果推出了新框架 ...
  • 第一次进入WebView时加载缓慢的问题

    千次阅读 2020-02-25 18:20:02
    问题描述,项目中加载用户协议页面的时候,常常要等好几秒才能进入,该页面没有任何js、css效果,依然很,最后发现是WebView初始化很的原因,临时解决方法是在Application初始化一个WebView,进入页面后再加载进...
  • 对比UIWebView:加载速度慢、内存占用多WKWebView(苹果官方文档):在性能、稳定性、功能方面有很大提升(高达60fps的滚动刷新率以及内置手势);支持了更多的HTML5特性、JavaScript库;将UIWebViewDelegate与UIWebView...
  • WKWebView是在Apple的WWDC 2014随iOS 8和OS X 10.10出来的,是为了解决UIWebView加载速度慢、占用内存大的问题。但是由于之前还要适配iOS7,所以就没有使用。现在项目都适配iOS 8以上了,所以就开始使用WKWebView了...
  • 原标题:UITableView嵌套WKWebView的那些坑最近项目中遇到了一个需求,TableView中...1.首先说一下WKWebView的代理方法中,页面加载完成后会走的代理方法,与UIWebView的页面加载完成代理方法一样。- (void)webView...
  • WKWebview

    2017-03-28 10:32:01
    这个自iOS2开始使用的网页加载器一直是开发的心病:加载速度慢,占用内存多,优化困难。如果加载网页多,还可能因为过量占用内存而给系统kill掉。各种优化的方法效果也不那么明显(点击查看常用优化方法)。 iOS8...
  • WKWebView

    2018-10-08 17:11:00
    An object that displays ...WKWebView属于WebKit.framework框架,Apple在WWDC 2014中随iOS 8和OS X 10.10提出来的,为了解决UIWebView加载速度慢、占用内存大的问题。 使用UIWebView加载网页的时候,内存...
  • IOS WKWebView

    千次阅读 2019-07-14 12:29:08
    文章目录简介属性:WKWebView常用方法介绍基本使用-加载网页准备工作网页控制加载本地文件WKNavigationDelegate 简介 通用型很强,程序员只需要能识别网页端,相应的就能开发对应的ios和androw版本,只需要把网页...
  • webiew加载一个网页资源过多,加载速度。可以将部分资源放在本地,拦截webview的链接和请求,本地有的资源直接获取本地的,不去加载网络服务器内容 首先自定义一个继承自NSURLProtocol的类 然后重写+ (BOOL)...
  • WKWebView的使用

    2017-08-29 14:49:14
    这个自iOS2开始使用的网页加载器一直是开发的心病:加载速度慢,占用内存多,优化困难。如果加载网页多,还可能因为过量占用内存而给系统kill掉。各种优化的方法效果也不那么明显(点击查看常用优化方法)。 iOS8...
  • WKWebView: Differences from UIWebView browsing engine 优点 多进程,在app的主进程之外执行 使用更快的Nitro JavaScript引擎 异步执行处理JavaScript 消除某些触摸延迟 支持服务端的身份校验 支持对错误...
  • iOS WKWebview JS与OC互相调用,传递数据

空空如也

空空如也

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

wkwebview加载速度慢