Repository: incubator-weex
Updated Branches:
  refs/heads/0.16-dev 88ae8eb96 -> 9684dcd75


+ [ios] distinguish the global pretender and user pretender


Project: http://git-wip-us.apache.org/repos/asf/incubator-weex/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-weex/commit/e939607a
Tree: http://git-wip-us.apache.org/repos/asf/incubator-weex/tree/e939607a
Diff: http://git-wip-us.apache.org/repos/asf/incubator-weex/diff/e939607a

Branch: refs/heads/0.16-dev
Commit: e939607a98d8ffcdc7af7e747a753350003aa8d1
Parents: 364a40c
Author: 齐山 <sunjjb...@163.com>
Authored: Tue Aug 29 13:09:43 2017 +0800
Committer: 齐山 <sunjjb...@163.com>
Committed: Tue Aug 29 13:09:43 2017 +0800

----------------------------------------------------------------------
 .../Sources/Controller/WXBaseViewController.m   |  4 +-
 ios/sdk/WeexSDK/Sources/Model/WXSDKInstance.m   |  4 +-
 .../WeexSDK/Sources/Module/WXPrerenderManager.h | 15 +++++
 .../WeexSDK/Sources/Module/WXPrerenderManager.m | 62 ++++++++++++++++----
 4 files changed, 71 insertions(+), 14 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/e939607a/ios/sdk/WeexSDK/Sources/Controller/WXBaseViewController.m
----------------------------------------------------------------------
diff --git a/ios/sdk/WeexSDK/Sources/Controller/WXBaseViewController.m 
b/ios/sdk/WeexSDK/Sources/Controller/WXBaseViewController.m
index 1c90b1e..c49d4a8 100644
--- a/ios/sdk/WeexSDK/Sources/Controller/WXBaseViewController.m
+++ b/ios/sdk/WeexSDK/Sources/Controller/WXBaseViewController.m
@@ -120,7 +120,7 @@
     }
     
     [_instance destroyInstance];
-    if([WXPrerenderManager isTaskExist:[self.sourceURL absoluteString]]){
+    if([WXPrerenderManager isTaskReady:[self.sourceURL absoluteString]]){
         _instance = [WXPrerenderManager 
instanceFromUrl:self.sourceURL.absoluteString];
     }
 
@@ -154,7 +154,7 @@
         [weakSelf _updateInstanceState:WeexInstanceAppear];
     };
     
