You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@weex.apache.org by cx...@apache.org on 2017/05/16 03:18:15 UTC

[05/12] incubator-weex git commit: + [ios] update pretender

+ [ios] update 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/eccb7927
Tree: http://git-wip-us.apache.org/repos/asf/incubator-weex/tree/eccb7927
Diff: http://git-wip-us.apache.org/repos/asf/incubator-weex/diff/eccb7927

Branch: refs/heads/0.13-dev
Commit: eccb79277191b56e333555a3eb052dbe8e71fa39
Parents: 2e14c11
Author: 齐山 <su...@163.com>
Authored: Mon May 15 11:37:24 2017 +0800
Committer: 齐山 <su...@163.com>
Committed: Mon May 15 11:37:24 2017 +0800

----------------------------------------------------------------------
 .../WeexSDK/Sources/Module/WXPrerenderManager.h |  7 ++--
 .../WeexSDK/Sources/Module/WXPrerenderManager.m | 43 ++++++++++++--------
 2 files changed, 31 insertions(+), 19 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/eccb7927/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 8785108..b991afd 100644
--- a/ios/sdk/WeexSDK/Sources/Module/WXPrerenderManager.h
+++ b/ios/sdk/WeexSDK/Sources/Module/WXPrerenderManager.h
@@ -20,6 +20,7 @@
 #import <Foundation/Foundation.h>
 #import <WeexSDk/WeexSDK.h>
 
+@class WXModuleMethod;
 typedef NS_ENUM(NSUInteger, PrerenderStatus) {
     PrerenderSucceed = 0,
     PrerenderFail = 1,
@@ -39,9 +40,9 @@ typedef void (^PrerenderCallback) (PrerenderStatus status, NSString* urlStr, NSS
 - (BOOL) isTaskExist:(NSString *)url;
 - (void) renderFromCache:(NSString *)url;
 - (UIView *)viewFromUrl:(NSString *)url;
-- (id )instanceFromUrl:(NSString *)url;
--  (void)removePrerenderTaskforUrl:(NSString *)url;
-- (void)storePrerenderModuleTasks:(NSMutableDictionary *)prerenderModuleTask forUrl:(NSString *)url;
+- (id)instanceFromUrl:(NSString *)url;
+- (void)removePrerenderTaskforUrl:(NSString *)url;
+- (void)storePrerenderModuleTasks:(WXModuleMethod *)prerenderModuleTask forUrl:(NSString *)url;
 - (void)excuteModuleTasksForUrl:(NSString *)url;
 - (void)destroyTask:(NSString *)parentInstanceId;
 @end

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/eccb7927/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 af90c06..e3f9962 100644
--- a/ios/sdk/WeexSDK/Sources/Module/WXPrerenderManager.m
+++ b/ios/sdk/WeexSDK/Sources/Module/WXPrerenderManager.m
@@ -46,7 +46,9 @@ static NSString *const MSG_PRERENDER_INTERNAL_ERROR = @"internal_error";
 
 @property (nonatomic, strong) NSMutableArray *cachedUrlList;
 @property (nonatomic, strong) dispatch_queue_t queue;
-@property (nonatomic, strong) NSMutableDictionary<NSString *, NSMutableDictionary*> *prerenderTasks;
+@property (nonatomic, strong) NSMutableDictionary<NSString *, WXPrerenderTask*> *prerenderTasks;
+@property (nonatomic) NSInteger maxCacheNumber;
+
 
 @end
 
@@ -95,10 +97,10 @@ static NSString *const MSG_PRERENDER_INTERNAL_ERROR = @"internal_error";
 
 -(BOOL)isSwitchOn
 {
+    BOOL switchOn = YES; // defautle YES
     id configCenter = [WXSDKEngine handlerForProtocol:@protocol(WXConfigCenterProtocol)];
     if ([configCenter respondsToSelector:@selector(configForKey:defaultValue:isDefault:)]) {
         id switchOnValue = [configCenter configForKey:@"weex_prerender_config.is_switch_on" defaultValue:@true isDefault:NULL];
-        BOOL switchOn = YES; // defautle YES
         if(switchOnValue){
             switchOn = [switchOnValue boolValue];
         }
@@ -121,13 +123,20 @@ static NSString *const MSG_PRERENDER_INTERNAL_ERROR = @"internal_error";
         callback(@{@"url":[url absoluteString],@"message":MSG_PRERENDER_INTERNAL_ERROR,@"result":@"error"});
         return;
     }
+    task.beginDate = [NSDate date];
+    task.cacheTime = 300000;
     if ([configCenter respondsToSelector:@selector(configForKey:defaultValue:isDefault:)]) {
         long long time = [[configCenter configForKey:@"weex_prerender_config.time" defaultValue:@300000 isDefault:NULL] longLongValue];
         task.beginDate = [NSDate date];
         if(time){
             task.cacheTime = time;
-        }else {
-            task.cacheTime = 300000;
+        }
+    }
+    self.maxCacheNumber = 1;
+    if ([configCenter respondsToSelector:@selector(configForKey:defaultValue:isDefault:)]) {
+        NSInteger max = [[configCenter configForKey:@"weex_prerender_config.max_cache_num" defaultValue:@1 isDefault:NULL] integerValue];
+        if(max){
+            self.maxCacheNumber = max;
         }
     }
     WXSDKInstance *instance = [[WXSDKInstance alloc] init];
@@ -136,19 +145,21 @@ static NSString *const MSG_PRERENDER_INTERNAL_ERROR = @"internal_error";
     task.parentInstanceId = instanceId;
     task.url = url.absoluteString;
     
-    [instance renderWithURL:url options:@{@"bundleUrl":url.absoluteString} data:nil];
     
-    [self.prerenderTasks setObject:task forKey:url.absoluteString];
-    __weak typeof(self) weakSelf = self;
-    instance.onCreate = ^(UIView *view) {
-        WXPrerenderTask *task = [weakSelf.prerenderTasks objectForKey:url.absoluteString];
-        task.view = view;
-        [weakSelf.prerenderTasks setObject:task forKey:url.absoluteString];
-    };
-    
-    instance.onFailed = ^(NSError *error) {
+    if(!self.prerenderTasks || self.prerenderTasks.count<self.maxCacheNumber){
+        [self.prerenderTasks setObject:task forKey:url.absoluteString];
+        [instance renderWithURL:url options:@{@"bundleUrl":url.absoluteString} data:nil];
+        __weak typeof(self) weakSelf = self;
+        instance.onCreate = ^(UIView *view) {
+            WXPrerenderTask *task = [weakSelf.prerenderTasks objectForKey:url.absoluteString];
+            task.view = view;
+            [weakSelf.prerenderTasks setObject:task forKey:url.absoluteString];
+        };
         
-    };
+        instance.onFailed = ^(NSError *error) {
+            
+        };
+    }
 }
 
 -(NSString *)prerenderUrl:(NSURL *)scriptUrl
@@ -191,7 +202,7 @@ static NSString *const MSG_PRERENDER_INTERNAL_ERROR = @"internal_error";
         });
         __weak typeof(self) weakSelf = self;
         WXPerformBlockOnBridgeThread(^(){
-            [self excuteModuleTasksForUrl:url];
+            [weakSelf excuteModuleTasksForUrl:url];
         });
         
     }