一、JavascriptCore介紹
JavaScriptCore是一個(gè)在WebKit中提供JavaScript引擎的框架狸吞,而且在OS X作為其他內(nèi)容的腳本引擎。JavaScriptCore最初是為KDE的JavaScript引擎(KJS)庫(kù)及PCRE正則表達(dá)式庫(kù)偷卧,JavaScriptCore從KJS及PCRE復(fù)刻之后蚊惯,已比原先進(jìn)步了許多,有了新的特色以及極大的性能改進(jìn)佳晶。
WebCore
WebCore是一個(gè)由WebKit項(xiàng)目所開(kāi)發(fā)的布局(Layout)桅狠、渲染(Rendering)及HTML和SVG的DOM庫(kù),完整的代碼皆由GNU寬通用公共許可證所授權(quán)轿秧,WebKit框架包裝了WebCore及JavaScriptCore(Nitro)中跌,并提供一個(gè)Objective-C應(yīng)用程序接口來(lái)接介由C++所開(kāi)發(fā)的WebCore渲染引擎及JavaScriptCore腳本引擎,透過(guò)Cocoa API就可以在應(yīng)用程序中很簡(jiǎn)單的使用這些組件菇篡。之后的版本同時(shí)包含了一個(gè)跨平臺(tái)的C++抽象平臺(tái)晒他,并且提供各種API使用。
WebKit中渲染采用CoreGraphics逸贾,相對(duì)Skia未利用到GPU加速能力,性能較差津滞。
Nitro(SFX)
在2008年6月2日铝侵,WebKit項(xiàng)目宣布,JavaScriptCore將被重寫(xiě)為"SquirrelFish"触徐,它是一個(gè)字節(jié)碼解釋器咪鲜,這個(gè)項(xiàng)目演變成SquirrelFish Extreme(簡(jiǎn)稱(chēng)為SFX,市場(chǎng)稱(chēng)之為Nitro)撞鹉,首次公開(kāi)于2008年9月18日疟丙,它會(huì)將Javascript編譯為本地的機(jī)器語(yǔ)言,不再需要字節(jié)碼解釋器鸟雏,同時(shí)加速了JavaScript的執(zhí)行效率享郊。
2009年6月30日,在Firefox 3.5發(fā)布的最新技術(shù)能“使某些情況下的速度提升20到40倍”孝鹊。
從Safari 4 Beta開(kāi)始采用炊琉,在Safari 5中進(jìn)行了優(yōu)化。
在Safari 5剛發(fā)布時(shí),Nitro在Mac上執(zhí)行JavaScript的速度比之前Safari 4快40%苔咪,比Chrome 5快3%锰悼,并且是Firefox 3.6的兩倍以上。
JIT
JIT(Just In Time)編譯器:是指程序邏輯以代碼(或字節(jié)碼)形式下發(fā)到目標(biāo)機(jī)(如客戶(hù)端)上团赏,在系統(tǒng)即將運(yùn)行此邏輯的前一刻箕般,目標(biāo)機(jī)系統(tǒng)上的編譯器才將這些代碼編譯成機(jī)器指令,然后再交給系統(tǒng)執(zhí)行舔清。因?yàn)樗木幾g發(fā)生成運(yùn)行前一刻丝里,剛剛能趕得上執(zhí)行,所以叫做Just In Time編譯器鸠踪。
JavascriptCore framework
iOS中WebKit使用的js解釋引擎是Nitro(或者叫做重寫(xiě)的JavascriptCore)丙者。但內(nèi)置JavascriptCore framework是個(gè)閹割版本,不支持JIT及WASM营密,setTimeout等械媒。因?yàn)椴恢С諮IT,通信性能表現(xiàn)略差评汰。
JSI
JSI 的全稱(chēng)是 JavaScript Interface纷捞,即 JS Interface 接口,它是對(duì) JS引擎 與 Native (C++) 之間相互調(diào)用的封裝被去,通過(guò) HostObject 接口實(shí)現(xiàn)雙邊映射主儡,官方也稱(chēng)它為映射框架。
有了這層封裝惨缆,在 ReactNative 中有了兩方面的提升:
可以自由切換引擎糜值,比如: JavaScriptCore、V8坯墨、Hermes等寂汇。
在 JS 中調(diào)用 C++ 注入到 JS 引擎中的方法,數(shù)據(jù)載體格式是通過(guò) HostObject 接口規(guī)范化后的捣染,摒棄了舊架構(gòu)中以 JSON 作為數(shù)據(jù)載體的異步機(jī)制骄瓣,從而使得 JS 與 Native 之間的調(diào)用可以實(shí)現(xiàn)同步感知。
JSI 與 JSC(不是JavaScriptCore腳本引擎) 對(duì)比
相同點(diǎn):
首先在底層實(shí)現(xiàn)上來(lái)說(shuō)耍攘,JSI 與 JSC 都是通過(guò)向 JS 引擎中注入方法榕栏,來(lái)實(shí)現(xiàn)的 JS 與 Native 通信,同時(shí) 注入的方法也都是掛載到了 JS global 全局對(duì)象上面蕾各。
不同點(diǎn):
舊架構(gòu)中的 JSC 處理的注入對(duì)象是JSON 對(duì)象與C++ 對(duì)象扒磁,內(nèi)部涉及復(fù)雜且頻繁的類(lèi)型轉(zhuǎn)換。且在
JSBridge 這種異步傳輸?shù)脑O(shè)計(jì)中存在三個(gè)線程之間的通信:UI線程式曲、Layout線程渗磅、JS線程,在典型的列表快速滑動(dòng)時(shí)出現(xiàn)空白頁(yè)的例子中,效率低下得到明顯的體現(xiàn)始鱼。
而對(duì)于 JSI 來(lái)講仔掸,棄用了異步的bridge,傳輸?shù)臄?shù)據(jù)也不再依賴(lài)于 JSON 的數(shù)據(jù)格式医清,而是將HostObject 接口作為了雙邊通信的協(xié)議起暮,實(shí)現(xiàn)了雙邊同步通信下的高效信息傳輸。
另外編寫(xiě) NativeModule 的方式與舊架構(gòu)中相比發(fā)生了改變会烙,除了功能之外的邏輯负懦,需要在一個(gè) C++ 類(lèi)中來(lái)完成。 因此柏腻,一個(gè) TurboModule 的實(shí)現(xiàn)分為兩部分: C++ & Java (OC)纸厉。
一句話(huà)概括 JSI 提效的本質(zhì): JSI 實(shí)現(xiàn)了通信橋 Bridge 的自定義,并通過(guò) HostObjec 接口協(xié)議的方式取代了 舊架構(gòu)中基于異步 bridge 的JSON數(shù)據(jù)結(jié)構(gòu)五嫂,從而實(shí)現(xiàn)了同步通信颗品,并且避免了 JSON 序列化與反序列化的繁瑣操作,大大提升了 JS 與 Native 的通信效率沃缘。
重點(diǎn)總結(jié)
WebKit(WKWebView)的一個(gè)缺點(diǎn)是渲染是通過(guò)CoreGraphics實(shí)現(xiàn)躯枢,CoreGraphics渲染主要運(yùn)算工作在CPU運(yùn)行,并沒(méi)有充分利用GPU的硬件加速能力槐臀。因此在一些復(fù)雜或者大量的圖形繪制任務(wù)時(shí)表現(xiàn)性能比較差锄蹂。像flutter的渲染是通過(guò)skia完成,相比webkit提升了渲染能力水慨。(可參考:webGL調(diào)研(iOS渲染原理))
WebKit的另一個(gè)缺點(diǎn)是過(guò)于龐大得糜,加載慢。目前小程序每個(gè)頁(yè)面都創(chuàng)建對(duì)應(yīng)的一個(gè)webview晰洒,會(huì)造成很大的性能浪費(fèi)朝抖。
WebKit內(nèi)置的JSCore是支持JIT,但是對(duì)外提供的JSCore framework卻不支持JIT欢顷,所以這導(dǎo)致了JSCore framework在通信上的表現(xiàn)比較差。
參考資料:
https://zh.wikipedia.org/wiki/WebKit
https://zh.wikipedia.org/wiki/JavaScript%E5%BC%95%E6%93%8E#%E5%81%9C%E6%AD%A2%E9%96%8B%E7%99%BC
https://trac.webkit.org/browser/webkit/trunk/Source/JavaScriptCore?order=name
https://trac.webkit.org/wiki/JavaScriptCore
http://www.reibang.com/p/b5c6207edb98/
二捉蚤、Skyline介紹
介紹:https://developers.weixin.qq.com/miniprogram/dev/framework/runtime/skyline/introduction.html
三抬驴、Skyline分析
下圖為未使用Skyline的小程序視圖層級(jí):
下圖為使用了Skyline的微信小程序視圖層級(jí):
下面兩圖為基本的flutter iOS原生混合項(xiàng)目的內(nèi)存計(jì)數(shù)及視圖層級(jí):
WAFlutterViewController繼承自FlutterViewController。
@interface WAFlutterViewController : FlutterViewController
可以得出:
- Flutter開(kāi)頭的相關(guān)類(lèi)都是flutter自動(dòng)生成缆巧,包括FlutterView布持,F(xiàn)lutterViewController,F(xiàn)lutterEngine等陕悬,而不是微信自身實(shí)現(xiàn)题暖。
- 微信Skyline用SkylineView代替了webview,但skylineView的渲染都是由flutter自身實(shí)現(xiàn)。
支持skyline的版本中胧卤,pageVC中增加了一個(gè)skylineView屬性唯绍,比起webView多支持IWASkylineView接口:
@property(retain, nonatomic) UIView<YYWebViewInterface> *webView;
@property(retain, nonatomic) UIView<IWASkylineView><YYWebViewInterface> *skylineView;
pageVC中和Skyline相關(guān)的方法及用法(個(gè)人理解):
處理路由事件navigateBack
- (void)notifySkylineNavigateBack:(long long)arg1 animated:(_Bool)arg2;
自動(dòng)處理ReLaunch路由事件
- (void)notifySkylineAutoReLaunch;
處理ReLaunch路由事件
- (void)notifySkylineReLaunch;
處理RedirectTo路由事件
- (void)notifySkylineRedirectTo;
處理NavigateTo路由事件
- (void)notifySkylineNavigateTo;
處理暗黑模式變化
- (void)notifySkylineDarkModeUpdate;
處理SwitchTab
- (void)notifySkylineSwitchTab;
處理AppLaunch
- (void)notifySkylineAppLaunch;
獲取Skyline相關(guān)頁(yè)面數(shù)據(jù)
- (id)getSkylineSinglePageData:(_Bool)arg1;
設(shè)置Skyline相關(guān)頁(yè)面數(shù)據(jù)
- (void)setSkylineSinglePageRouteData:(id)arg1;
找回skyline View?
- (void)findBackSkylineView;
IWASkylineView接口定位如下:
@protocol IWASkylineView
@property(nonatomic) _Bool innerPopAnim;
@property(nonatomic) long long innerPopCnt;
@property(nonatomic) _Bool isNewEngineHomePage;
@property(readonly, nonatomic) _Bool isReady;
@property(readonly, nonatomic) long long windowId;
@property(nonatomic) __weak id <IWASkylineRuntime> skylineRuntime;
- (void)snapshotEnd;
- (void)snapshotBegin;
- (UIImage *)snapshotSkyline;
- (void)removeNativeView:(long long)arg1;
- (void)insertNativeView:(UIView *)arg1 viewId:(long long)arg2;
- (void)startMoveViewToOldPage;
- (void)startMoveViewToNewPage;
@end
WASkylineView的聲明如下枝誊,可以看到還實(shí)現(xiàn)了FlutterEngineDelegate况芒,說(shuō)明內(nèi)部渲染應(yīng)該是通過(guò)flutter引擎實(shí)現(xiàn)。
@interface WASkylineView : UIView <FlutterEngineDelegate, IWASkylineView, YYWebViewInterface>
skyline處理在頁(yè)面跳轉(zhuǎn)時(shí)叶撒,函數(shù)調(diào)用棧如下绝骚。loadIndexData會(huì)在執(zhí)行IndexData之前,發(fā)送路由事件并通知skylineView祠够。
小程序進(jìn)入新頁(yè)面會(huì)分別交給skylineView執(zhí)行5個(gè)腳本压汪。
從方法名來(lái)看分別是mainPluginPageFrame,MainModuleSharedCommonJS,文件moduleScriptData,和之前發(fā)給webview作為page層的js基本上一致古瓤。
skylineView持有了 WASkyLineRuntime的弱引用止剖,強(qiáng)引用持有了WAFlutterViewController。
從視圖層級(jí)可以看出湿滓,skylineView addSubView: WAFlutterViewController.FlutterView(偽代碼)滴须。
@property(nonatomic) __weak WASkyLineRuntime *runtime; // @synthesize runtime=_runtime;
@property(nonatomic) __weak id <IWASkylineRuntime> skylineRuntime; // @synthesize skylineRuntime=_skylineRuntime;@property(retain, nonatomic) WAFlutterViewController *flutterVC; // @synthesize flutterVC=_flutterVC
目前實(shí)現(xiàn)IWASkylineRuntime接口的類(lèi)只有WASkyLineRuntime。
@interface WASkyLineRuntime : NSObject <IWASkylineRuntime>
分析:
skylineView在收到j(luò)s腳本后叽奥,從逆向來(lái)看并未交給其它OC類(lèi)來(lái)進(jìn)行處理扔水,個(gè)人認(rèn)為可能調(diào)用了C/C++代碼進(jìn)行解析(因?yàn)槟嫦驎簳r(shí)獲取不到C/C++方法)。C/C++解析后的結(jié)果再交給Flutter進(jìn)行渲染朝氓。
JSCore的預(yù)創(chuàng)建
微信啟動(dòng)到聊天頁(yè)面魔市,還未進(jìn)入小程序前,JSCoreService已經(jīng)被創(chuàng)建((WAJSCoreService *)0x129b53cd0)赵哲。
服務(wù)中心MMServiceCenter管理微信內(nèi)的所有服務(wù):
@interface MMServiceCenter : NSObject
{
NSMutableDictionary *m_dictService;
}
服務(wù)如下待德,其中包括WAPreloadAppTaskMgr,小程序預(yù)加載任務(wù)管理服務(wù)枫夺。
每個(gè)服務(wù)受到了MMServiceWrapper包裹将宪,并在MMServiceWrapper內(nèi)重寫(xiě)了消息轉(zhuǎn)發(fā),將消息轉(zhuǎn)發(fā)給WAPreloadAppTaskMgr橡庞。
{
UpdateProfileMgr = "<UpdateProfileMgr: 0x281d4bcc0>";
WCCommonService = "<WCCommonService: 0x280b2c9c0>";
MultiTalkSessionMgr = "<MultiTalkSessionMgr: 0x286561d60>";
WCTimelineTrashMgr = "<WCTimelineTrashMgr: 0x282631900>";
WCLabsMgr = "<WCLabsMgr: 0x282cd46c0>";
TrackRoomMgr = "<TrackRoomMgr: 0x28312eb50>";
MMWebPrefetcherMgr = "<MMWebPrefetcherMgr: 0x282e71260>";
WAConfigMgr = "<WAConfigMgr: 0x28390a940>";
WCPayLogicMgr = "<WCPayLogicMgr: 0x12e637a00>";
EmoticonInputRecommendMgr = "<EmoticonInputRecommendMgr: 0x28314ab50>";
WXCTalkMgr = "<WXCTalkMgr: 0x283f6a760>";
WCTextStateDB = "<WCTextStateDB: 0x282cdfa80>";
MMClientCacheManager = "<MMClientCacheManager: 0x280adb510>";
OpenApiMgr = "<OpenApiMgr: 0x11e4d59e0>";
VoIPOrientationService = "<VoIPOrientationService: 0x281d97300>";
MMMsgRemindReporter = "<MMMsgRemindReporter: 0x282c9ad00>";
MMFICImageCache = "<MMFICImageCache: 0x2811038a0>";
QuickReplyMsgMgr = "<QuickReplyMsgMgr: 0x282d499d0>";
WAContactMgr = "<WAContactMgr: 0x282e51c70>";
CdnComMgr = "<CdnComMgr: 0x2826340a0>";
MMTextLayoutManager = "<MMTextLayoutManager: 0x283730b40>";
WCSiriMgr = "<WCSiriMgr: 0x28656d3b0>";
RebootWarningService = "<RebootWarningService: 0x28023e1a0>";
MMNewSessionMgr = "<MMNewSessionMgr: 0x283d36f20>";
WAPackageDownloadUrlFetcher = "<WAPackageDownloadUrlFetcher: 0x2865a75c0>";
WCFinderVideoDownLoadMgr = "<WCFinderVideoDownLoadMgr: 0x283d43cf0>";
WCTempChatMgr = "<WCTempChatMgr: 0x281c8a380>";
WCFinderSyncReportMgr = "<WCFinderSyncReportMgr: 0x2865096d0>";
WCGroupUndoneMgr = "<WCGroupUndoneMgr: 0x28657db30>";
FTSFacade = "<FTSFacade: 0x283f26920>";
WCAdvertiseLogMgr = "<WCAdvertiseLogMgr: 0x28650ab20>";
VoIPRMRemoteService = "<VoIPRMRemoteService: 0x281d96e80>";
MsgVideoPreloadMgr = "<MsgVideoPreloadMgr: 0x28004d5e0>";
WASessionMgr = "<WASessionMgr: 0x2811ce2b0>";
MMFinderLiveGiftResourceCDNMgr = "<MMFinderLiveGiftResourceCDNMgr: 0x282dabd40>";
WCWebSearchService = "<WCWebSearchService: 0x282d32a00>";
MiniTaskUIMgr = "<MiniTaskUIMgr: 0x282ca5740>";
CheckMobileSIMType = "<CheckMobileSIMType: 0x2825d2fd0>";
EventService = "<EventService: 0x281d1f6c0>";
WeVisModelResMgr = "<WeVisModelResMgr: 0x28024f5c0>";
TingManager = "<TingManager: 0x283731040>";
KFContactMgr = "<KFContactMgr: 0x281c8a340>";
MinimizeRecMgr = "<MinimizeRecMgr: 0x286583070>";
WXCTalkPresentMgr = "<WXCTalkPresentMgr: 0x281c9ddc0>";
WAPublicResCacheMgr = "<WAPublicResCacheMgr: 0x28344ba80>";
WXTalkPresentMgr = "<WXTalkPresentMgr: 0x281012d90>";
WCFinderReportService = "<WCFinderReportService: 0x286508f00>";
WCDurationLogMgr = "<WCDurationLogMgr: 0x281cb8700>";
MMShareExtMgr = "<MMShareExtMgr: 0x2825bce60>";
FriendAsistSessionMgr = "<FriendAsistSessionMgr: 0x2811494a0>";
AppDataMgr = "<AppDataMgr: 0x283147910>";
VOIPMgr = "<VOIPMgr: 0x11eb8f000>";
WXGRoamService = "<WXGRoamService: 0x282929e00>";
MMWebViewKeepHolderMgr = "<MMWebViewKeepHolderMgr: 0x28372a080>";
MainFrameGroupLiveReporter = "<MainFrameGroupLiveReporter: 0x28112b570>";
EnterpriseBrandContactMgr = "<EnterpriseBrandContactMgr: 0x2800433c0>";
WCCardPkgMgr = "<WCCardPkgMgr: 0x2833c2580>";
CContactMgr = "<CContactMgr: 0x2831109a0>";
MagicPkgCheckListener = "<MagicPkgCheckListener: 0x281d26080>";
VoIPMSService = "<VoIPMSService: 0x286581540>";
WCDeviceBrandMgr = "<WCDeviceBrandMgr: 0x28332bcc0>";
NewSyncPluginMgr = "<NewSyncPluginMgr: 0x2811862b0>";
WCDeviceAccountMgr = "<WCDeviceAccountMgr: 0x281148930>";
MMOnlineDeviceStatusMgr = "<MMOnlineDeviceStatusMgr: 0x28260d2c0>";
StoreEmotionBackupMgr = "<StoreEmotionBackupMgr: 0x2811a2ca0>";
ExptService = "<ExptService: 0x28287b480>";
SendMessageMgr = "<SendMessageMgr: 0x282cfd140>";
EmoticonCameraRecoverMgr = "<EmoticonCameraRecoverMgr: 0x281d9d340>";
MMWebDebugPkgMgr = "<MMWebDebugPkgMgr: 0x2811cbe70>";
VoIPEventLogService = "<VoIPEventLogService: 0x2802329e0>";
IDCHostMgr = "<IDCHostMgr: 0x281d97240>";
WCFinderLongVideoService = "<WCFinderLongVideoService: 0x281d9ca00>";
MiniGameVideoService = "<MiniGameVideoService: 0x281d24940>";
HeartBeatMgr = "<HeartBeatMgr: 0x281d94100>";
MMNewTipsMgr = "<MMNewTipsMgr: 0x281ceda40>";
WeVisSettingsMgr = "<WeVisSettingsMgr: 0x282dbd180>";
QQMailMgr = "<QQMailMgr: 0x286589e50>";
VoiceReminderMgr = "<VoiceReminderMgr: 0x2811cca50>";
WACacheVersionPreCheckerMgr = "<WACacheVersionPreCheckerMgr: 0x2865b0230>";
MPPageMessageMgr = "<MPPageMessageMgr: 0x2811cc150>";
WCJdBussinessMgr = "<WCJdBussinessMgr: 0x281cb2900>";
GameCenterManager = "<GameCenterManager: 0x283a2d500>";
StoreEmotionRecoverMgr = "<StoreEmotionRecoverMgr: 0x282cf5fe0>";
MMLiveDBMgr = "<MMLiveDBMgr: 0x280912fa0>";
WCFinderDataService = "<WCFinderDataService: 0x11e4dacd0>";
BrandNewSessionMgr = "<BrandNewSessionMgr: 0x282cf7cc0>";
MMSUserBehaviorMgr = "<MMSUserBehaviorMgr: 0x2801dce80>";
AudioReceiver = "<AudioReceiver: 0x281d26200>";
WADatabaseMgr = "<WADatabaseMgr: 0x283a64c00>";
WCSessionFlowMgr = "<WCSessionFlowMgr: 0x283d255f0>";
FavoritesMgr = "<FavoritesMgr: 0x2833692c0>";
MinimizeTaskMgr = "<MinimizeTaskMgr: 0x283399a40>";
MMEnterpriseBrandSessionMgr = "<MMEnterpriseBrandSessionMgr: 0x2811cc120>";
CGroupMgr = "<CGroupMgr: 0x2828d1000>";
WALoadPerformanceMgr = "<WALoadPerformanceMgr: 0x2862218c0>";
MMGroupLiveDBMgr = "<MMGroupLiveDBMgr: 0x2817ea4c0>";
MMPackageDownloadMgr = "<MMPackageDownloadMgr: 0x2825d33e0>";
StrongNotificationMgr = "<StrongNotificationMgr: 0x282275b00>";
MMFinderLiveRewardDBMgr = "<MMFinderLiveRewardDBMgr: 0x280913420>";
WCHardLinkService = "<WCHardLinkService: 0x28122e2e0>";
NewSyncService = "<NewSyncService: 0x282882a00>";
BrandSessionMgr = "<BrandSessionMgr: 0x282cf7240>";
MMFinderLiveMgr = "<MMFinderLiveMgr: 0x283735220>";
WCWatchNativeMgr = "<WCWatchNativeMgr: 0x2822704e0>";
BrandTLCanvasCardMgr = "<BrandTLCanvasCardMgr: 0x281248d80>";
ChatBoxMgr = "<ChatBoxMgr: 0x281d893c0>";
TemplateSessionMgr = "<TemplateSessionMgr: 0x282da9ea0>";
BrandAttrMgr = "<BrandAttrMgr: 0x281d9f600>";
SearchCgiConfigMgr = "<SearchCgiConfigMgr: 0x281d49c00>";
WeVisionCameraLogger = "<WeVisionCameraLogger: 0x28024f6c0>";
WCPaySynthesizeSpeechMgr = "<WCPaySynthesizeSpeechMgr: 0x2825d0410>";
ImageAutoDownloadMgr = "<ImageAutoDownloadMgr: 0x286588140>";
MPChannelMgr = "<MPChannelMgr: 0x28112a640>";
FunctionMsgMgr = "<FunctionMsgMgr: 0x281c95940>";
"WeChat.GOGService" = "<WeChat.GOGService: 0x281056850>";
OCRTransMgr = "<OCRTransMgr: 0x2825d2bc0>";
CMessageMgr = "<CMessageMgr: 0x12e420300>";
WCAudioSessionLogic = "<WCAudioSessionLogic: 0x280769260>";
WCRedEnvelopesControlMgr = "<WCRedEnvelopesControlMgr: 0x281138a80>";
iAPMgr = "<iAPMgr: 0x28656a580>";
MMHeavyUserMonitorMgr = "<MMHeavyUserMonitorMgr: 0x282d174f0>";
WCSessionFlowMonitorService = "<WCSessionFlowMonitorService: 0x282d47330>";
WXGBackupMgr = "<WXGBackupMgr: 0x283f0a840>";
NotificationActionsMgr = "<NotificationActionsMgr: 0x286515c20>";
DeviceILinkService = "<DeviceILinkService: 0x281d97ec0>";
WCNewClickStatMgr = "<WCNewClickStatMgr: 0x283434ea0>";
MMLiteAppDBMgr = "<MMLiteAppDBMgr: 0x2825f4820>";
WACommonMarkMgr = "<WACommonMarkMgr: 0x280a3a010>";
WCAutoSaveService = "<WCAutoSaveService: 0x280773a40>";
TokenRegisterService = "<TokenRegisterService: 0x28650ac10>";
MMWindowMgr = "<MMWindowMgr: 0x28105ba50>";
PushLoginURLMgr = "<PushLoginURLMgr: 0x280ae4fc0>";
GameCenterCommonDb = "<GameCenterCommonDb: 0x280b1fa50>";
SystemAuthorizationCheck = "<SystemAuthorizationCheck: 0x2800aeda0>";
DarkModeManager = "<DarkModeManager: 0x2817292c0>";
MMAuthService = "<MMAuthService: 0x28227cb40>";
VoIPFirstMessageStatisticsService = "<VoIPFirstMessageStatisticsService: 0x280adb870>";
MMConfigMgr = "<MMConfigMgr: 0x282d46d80>";
NewArrivalCountMgr = "<NewArrivalCountMgr: 0x2811cc720>";
WCGPUCounterSamplingMgr = "<WCGPUCounterSamplingMgr: 0x282c9daa0>";
DeviceModelConfigMgr = "<DeviceModelConfigMgr: 0x281158780>";
WWKFSessionMgr = "<WWKFSessionMgr: 0x2811cda40>";
WCTopicService = "<WCTopicService: 0x282c9b000>";
MMGroupLiveMgr = "<MMGroupLiveMgr: 0x286578ff0>";
MMConfSDKService = "<MMConfSDKService: 0x12e4adb90>";
MMLiveReportEventMgr = "<MMLiveReportEventMgr: 0x281035e60>";
AccountStorageMgr = "<AccountStorageMgr: 0x28227c780>";
FingertipSearchMgr = "<FingertipSearchMgr: 0x282642a80>";
MMHeadImageMgr = "<MMHeadImageMgr: 0x281d0a380>";
EnterpriseSessionMgr = "<EnterpriseSessionMgr: 0x286589d10>";
PresentHelperMgr = "<PresentHelperMgr: 0x280ac6700>";
MainSessionMgr = "<MainSessionMgr: 0x28260ce10>";
TextStateMgr = "<TextStateMgr: 0x283f457a0>";
SolitaireMgr = "<SolitaireMgr: 0x2825d3250>";
MonoServiceMsgMgr = "<MonoServiceMsgMgr: 0x2825f7930>";
BannerToastMgr = "<BannerToastMgr: 0x2813d0940>";
AutoSetRemarkMgr = "<AutoSetRemarkMgr: 0x286554eb0>";
FavoritesOnTopLogic = "<FavoritesOnTopLogic: 0x2813d0480>";
VoIPPMService = "<VoIPPMService: 0x282dbd880>";
WePkgFacade = "<WePkgFacade: 0x283145130>";
DataReportExposeMonitor = "<DataReportExposeMonitor: 0x28313eec0>";
MuteBrandMgr = "<MuteBrandMgr: 0x2811bba20>";
MsgSolitaireDB = "<MsgSolitaireDB: 0x281d77380>";
MMDBMigrationUtil = "<MMDBMigrationUtil: 0x280aeb450>";
IntelligentMsgImgConfigurationMgr = "<IntelligentMsgImgConfigurationMgr: 0x281cfd5c0>";
EmoticonRecommendMgr = "<EmoticonRecommendMgr: 0x281d25280>";
DataReportPageConfig = "<DataReportPageConfig: 0x281d4b440>";
WCCalRqtDataMgr = "<WCCalRqtDataMgr: 0x280165b00>";
WAProfileService = "<WAProfileService: 0x281e3f800>";
WALaunchTimeAxisMgr = "<WALaunchTimeAxisMgr: 0x282913e00>";
MMResPackageMgr = "<MMResPackageMgr: 0x281149470>";
WCFileBrowseService = "<WCFileBrowseService: 0x2828cc880>";
MMMusicPlayerMgr = "<MMMusicPlayerMgr: 0x28344a1c0>";
VOIPMessageMgr = "<VOIPMessageMgr: 0x2811cc000>";
EnterpriseMsgMgr = "<EnterpriseMsgMgr: 0x282927180>";
WXGMigrationClientMgr = "<WXGMigrationClientMgr: 0x283d37260>";
BrandFinderLiveMgr = "<BrandFinderLiveMgr: 0x2828c3e80>";
WALaunchResourceFetcher = "<WALaunchResourceFetcher: 0x281248480>";
EmoticonBackUpMgr = "<EmoticonBackUpMgr: 0x281d9d100>";
"WeChat.Kara" = "<WeChat.Kara: 0x2817fccc0>";
WABackgroundFetchMgr = "<WABackgroundFetchMgr: 0x2801dcf80>";
WePkgStatReport = "<WePkgStatReport: 0x280add590>";
WCTuringMgr = "<WCTuringMgr: 0x28111b750>";
AUAudioDevice = "<AUAudioDevice: 0x12e4639b0>";
WCOutFacade = "<WCOutFacade: 0x283151290>";
MMLanguagePackageDownloadMgr = "<MMLanguagePackageDownloadMgr: 0x281155860>";
GameLifeDataService = "<GameLifeDataService: 0x286588af0>";
WAOpenEventSpeedStatMgr = "<WAOpenEventSpeedStatMgr: 0x283a69f00>";
WCNearbyMgr = "<WCNearbyMgr: 0x281145530>";
BrandTimelineMsgMgr = "<BrandTimelineMsgMgr: 0x12e60c8f0>";
VideoRingAudioFileProducer = "<VideoRingAudioFileProducer: 0x281daec40>";
"WeChat.PredownloadService" = "<WeChat.PredownloadService: 0x281035b00>";
VOIPModelResMgr = "<VOIPModelResMgr: 0x280230f80>";
SightFacade = "<SightFacade: 0x28391e940>";
VoipCSUIManager = "<VoipCSUIManager: 0x281d74340>";
MMLocationMgr = "<MMLocationMgr: 0x282894100>";
MMWebCanvasPkgMgr = "<MMWebCanvasPkgMgr: 0x281e2e500>";
WAAppItemManager = "<WAAppItemManager: 0x281c9d4c0>";
VoIPMiniInAppService = "<VoIPMiniInAppService: 0x281d978c0>";
MMDiskUsageMgr = "<MMDiskUsageMgr: 0x282ca4a20>";
WAPreloadAppTaskMgr = "<WAPreloadAppTaskMgr: 0x281260ae0>";
MainFrameHideSessionReporter = "<MainFrameHideSessionReporter: 0x28652f7a0>";
MMLiteAppMgr = "<MMLiteAppMgr: 0x283430120>";
WSRecommendMgr = "<WSRecommendMgr: 0x283f4c000>";
KindaBizMgr = "<KindaBizMgr: 0x280a81b00>";
WCSettingRedPointMgr = "<WCSettingRedPointMgr: 0x28113d590>";
DataReportService = "<DataReportService: 0x282d46fb0>";
WCUpdateBootsMgr = "<WCUpdateBootsMgr: 0x281d25d80>";
WAAppTaskMgr = "<WAAppTaskMgr: 0x28342de60>";
EdgeComputingMgr = "<EdgeComputingMgr: 0x282d3aca0>";
MMLiveTaskMgr = "<MMLiveTaskMgr: 0x12e63ac30>";
MMMyChatRoomSessionMgr = "<MMMyChatRoomSessionMgr: 0x281066c70>";
VoipUIManager = "<VoipUIManager: 0x11e4ac4c0>";
MMUserDataOperateDB = "<MMUserDataOperateDB: 0x280b45590>";
WXCNetWorkEngine = "<WXCNetWorkEngine: 0x2813c9440>";
BrandService = "<BrandService: 0x282d46530>";
MultiTalkMgr = "<MultiTalkMgr: 0x12e46a0d0>";
WALocalCacheMgr = "<WALocalCacheMgr: 0x281e4b980>";
WCAccountControlMgr = "<WCAccountControlMgr: 0x282d3f480>";
WXGMigrationMgr = "<WXGMigrationMgr: 0x28650aad0>";
WAUpdatableMsgMgr = "<WAUpdatableMsgMgr: 0x2811cca80>";
MMLiveResUpdateMgr = "<MMLiveResUpdateMgr: 0x280913450>";
WCMomentsMediaPredictor = "<WCMomentsMediaPredictor: 0x280b217a0>";
WCCoinMgr = "<WCCoinMgr: 0x2813b7f40>";
TrackPresentMgr = "<TrackPresentMgr: 0x28103cc30>";
MonoServiceMgr = "<MonoServiceMgr: 0x286580fa0>";
WCPreparedUpdateMgr = "<WCPreparedUpdateMgr: 0x281035a10>";
AudioSender = "<AudioSender: 0x282c9c9c0>";
FavoritesFileMgr = "<FavoritesFileMgr: 0x281782a30>";
MMWebJsWAPkgMgr = "<MMWebJsWAPkgMgr: 0x2812a1c50>";
CNetworkStatusMgr = "<CNetworkStatusMgr: 0x282882980>";
BypSyncService = "<BypSyncService: 0x282cecfc0>";
WACampusVoipMsgMgr = "<WACampusVoipMsgMgr: 0x2825f6530>";
MainFrameCellDataManager = "<MainFrameCellDataManager: 0x280acb330>";
WCCanvasDownloadMgr = "<WCCanvasDownloadMgr: 0x28004f8a0>";
WCFacade = "<WCFacade: 0x11e79dbc0>";
WCMallLogicMgr = "<WCMallLogicMgr: 0x281d25b40>";
PublicWifiManager = "<PublicWifiManager: 0x2833118c0>";
CEmoticonMgr = "<CEmoticonMgr: 0x2865399a0>";
WCFinderMsgSessionMgr = "<WCFinderMsgSessionMgr: 0x282e374f0>";
NewABTestLogic = "<NewABTestLogic: 0x281cc5d00>";
FavWebCacheMgr = "<FavWebCacheMgr: 0x283734aa0>";
WAPrefetchMgr = "<WAPrefetchMgr: 0x282e32990>";
MMAddressBookMgr = "<MMAddressBookMgr: 0x282cb9a40>";
DataReportMultiEventMonitor = "<DataReportMultiEventMonitor: 0x280a74b70>";
MsgUploadRetryMgr = "<MsgUploadRetryMgr: 0x281197bd0>";
WCPayReporter = "<WCPayReporter: 0x286582d50>";
WCSessionDataReporter = "<WCSessionDataReporter: 0x28342ee20>";
WCShareCardMgr = "<WCShareCardMgr: 0x28292f900>";
MMLiveMgr = "<MMLiveMgr: 0x281da0fc0>";
MainSessionReporter = "<MainSessionReporter: 0x282ca40c0>";
IlinkAppContextService = "<IlinkAppContextService: 0x281d95a00>";
VideoRingDataService = "<VideoRingDataService: 0x282d3dff0>";
EmoticonPackageMgr = "<EmoticonPackageMgr: 0x28653ab20>";
WCFinderSyncManager = "<WCFinderSyncManager: 0x281d10b00>";
OnlineClientMgr = "<OnlineClientMgr: 0x28343f060>";
VoIPTerminationService = "<VoIPTerminationService: 0x281051320>";
WATemplateMsgManager = "<WATemplateMsgManager: 0x282286ca0>";
WABluetoothDeviceMonitorMgr = "<WABluetoothDeviceMonitorMgr: 0x286580eb0>";
ScanQRCodeResultsMgr = "<ScanQRCodeResultsMgr: 0x281d76f00>";
VoIPAPNSPushSyncService = "<VoIPAPNSPushSyncService: 0x281053c60>";
WAPreDownloadMgr = "<WAPreDownloadMgr: 0x282e70000>";
EnterpriseContactMgr = "<EnterpriseContactMgr: 0x282933b80>";
WeVisModelMgr = "<WeVisModelMgr: 0x2865877f0>";
MMLimitedModeMgr = "<MMLimitedModeMgr: 0x282241560>";
NewABTestMgr = "<NewABTestMgr: 0x280a3b0f0>";
WAAdapterMgr = "<WAAdapterMgr: 0x280a3a3a0>";
MMUserDataOperateMgr = "<MMUserDataOperateMgr: 0x281daea80>";
MMSessionRefreshService = "<MMSessionRefreshService: 0x281d0b4c0>";
VoIPRMLocalService = "<VoIPRMLocalService: 0x281d96f80>";
}
WAPreloadAppTaskMgr如下较坛,里面包含一個(gè)WAPreloadAppTask小程序加載任務(wù)。
@interface WAPreloadAppTaskMgr : MMUserService <MMServiceProtocol>
{
WAPreloadAppTask *_preloadTask;
}
預(yù)加載任務(wù)會(huì)預(yù)創(chuàng)建WAJSCoreService扒最。
@interface WAPreloadAppTask : NSObject
{
WAApptaskPublicResLogic *_publicResLogic;
WAWebViewController *_webView;
WAJSCoreService *_appService;
}
調(diào)用棧如下丑勤,微信在啟動(dòng)后通過(guò)performSelector:afterDelay:延遲調(diào)用,預(yù)創(chuàng)建小程序service吧趣。
當(dāng)微信進(jìn)入最近小程序頁(yè)面法竞,微信又預(yù)創(chuàng)建了小游戲的service耙厚。
<WAJSGameService: 0x13769bea0>
WAFlutterMgr
WAFlutterMgr負(fù)責(zé)管理flutter,包含唯一個(gè)flutter引擎(FlutterEngine)岔霸,及多個(gè)skylineRuntime薛躬。
@interface WAFlutterMgr : MMRootService <MMServiceProtocol>
@property(retain, nonatomic) NSMutableArray *skylineRuntimeArr; // @synthesize skylineRuntimeArr=_skylineRuntimeArr;
@property(retain, nonatomic) FlutterEngine *firstEngine; // @synthesize firstEngine=_firstEngine;
@property(retain, nonatomic) FlutterEngineGroup *engineGroup; // @synthesize engineGroup=_engineGroup;
- (void)removeSkylineRuntime:(id)arg1;
- (void)addSkylineRuntime:(id)arg1;
- (id)makeSkylineEngine:(id)arg1;
啟動(dòng)時(shí),flutter引擎會(huì)創(chuàng)建一系列flutter管道(FlutterMethodChannel)秉剑,
包括flutter/platform_views,flutter/navigation,
fllutter/platform,
flutter/textinput,
flutter/localization等
補(bǔ)充:
SkylineGlobal
SkylineRuntimeCore
workletModule
SkylineGlobal.runtime.registerJsValue
SkylineGlobal.workletModule.stopMappers
onSkylineGlobalReady
以上綁定的關(guān)鍵對(duì)象或方法在逆向OC代碼都找不到對(duì)應(yīng)的泛豪,可能對(duì)應(yīng)的實(shí)現(xiàn)在C++中,就像JSI侦鹏。
JSCore提供封裝C api后的面向?qū)ο驤SExport方式诡曙,js對(duì)象與oc對(duì)象綁定,但這種方式效率比較低略水。
目前小游戲是采用JSCore C api + runtime模擬成JSExport的綁定對(duì)象方式价卤,這種方式可以利用C api的效率更高,又可以利用對(duì)象綁定的編碼便捷渊涝。
我估計(jì)微信可能采用的是類(lèi)似JSI方式慎璧,綁定的對(duì)象在C++中處理,因此逆向找不到相關(guān)類(lèi)(逆向只看的到OC)跨释。
JSI相關(guān)資料:
https://blog.csdn.net/ImagineCode/article/details/125148600
https://blog.csdn.net/m0_49508485/article/details/122622251
https://blog.csdn.net/YoungOne2333/article/details/122962607