-    if([WXPrerenderManager isTaskExist:[self.sourceURL absoluteString]]){
+    if([WXPrerenderManager isTaskReady:[self.sourceURL absoluteString]]){
         WX_MONITOR_INSTANCE_PERF_START(WXPTJSDownload, _instance);
         WX_MONITOR_INSTANCE_PERF_END(WXPTJSDownload, _instance);
         WX_MONITOR_INSTANCE_PERF_START(WXPTFirstScreenRender, _instance);

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/e939607a/ios/sdk/WeexSDK/Sources/Model/WXSDKInstance.m
----------------------------------------------------------------------
diff --git a/ios/sdk/WeexSDK/Sources/Model/WXSDKInstance.m 
b/ios/sdk/WeexSDK/Sources/Model/WXSDKInstance.m
index 0a6fe11..2e13dbb 100644
--- a/ios/sdk/WeexSDK/Sources/Model/WXSDKInstance.m
+++ b/ios/sdk/WeexSDK/Sources/Model/WXSDKInstance.m
@@ -349,7 +349,6 @@ typedef enum : NSUInteger {
 {
     NSString *url = @"";
     if([WXPrerenderManager isTaskExist:[self.scriptURL absoluteString]]) {
-        [WXPrerenderManager removePrerenderTaskforUrl:[self.scriptURL 
absoluteString]];
         url = [self.scriptURL absoluteString];
     }
     if (!self.instanceId) {
@@ -357,6 +356,7 @@ typedef enum : NSUInteger {
         return;
     }
     
+    [WXPrerenderManager removePrerenderTaskforUrl:[self.scriptURL 
absoluteString]];
     [WXPrerenderManager destroyTask:self.instanceId];
     
     [[WXSDKManager bridgeMgr] destroyInstance:self.instanceId];
@@ -373,7 +373,7 @@ typedef enum : NSUInteger {
         });
     });
     if(url.length > 0){
-        [WXPrerenderManager addTask:url instanceId:@"" callback:nil];
+        [WXPrerenderManager addGlobalTask:url callback:nil];
     }
 }
 

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/e939607a/ios/sdk/WeexSDK/Sources/Module/WXPrerenderManager.h
----------------------------------------------------------------------
diff --git a/ios/sdk/WeexSDK/Sources/Module/WXPrerenderManager.h 
b/ios/sdk/WeexSDK/Sources/Module/WXPrerenderManager.h
index c763b57..62e83e9 100644
--- a/ios/sdk/WeexSDK/Sources/Module/WXPrerenderManager.h
+++ b/ios/sdk/WeexSDK/Sources/Module/WXPrerenderManager.h
@@ -39,12 +39,27 @@
 + (void) addTask:(NSString *) url instanceId:(NSString *)instanceId 
callback:(WXModuleCallback)callback;
 
 /**
+ *  @abstract add prerender task
+ *
+ *  @param url The prerender url string
+ *
+ *  @param callback  the module method callback
+ *
+ **/
++ (void) addGlobalTask:(NSString *) url callback:(WXModuleCallback)callback;
+
+/**
  *  @abstract Returns true if url is exist in task .
  *
  **/
 + (BOOL) isTaskExist:(NSString *)url;
 
 /**
+ *  @abstract Returns true if task ready.
+ *
+ **/
++ (BOOL)isTaskReady:(NSString *)url;
+/**
  *  @abstract Returns key from url .
  *
  **/

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/e939607a/ios/sdk/WeexSDK/Sources/Module/WXPrerenderManager.m
----------------------------------------------------------------------
diff --git a/ios/sdk/WeexSDK/Sources/Module/WXPrerenderManager.m 
b/ios/sdk/WeexSDK/Sources/Module/WXPrerenderManager.m
index dbbf71a..07f26a6 100644
--- a/ios/sdk/WeexSDK/Sources/Module/WXPrerenderManager.m
+++ b/ios/sdk/WeexSDK/Sources/Module/WXPrerenderManager.m
@@ -41,6 +41,7 @@ static NSString *const MSG_PRERENDER_SUCCESS = @"success";
 @property (nonatomic, assign) WXState state;
 @property (nonatomic, strong) NSDate *beginDate;
 @property (nonatomic) long long cacheTime;
+@property (nonatomic) BOOL isCache;  // if set cache , cachetime is no use
 
 @end
 @implementation WXPrerenderTask
@@ -54,7 +55,6 @@ static NSString *const MSG_PRERENDER_SUCCESS = @"success";
 @property (nonatomic, strong) NSMutableDictionary<NSString *, 
WXPrerenderTask*> *prerenderTasks;
 @property (nonatomic) NSInteger maxCacheNumber;
 
-
 @end
 
 @implementation WXPrerenderManager
@@ -99,7 +99,24 @@ static NSString *const MSG_PRERENDER_SUCCESS = @"success";
     WXPrerenderManager *manager = [WXPrerenderManager sharedInstance];
     __weak WXPrerenderManager *weakSelf = manager;
     dispatch_async(manager.queue, ^{
-        [weakSelf prerender:newUrl instanceId:instanceId callback:callback];
+        [weakSelf prerender:newUrl instanceId:instanceId isCache:NO 
callback:callback];
+    });
+}
+
++ (void) addGlobalTask:(NSString *) url callback:(WXModuleCallback)callback
+{
+    NSURL *newUrl = [NSURL URLWithString:url];
+    if(!newUrl){
+        if(callback){
+            
callback(@{@"url":url,@"message":MSG_PRERENDER_INTERNAL_ERROR,@"result":@"error"});
+        }
+        return;
+    }
+    
+    WXPrerenderManager *manager = [WXPrerenderManager sharedInstance];
+    __weak WXPrerenderManager *weakSelf = manager;
+    dispatch_async(manager.queue, ^{
+        [weakSelf prerender:newUrl instanceId:@"" isCache:YES 
callback:callback];
     });
 }
 
