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];
});
}