@@ -119,7 +136,7 @@ static NSString *const MSG_PRERENDER_SUCCESS = @"success";
     return YES;
 }
 
-- (void) prerender:(NSURL *)url instanceId:(NSString *)instanceId 
callback:(WXModuleCallback) callback{
+- (void) prerender:(NSURL *)url instanceId:(NSString *)instanceId 
isCache:(BOOL)isCache callback:(WXModuleCallback) callback{
 
     NSString *str = url.absoluteString;
     if(str.length==0){
@@ -151,11 +168,14 @@ static NSString *const MSG_PRERENDER_SUCCESS = @"success";
             self.maxCacheNumber = max;
         }
     }
+    
+    
     WXSDKInstance *instance = [[WXSDKInstance alloc] init];
     instance.needPrerender = YES;
     task.instance = instance;
     task.parentInstanceId = instanceId;
     task.url = url.absoluteString;
+    task.isCache = isCache;
     
     if(self.prerenderTasks && self.prerenderTasks.count<self.maxCacheNumber){
         [self.prerenderTasks setObject:task forKey:[WXPrerenderManager 
getTaskKeyFromUrl:url.absoluteString]];
@@ -185,11 +205,10 @@ static NSString *const MSG_PRERENDER_SUCCESS = @"success";
     }
 }
 
-+ (BOOL)isTaskExist:(NSString *)url{
-    return [[WXPrerenderManager sharedInstance]isTaskExist:url];
++ (BOOL)isTaskReady:(NSString *)url{
+    return [[WXPrerenderManager sharedInstance]isTaskReady:url];
 }
-
-- (BOOL)isTaskExist:(NSString *)url
+- (BOOL)isTaskReady:(NSString *)url
 {
     if( !url ||url.length == 0){
         return NO;
@@ -203,10 +222,30 @@ static NSString *const MSG_PRERENDER_SUCCESS = @"success";
     }
     // compare cache time with begin time
     NSTimeInterval time = [[NSDate date] timeIntervalSinceDate:task.beginDate];
-    if(time > task.cacheTime){
+    if(time > task.cacheTime && !task.isCache){
         return NO;
     }
     
+    if(!task.view)  // view not exist ,not prerender
+    {
+        return NO;
+    }
+    if(task ){
+        return YES;
+    }
+    return NO;
+}
+
++ (BOOL)isTaskExist:(NSString *)url{
+    return [[WXPrerenderManager sharedInstance]isTaskExist:url];
+}
+
+- (BOOL)isTaskExist:(NSString *)url
+{
+    if( !url ||url.length == 0){
+        return NO;
+    }
+    WXPrerenderTask *task  = [self.prerenderTasks 
objectForKey:[WXPrerenderManager getTaskKeyFromUrl:url]];
     if(task ){
         return YES;
     }
@@ -216,7 +255,7 @@ static NSString *const MSG_PRERENDER_SUCCESS = @"success";
 + (void)renderFromCache:(NSString *)url
 {
     WXPrerenderManager *manager = [WXPrerenderManager sharedInstance];
-    if([manager isTaskExist:url])
+    if([manager isTaskReady:url])
     {
         WXPrerenderTask *task  = [manager.prerenderTasks 
objectForKey:[WXPrerenderManager getTaskKeyFromUrl:url]];
         
@@ -265,7 +304,10 @@ static NSString *const MSG_PRERENDER_SUCCESS = @"success";
     if (url.length > 0) {
         WXPrerenderManager *manager = [WXPrerenderManager sharedInstance];
         if(manager.prerenderTasks && [manager.prerenderTasks count]>0){
-            [manager.prerenderTasks removeObjectForKey:[WXPrerenderManager 
getTaskKeyFromUrl:url]];
+            WXPrerenderTask *task  = [manager.prerenderTasks 
objectForKey:[WXPrerenderManager getTaskKeyFromUrl:url]];
+            if(task){
+                [manager.prerenderTasks removeObjectForKey:[WXPrerenderManager 
getTaskKeyFromUrl:url]];
+            }
         }
     }
 }

Reply via email to