得物H5容器野指針疑難問題排查 & 解決
得物 iOS 4.9.x 版本 上線后,一些帶有橫向滾動(dòng)內(nèi)容的h5頁面,有一個(gè)webkit 相關(guān)crash增加較快。通過Crash堆棧判斷是UIScrollview執(zhí)行滾動(dòng)動(dòng)畫過程中內(nèi)存野指針導(dǎo)致的崩潰。
2、前期排查通過頁面瀏覽日志,發(fā)現(xiàn)發(fā)生崩潰時(shí)所在的頁面都是在h5 web容器內(nèi),且都是在頁面的生命周期方法viewDidDisappear方法調(diào)用后才發(fā)生崩潰,因此推測崩潰是在h5 頁面返回時(shí)發(fā)生的。
【資料圖】
剛好交易的同事復(fù)現(xiàn)了崩潰證實(shí)了我們的推測。因此可以基本確定:崩潰的原因是頁面退出后,頁面內(nèi)存被釋放,但是滾動(dòng)動(dòng)畫繼續(xù)執(zhí)行,這時(shí)崩潰堆棧中scrollview的delegate沒有置空,系統(tǒng)繼續(xù)執(zhí)行delegate的相關(guān)方法,訪問了已經(jīng)釋放的對象的內(nèi)存(野指針問題)。
同時(shí)發(fā)生crash h5 頁面都存在一個(gè)特點(diǎn),就是頁面內(nèi)存在可以左右橫滑的tab視圖。
操作手勢側(cè)滑存在體驗(yàn)問題,左右橫滑的tab視圖也會(huì)跟著滾動(dòng)(見下面視頻)。關(guān)聯(lián)bugly用戶行為日志,判斷這個(gè)體驗(yàn)問題是和本文中的crash有相關(guān)性的。
3、不完美的解決方案經(jīng)過上面的分析,修復(fù)思路是在h5頁面手勢側(cè)滑返回時(shí),將h5容器頁面內(nèi)tab的橫滑手勢禁掉(同時(shí)需要在 h5 web容器的viewWillAppear方法里將手勢再打開,因?yàn)槭謩輦?cè)滑是可以取消在返回頁面)。
具體代碼如下(這樣在操作頁面?zhèn)然祷貢r(shí),頁面的手勢被禁掉,不會(huì)再滾動(dòng)):
@objc dynamic func webViewCanScroll(enable:Bool) { let contentView = self.webView.scrollView.subviews.first { view in if let className = object_getClass(view), NSStringFromClass(className) == "WKContentView" { return true } return false } let webTouchEventsGestureRecognizer = contentView?.gestureRecognizers?.first(where: { gesture in if let className = object_getClass(gesture), NSStringFromClass(className) == "UIWebTouchEventsGestureRecognizer" { return true } return false }) webTouchEventsGestureRecognizer?.isEnabled = enable }@objc dynamic func webViewCanScroll(enable:Bool) { let contentView = self.webView.scrollView.subviews.first { view in if let className = object_getClass(view), NSStringFromClass(className) == "WKContentView" { return true } return false } let webTouchEventsGestureRecognizer = contentView?.gestureRecognizers?.first(where: { gesture in if let className = object_getClass(gesture), NSStringFromClass(className) == "UIWebTouchEventsGestureRecognizer" { return true } return false }) webTouchEventsGestureRecognizer?.isEnabled = enable }
經(jīng)過測試,h5 web容器側(cè)滑時(shí)出現(xiàn)的tab頁面左右滾動(dòng)的體驗(yàn)問題確實(shí)被解決。這樣既可以解決體驗(yàn)問題,又可以解決側(cè)滑離開頁面導(dǎo)致的崩潰問題,但是這樣并沒有定位crash的根因。修復(fù)代碼上線后,crash量確實(shí)下降,但是每天還是有一些crash出現(xiàn),且收到了個(gè)別頁面極端操作下偶現(xiàn)卡住的問題反饋。因此需要繼續(xù)排查crash根因,將crash根本解決掉。
繼續(xù)看文章開始的crash堆棧,通過Crash堆棧判斷崩潰原因是UIScrollview執(zhí)行滾動(dòng)動(dòng)畫過程中回調(diào)代理方法(見上圖)時(shí)訪問被釋放的內(nèi)存。常規(guī)解決思路是在退出頁面后,在頁面生命周期的dealloc方法中,將UIScrollview的delegate置空即可。WKWebView確實(shí)有一個(gè)scrollVIew屬性,我們在很早的版本就將其delegate屬性置空,但是崩潰沒有解決。
deinit { scrollView.delegate = nil scrollView.dataSource = nil }deinit { scrollView.delegate = nil scrollView.dataSource = nil }
因此崩潰堆棧里的Scrollview代理不是這里的WKWebView的scrollVIew的代理。那崩潰堆棧中的scrollView代理到底屬于哪個(gè)UIScrollview呢?幸運(yùn)的是蘋果webkit 是開源的,我們可以將webkit源碼下載下來看一下。
4、尋找崩潰堆棧中的ScrollViewDelegate崩潰堆棧中的ScrollViewDelegate是WKScrollingNodeScrollViewDelegate。首先看看WKWebView的scrollview的 delegate是如何實(shí)現(xiàn)的,因?yàn)槲覀儾孪脒@個(gè)scrollview的delegate除了我們自己設(shè)置的,是否還有其他delegate(比如崩潰堆棧中的WKScrollingNodeScrollViewDelegate)。
通過對Webkit源碼一番研究,發(fā)現(xiàn)scrollview的初始化方法:
- (void)_setupScrollAndContentViews{ CGRect bounds = self.bounds; _scrollView = adoptNS([[WKScrollView alloc] initWithFrame:bounds]); [_scrollView setInternalDelegate:self]; [_scrollView setBouncesZoom:YES];}- (void)_setupScrollAndContentViews{ CGRect bounds = self.bounds; _scrollView = adoptNS([[WKScrollView alloc] initWithFrame:bounds]); [_scrollView setInternalDelegate:self]; [_scrollView setBouncesZoom:YES];}
WKWebView的scrollVIew 是WKScrollView 類型。
4.1 WKScrollView 代理實(shí)現(xiàn)首先看到WKWebView的scrollview的類型其實(shí)是WKScrollView(UIScrollview的子類),他除了繼承自父類的delegate屬性,還有一個(gè)internalDelegate屬性,那么這個(gè)internalDelegate屬性是不是我們要找的WKScrollingNodeScrollViewDelegate 呢?
@interface WKScrollView : UIScrollView@property (nonatomic, assign) WKWebView *internalDelegate;@end@interface WKScrollView : UIScrollView@property (nonatomic, assign) WKWebView *internalDelegate;@end
通過閱讀源碼后發(fā)現(xiàn)不是這樣的(代碼有刪減,感興趣可自行閱讀源碼)。
- (void)setInternalDelegate:(WKWebView *)internalDelegate{ if (internalDelegate == _internalDelegate) return; _internalDelegate = internalDelegate; [self _updateDelegate];}- (void)setDelegate:(id )delegate{ if (_externalDelegate.get().get() == delegate) return; _externalDelegate = delegate; [self _updateDelegate];}- (id )delegate{ return _externalDelegate.getAutoreleased();}- (void)_updateDelegate{//...... if (!externalDelegate) else if (!_internalDelegate) else { _delegateForwarder = adoptNS([[WKScrollViewDelegateForwarder alloc] initWithInternalDelegate:_internalDelegate externalDelegate:externalDelegate.get()]); [super setDelegate:_delegateForwarder.get()]; }}- (void)setInternalDelegate:(WKWebView *)internalDelegate{ if (internalDelegate == _internalDelegate) return; _internalDelegate = internalDelegate; [self _updateDelegate];}- (void)setDelegate:(id )delegate{ if (_externalDelegate.get().get() == delegate) return; _externalDelegate = delegate; [self _updateDelegate];}- (id )delegate{ return _externalDelegate.getAutoreleased();}- (void)_updateDelegate{//...... if (!externalDelegate) else if (!_internalDelegate) else { _delegateForwarder = adoptNS([[WKScrollViewDelegateForwarder alloc] initWithInternalDelegate:_internalDelegate externalDelegate:externalDelegate.get()]); [super setDelegate:_delegateForwarder.get()]; }}
這個(gè)internalDelegate的作用是讓W(xué)KWebView 監(jiān)聽scrollview的滾動(dòng)回調(diào),同時(shí)也可以讓開發(fā)者在外部監(jiān)聽WKWebView的scrollview回調(diào)。如何實(shí)現(xiàn)的呢?可以查看WKScrollViewDelegateForwarder的實(shí)現(xiàn)。
- (void)forwardInvocation:(NSInvocation *)anInvocation{ //... if (internalDelegateWillRespond) [anInvocation invokeWithTarget:_internalDelegate]; if (externalDelegateWillRespond) [anInvocation invokeWithTarget:externalDelegate.get()];}- (void)forwardInvocation:(NSInvocation *)anInvocation{ //... if (internalDelegateWillRespond) [anInvocation invokeWithTarget:_internalDelegate]; if (externalDelegateWillRespond) [anInvocation invokeWithTarget:externalDelegate.get()];}
通過復(fù)寫- (void)forwardInvocation:(NSInvocation *)anInvocation 方法,在消息轉(zhuǎn)發(fā)時(shí)實(shí)現(xiàn)的。
4.2 猜想 & 驗(yàn)證既然WKScrollingNodeScrollViewDelegate 不是WKScrollview的屬性,那說明崩潰堆棧中的scrollview不是WKScrollview,那頁面上還有其他scrollview么。我們看源碼WKScrollingNodeScrollViewDelegate 是在哪里設(shè)置的。
void ScrollingTreeScrollingNodeDelegateIOS::commitStateAfterChildren(const ScrollingStateScrollingNode& scrollingStateNode){ //...... if (scrollingStateNode.hasChangedProperty(ScrollingStateNode::Property::ScrollContainerLayer)) { if (!m_scrollViewDelegate) m_scrollViewDelegate = adoptNS([[WKScrollingNodeScrollViewDelegate alloc] initWithScrollingTreeNodeDelegate:this]); } }void ScrollingTreeScrollingNodeDelegateIOS::commitStateAfterChildren(const ScrollingStateScrollingNode& scrollingStateNode){ //...... if (scrollingStateNode.hasChangedProperty(ScrollingStateNode::Property::ScrollContainerLayer)) { if (!m_scrollViewDelegate) m_scrollViewDelegate = adoptNS([[WKScrollingNodeScrollViewDelegate alloc] initWithScrollingTreeNodeDelegate:this]); } }
搜索webkit的源碼,發(fā)現(xiàn)創(chuàng)建WKScrollingNodeScrollViewDelegate的位置只有一處。但是webkit的源碼太過于復(fù)雜,無法通過閱讀源碼的方式知道WKScrollingNodeScrollViewDelegate屬于哪個(gè)scrollview。
為此我們只能換一種思路,我們通過xcode調(diào)試的方式查看當(dāng)前webview加載的頁面是否還有其他scrollview。
頁面上剛好還有一個(gè)scrollview:WKChildScrollview
這個(gè)WKChildScrollview 是否是崩潰堆棧中的scrollview呢,如果我們能確定他的delegate是WKScrollingNodeScrollViewDelegate,那就說明這個(gè)WKChildScrollview 是崩潰堆棧中的scrollview。
為了驗(yàn)證這個(gè)猜想,我們首先找到源碼,源碼并沒有太多,看不出其delegate類型。
@interface WKChildScrollView : UIScrollView @end@interface WKChildScrollView : UIScrollView @end
我們只能轉(zhuǎn)換思路在運(yùn)行時(shí)找到WKWebView的類型為WKChildScrollView的子view(通過OC runtime & 視圖樹遍歷的方式),判斷他的delegate是否為WKScrollingNodeScrollViewDelegate 。
我們運(yùn)行時(shí)找到類型為 WKChildScrollView 的子view后,獲取其delegate類型,確實(shí)是WKScrollingNodeScrollViewDelegate。至此我們找到了崩潰堆棧中的scrollview。
確定了崩潰堆棧中的scrollview的類型,那么修復(fù)起來也比較容易了。在頁面生命周期的viewDidAppear方法里,獲取類型為 WKChildScrollView的子view。然后在dealloc方法里,將其delegate置空即可。
deinit { if self.childScrollView != nil { if self.childScrollView?.delegate != nil { self.childScrollView?.delegate = nil } }}deinit { if self.childScrollView != nil { if self.childScrollView?.delegate != nil { self.childScrollView?.delegate = nil } }}
4.3 小程序同層渲染想完了解決方案,那么WKChildScrollView 是做啥用的呢?
WKWebView 在內(nèi)部采用的是分層的方式進(jìn)行渲染,它會(huì)將 WebKit 內(nèi)核生成的 Compositing Layer(合成層)渲染成 iOS 上的一個(gè) WKCompositingView,這是一個(gè)客戶端原生的 View,不過可惜的是,內(nèi)核一般會(huì)將多個(gè) DOM 節(jié)點(diǎn)渲染到一個(gè) Compositing Layer 上,因此合成層與 DOM 節(jié)點(diǎn)之間不存在一對一的映射關(guān)系。當(dāng)把一個(gè) DOM 節(jié)點(diǎn)的 CSS 屬性設(shè)置為overflow: scroll(低版本需同時(shí)設(shè)置-webkit-overflow-scrolling: touch)之后,WKWebView 會(huì)為其生成一個(gè)WKChildScrollView,與 DOM 節(jié)點(diǎn)存在映射關(guān)系,這是一個(gè)原生的UIScrollView的子類,也就是說 WebView 里的滾動(dòng)實(shí)際上是由真正的原生滾動(dòng)組件來承載的。WKWebView 這么做是為了可以讓 iOS 上的 WebView 滾動(dòng)有更流暢的體驗(yàn)。雖說WKChildScrollView也是原生組件,但 WebKit 內(nèi)核已經(jīng)處理了它與其他 DOM 節(jié)點(diǎn)之間的層級關(guān)系,這一特性可以用來做小程序的同層渲染。(「同層渲染」顧名思義則是指通過一定的技術(shù)手段把原生組件直接渲染到 WebView 層級上,此時(shí)「原生組件層」已經(jīng)不存在,原生組件此時(shí)已被直接掛載到 WebView 節(jié)點(diǎn)上。你幾乎可以像使用非原生組件一樣去使用「同層渲染」的原生組件,比如使用view、image覆蓋原生組件、使用z-index指定原生組件的層級、把原生組件放置在scroll-view、swiper、movable-view等容器內(nèi)等等)。
5、蘋果的修復(fù)方案本著嚴(yán)謹(jǐn)?shù)膽B(tài)度,我們想是什么導(dǎo)致了最開始的崩潰堆棧呢?是我們開發(fā)過程中的功能還是系統(tǒng)bug?如果是系統(tǒng)bug,其他公司也可能遇到,但是互聯(lián)網(wǎng)上搜不到其他公司或開發(fā)者討論崩潰相關(guān)信息。我們繼續(xù)看一下崩潰堆棧的top 函數(shù)RemoteScrollingTree::scrollingTreeNodeDidScroll() 源碼如下:
void RemoteScrollingTree::scrollingTreeNodeDidScroll(ScrollingTreeScrollingNode& node, ScrollingLayerPositionAction scrollingLayerPositionAction){ ASSERT(isMainRunLoop()); ScrollingTree::scrollingTreeNodeDidScroll(node, scrollingLayerPositionAction); if (!m_scrollingCoordinatorProxy) return; std::optional layoutViewportOrigin; if (is(node)) layoutViewportOrigin = downcast(node).layoutViewport().location(); m_scrollingCoordinatorProxy->scrollingTreeNodeDidScroll(node.scrollingNodeID(), node.currentScrollPosition(), layoutViewportOrigin, scrollingLayerPositionAction);}void RemoteScrollingTree::scrollingTreeNodeDidScroll(ScrollingTreeScrollingNode& node, ScrollingLayerPositionAction scrollingLayerPositionAction){ ASSERT(isMainRunLoop()); ScrollingTree::scrollingTreeNodeDidScroll(node, scrollingLayerPositionAction); if (!m_scrollingCoordinatorProxy) return; std::optional layoutViewportOrigin; if (is(node)) layoutViewportOrigin = downcast(node).layoutViewport().location(); m_scrollingCoordinatorProxy->scrollingTreeNodeDidScroll(node.scrollingNodeID(), node.currentScrollPosition(), layoutViewportOrigin, scrollingLayerPositionAction);}
崩潰在這個(gè)函數(shù)里,查看這個(gè)函數(shù)的commit記錄:
簡單描述一下就是scrollingTreeNodeDidScroll方法中使用的m_scrollingCoordinatorProxy 對象改成weak指針,并進(jìn)行判空操作。這種改變,正是解決m_scrollingCoordinatorProxy 內(nèi)存被釋放后還在訪問的方案。
這個(gè)commit是2023年2月28號提交的,commit log是:
[UI-side compositing] RemoteScrollingTree needs to hold a weak ref to the RemoteScrollingCoordinatorProxyhttps://bugs.webkit.org/show_bug.cgi?id=252963rdar://105949247Reviewed by Tim Horton.The scrolling thread can extend the lifetime of the RemoteScrollingTree via activity on that thread,so RemoteScrollingTree needs to hold a nullable reference to the RemoteScrollingCoordinatorProxy;use a WeakPtr.[UI-side compositing] RemoteScrollingTree needs to hold a weak ref to the RemoteScrollingCoordinatorProxyhttps://bugs.webkit.org/show_bug.cgi?id=252963rdar://105949247Reviewed by Tim Horton.The scrolling thread can extend the lifetime of the RemoteScrollingTree via activity on that thread,so RemoteScrollingTree needs to hold a nullable reference to the RemoteScrollingCoordinatorProxy;use a WeakPtr.
至此,我們基本確認(rèn),這個(gè)崩潰堆棧是webkit內(nèi)部實(shí)現(xiàn)的一個(gè)bug,蘋果內(nèi)部開發(fā)者最終使用弱引用的方式解決。
同時(shí)修復(fù)上線后,這個(gè)crash的崩潰量也降為0。
6、總結(jié)本文中的crash從出現(xiàn)到解決歷時(shí)近一年,一開始根據(jù)線上日志判斷是h5 頁面返回 & h5 頁面滾動(dòng)導(dǎo)致的問題,禁用手勢后雖然幾乎解決問題,但是線上還有零星crash上報(bào),因此為了保證h5 離線功能的線上穩(wěn)定性,需要完美解決問題。
本文的crash 似曾相識,但是經(jīng)過驗(yàn)證和閱讀源碼后發(fā)現(xiàn)并不是想象的那樣,繼續(xù)通過猜想+閱讀源碼的方式尋找到了崩潰堆棧中的真正scrollview代理對象,從而在app 側(cè)解決問題。最后發(fā)現(xiàn)是蘋果webkit的bug。
本文中的崩潰問題本質(zhì)上是野指針問題,那么野指針問題定位有沒有通用的解決方案呢?
標(biāo)簽:
推薦
-
得物H5容器野指針疑難問題排查 & 解決
1、背景得物iOS4 9 x版本上線后,一些帶有橫向滾動(dòng)內(nèi)容的h5頁面,有一個(gè)webkit相關(guān)crash增加較快。通過Cras
來源: -
金庸群俠傳4半瓶神仙醋最新版_金庸群俠傳4半瓶神仙醋-短訊
1、一次性秒殺醋哥。2、好感度80以上。3、至少完成35個(gè)劇情任務(wù)。本文就為大家分享到這里,希望小伙伴們會(huì)
來源: -
數(shù)據(jù)偏度介紹和處理方法|環(huán)球看熱訊
偏度(skewness)是用來衡量概率分布或數(shù)據(jù)集中不對稱程度的統(tǒng)計(jì)量。它描述了數(shù)據(jù)分布的尾部(tail)在平均
來源: -
最大“黑客帝國”非美莫屬-頭條
最大“黑客帝國”非美莫屬---近日,有美國公司分析團(tuán)隊(duì)聲稱,一個(gè)中國黑客組織對美國的各種關(guān)鍵基礎(chǔ)設(shè)施...
來源: -
環(huán)球最新:馬斯克稱中國航天工程計(jì)劃更加超前
中國載人航天工程在5月29日的新聞發(fā)布會(huì)上公布了下一步的發(fā)展計(jì)劃,明確表示目標(biāo)是2030年前實(shí)現(xiàn)中國人首次
來源: -
得物H5容器野指針疑難問題排查 & 解決
1、背景得物iOS4 9 x版本上線后,一些帶有橫向滾動(dòng)內(nèi)容的h5頁面,有一個(gè)webkit相關(guān)crash增加較快。通過Cras
來源: -
“白發(fā)姑蘇”傳承煥新——二千五百年古城的人文經(jīng)濟(jì)嬗變
“白發(fā)姑蘇”傳承煥新——二千五百年古城的人文經(jīng)濟(jì)嬗變---作為全國唯一國家歷史文化名城保護(hù)區(qū),位于姑...
來源: -
前沿資訊!長征二號F火箭點(diǎn)火發(fā)射 神舟十六號載人飛船奔赴空間站
本文轉(zhuǎn)自:人民網(wǎng)人民網(wǎng)酒泉5月30日電(記者翁奇羽、趙竹青)5月30日上午,搭載神舟十六號載人飛船的長征二
來源: -
李開復(fù):AI 2.0將帶來比移動(dòng)互聯(lián)網(wǎng)大十倍顛覆性機(jī)會(huì)
在2023中關(guān)村論壇“人工智能大模型發(fā)展”分論壇上,,創(chuàng)新工場董事長兼CEO李開復(fù)談及了他對AI2 0浪潮的...
來源: -
“以我為主”釋放市場化改革效能
“以我為主”釋放市場化改革效能---作為貸款利率定價(jià)之“錨”,每個(gè)月的貸款市場報(bào)價(jià)利率(LPR)報(bào)價(jià)有...
來源: -
綠源電動(dòng)車港交所遞交招股書
綠源電動(dòng)車是一家電動(dòng)個(gè)人交通工具的制造商。產(chǎn)品涵蓋電動(dòng)自行車、電動(dòng)輕便摩托車、電動(dòng)摩托車三大品類。今
來源: -
英偉達(dá)將推AI超級計(jì)算機(jī)比上代內(nèi)存擴(kuò)500倍_天天新消息
英偉達(dá)(Nvidia)將推出AI超級計(jì)算機(jī)DGXGH200,與上一代相比內(nèi)存擴(kuò)大500倍。英偉達(dá)CEO黃仁勛稱它“集成了英偉
來源: -
一張精工“面膜”背后的“獨(dú)門絕技”|當(dāng)前快報(bào)
一張精工“面膜”背后的“獨(dú)門絕技”---如果說傳統(tǒng)工業(yè)制品是用磨具磨料這個(gè)工業(yè)“牙齒”啃出來的,那么...
來源: -
每日消息!豪江智能深交所公開招股
豪江智能專業(yè)提供智能家居、智慧醫(yī)養(yǎng)、智能辦公、工業(yè)傳動(dòng)等應(yīng)用領(lǐng)域的智能線性驅(qū)動(dòng)類產(chǎn)品,已成為業(yè)界知名
來源: -
全球最資訊丨金碚:挖掘工業(yè)機(jī)器人產(chǎn)業(yè)潛力
金碚:挖掘工業(yè)機(jī)器人產(chǎn)業(yè)潛力---一段時(shí)間以來,工業(yè)機(jī)器人市場蓬勃發(fā)展,市場規(guī)模創(chuàng)下歷史新高。如何更好
來源: -
互聯(lián)網(wǎng)含人量創(chuàng)新低:你的聊友或許連摳腳大漢都不是|當(dāng)前關(guān)注
奇異新概念“互聯(lián)網(wǎng)含人量”,足夠引起大家的驚詫:你日常面對的網(wǎng)絡(luò)社交對象、聊友、飯圈、粉團(tuán)、客服...
來源: -
環(huán)球速讀:磁電阻效應(yīng)(關(guān)于磁電阻效應(yīng)介紹)
來為大家講解以上的問題。磁電阻效應(yīng),電阻效應(yīng)介紹這個(gè)很多人還不知道,我們一起來看看!1、在通有電流的金
來源: -
每日快報(bào)!總感覺腳熱是怎么回事_腳熱是怎么回事
1、腳熱的原因很多,可能是正?,F(xiàn)象,只是溫度略高。有時(shí)可能是因?yàn)榧膊?,包括血虛、虛,也可能出現(xiàn)體虛。
來源: -
環(huán)球今日報(bào)丨Quest 3或?qū)⒊蔀樘O果MR最大挑戰(zhàn)者
據(jù)報(bào)道,彭博專欄作家馬克·古爾曼上周上手試用了尚未發(fā)布的Quest3混合現(xiàn)實(shí)頭顯。在他看來,這是同樣尚...
來源: -
油價(jià)年內(nèi)第4漲將至,95號汽油或重回8元時(shí)代
油價(jià)年內(nèi)第4漲將至,95號汽油或重回8元時(shí)代---中國經(jīng)濟(jì)網(wǎng)北京5月30日訊(記者王婉瑩)新一輪油價(jià)調(diào)整,又要
來源: -
焦點(diǎn)信息:36氪研究院 | 2023年中國實(shí)時(shí)音視頻(RTC)行業(yè)洞察報(bào)告
早在2015年左右,直播和短視頻的興起帶動(dòng)人們信息消費(fèi)的內(nèi)容逐漸從文字向語音、視頻信息轉(zhuǎn)變,加之全民
來源: -
今日報(bào)丨馬斯克與Meta首席科學(xué)家再次就人工智能展開交鋒
特斯拉CEO埃隆·馬斯克與Meta首席人工智能科學(xué)家楊立昆近日圍繞人工智能和自動(dòng)駕駛問題在推特上再次展開...
來源: -
凱迪拉克新款CT6、XT4、GT4上市-環(huán)球觀熱點(diǎn)
凱迪拉克新款CT6、XT4、GT4三款車型上市,官方指導(dǎo)價(jià)分別為35 97萬-46 97萬元、22 97萬-27 57萬元、21 97萬
來源: -
發(fā)揮人口對經(jīng)濟(jì)社會(huì)發(fā)展的能動(dòng)作用_天天時(shí)訊
發(fā)揮人口對經(jīng)濟(jì)社會(huì)發(fā)展的能動(dòng)作用---二十屆中央財(cái)經(jīng)委員會(huì)第一次會(huì)議指出,當(dāng)前我國人口發(fā)展呈現(xiàn)少子化、
來源: -
直播帶貨要?jiǎng)?chuàng)新更要規(guī)范 當(dāng)前簡訊
直播帶貨要?jiǎng)?chuàng)新更要規(guī)范---日前,經(jīng)濟(jì)日報(bào)攜手京東發(fā)布數(shù)據(jù)顯示,2023年一季度對比2021年一季度,醫(yī)藥產(chǎn)品
來源: -
每日熱議!山姆回應(yīng)同款蛋糕上海、杭州差價(jià)大
近日,有網(wǎng)友在社交平臺上發(fā)帖“同樣的蛋糕杭州比上海貴這么多”,內(nèi)容為在山姆超市APP內(nèi),一款名為“Th...
來源: -
世界百事通!彰顯自貿(mào)試驗(yàn)區(qū)“排頭兵”作用
彰顯自貿(mào)試驗(yàn)區(qū)“排頭兵”作用---商務(wù)部數(shù)據(jù)顯示,今年一季度,我國自貿(mào)試驗(yàn)區(qū)外貿(mào)外資實(shí)現(xiàn)較快增長。21...
來源: -
國博推出原創(chuàng)文物活化舞臺劇《盛世歡歌》
中國社會(huì)科學(xué)網(wǎng)訊(記者呂家佐)頭上戴幘,袒胸露腹,著褲赤足,左臂環(huán)抱一扁鼓,右手舉槌欲擊……5月27...
來源: -
2022年我國海洋生態(tài)環(huán)境狀況穩(wěn)中趨好 海水環(huán)境質(zhì)量總體保持穩(wěn)定
央視網(wǎng)消息:今天(5月29日)的生態(tài)環(huán)境部發(fā)布會(huì),同時(shí)還發(fā)布了《2022年中國海洋生態(tài)環(huán)境狀況公報(bào)》。公報(bào)
來源: -
索尼全新PS掌機(jī)Q將問世:10年沒更新這條產(chǎn)品線了 天天快資訊
2023-05-30 05:01:16 作者:人寶寶本周,索尼發(fā)布了一款名為“Project Q”的PlayStation掌上設(shè)備。不
來源: -
每日精選:位圖與矢量圖的區(qū)別是什么(位圖與矢量圖區(qū)別)
1、矢量圖像,也稱為面向?qū)ο蟮膱D像或繪圖圖像,在數(shù)學(xué)上定義為一系列由線連接的點(diǎn)。2、矢量文件中的圖形元
來源: -
金庸群俠傳4半瓶神仙醋最新版_金庸群俠傳4半瓶神仙醋-短訊
1、一次性秒殺醋哥。2、好感度80以上。3、至少完成35個(gè)劇情任務(wù)。本文就為大家分享到這里,希望小伙伴們會(huì)
來源: -
坐看云起時(shí)行到水窮處哲學(xué)_坐看云起時(shí)行到水窮處|天天最資訊
1、終南別業(yè)---王維中歲頗好道,晚家南山陲。2、興來美獨(dú)往,勝事空自知。3、行到水窮處,坐看云起時(shí)。4、
來源: -
榮耀90系列發(fā)布:2億像素相機(jī)+升維影像引擎,實(shí)力提升拍攝體驗(yàn) 環(huán)球熱文
時(shí)隔半年,榮耀在成都發(fā)布了全新一代的數(shù)字系列手機(jī)——榮耀90系列,其中包括榮耀90和榮耀90Pro兩款機(jī)型...
來源: -
華為小米同時(shí)上榜 23年Q1全球高端手機(jī)銷量排名公布 頭條
【手機(jī)中國新聞】在2023年上半年,全球智能手機(jī)市場的出貨量依然在下跌。不過,根據(jù)Canalys的調(diào)查數(shù)據(jù),
來源: -
觀熱點(diǎn):?中超戰(zhàn)報(bào):武磊2度中框3外援建功!海港3-0亞泰5連勝6分優(yōu)勢領(lǐng)跑
北京時(shí)間5月29日,中超第10輪的最后一場比賽,長春亞泰坐鎮(zhèn)主場迎戰(zhàn)上海海港。第11分鐘,卡隆賽季首球?yàn)楹?/p>
來源: -
海信家電集團(tuán)董事長代慧忠當(dāng)選廣東省家電商會(huì)第六屆會(huì)長_世界視點(diǎn)
廣東省家電商會(huì)第六屆會(huì)員代表大會(huì)暨廣東家電行業(yè)高質(zhì)量發(fā)展論壇在廣州隆重舉行。經(jīng)選舉,海信家電集團(tuán)董事
來源: -
西安機(jī)場2023年首乘服務(wù)升級 “中轉(zhuǎn)+旅游”產(chǎn)品發(fā)布-微動(dòng)態(tài)
西安機(jī)場2023年首乘服務(wù)升級“中轉(zhuǎn)+旅游”產(chǎn)品發(fā)布---中新網(wǎng)西安5月29日電29日,西安咸陽國際機(jī)場(以下...
來源: -
45歲摩納哥王妃胖這么多?閃耀F1大獎(jiǎng)賽晚宴好壯實(shí),臉還是很精致
摩納哥王妃現(xiàn)在真是在認(rèn)真履行著王妃的職責(zé),自從回歸到王室后,就經(jīng)常和摩納哥親王一起營業(yè),狀態(tài)也是越來
來源: -
104平現(xiàn)代風(fēng)三居室背景干凈利落,客廳讓人感覺好有格調(diào)
104平米的三居室,裝修花了大半年,裝完效果美翻了。下面就給大家介紹一下我家104平現(xiàn)代風(fēng)三居室格的裝修設(shè)
來源:
財(cái)富更多》
-
全球最資訊丨金碚:挖掘工業(yè)機(jī)器人產(chǎn)業(yè)潛力
金碚:挖掘工業(yè)機(jī)器人產(chǎn)業(yè)潛力---一段時(shí)...
-
最大“黑客帝國”非美莫屬-頭條
最大“黑客帝國”非美莫屬---近日,有美...
-
“以我為主”釋放市場化改革效能
“以我為主”釋放市場化改革效能---作為...
-
一張精工“面膜”背后的“獨(dú)門絕技”|當(dāng)前快報(bào)
一張精工“面膜”背后的“獨(dú)門絕技”---...
-
“白發(fā)姑蘇”傳承煥新——二千五百年古城的人文經(jīng)濟(jì)嬗變
“白發(fā)姑蘇”傳承煥新——二千五百年古...
動(dòng)態(tài)更多》
-
環(huán)球速讀:磁電阻...
-
2022年我國海洋生...
-
每日精選:位圖與...
-
黑棗的功效與作用...
-
觀熱點(diǎn):?中超戰(zhàn)...
-
最強(qiáng)進(jìn)化_對于最強(qiáng)...
熱點(diǎn)
- realme10系列正式宣布 采用雙曲面屏正面頂部居中挖孔
- 五菱全新微型電動(dòng)車內(nèi)飾官圖發(fā)布 座椅采用星際形打孔工藝
- 努比亞Z40星空典藏版正式開售 采用微米級油畫筆觸紋理技術(shù)
- iQOO11系列正式官宣 首批搭載驍龍8Gen2機(jī)型之一
- 海信34英寸帶魚屏顯示器發(fā)布 支持165Hz刷新率
- OPPO明年將商用240W超級閃充 新一代電芯支持更高倍率充電
- 第一款A(yù)ndroid手機(jī)渲染圖曝光 橫向滑蓋設(shè)計(jì)和全尺寸鍵盤
- 吉利首款純電皮卡11月9日上市 車輛續(xù)航里程超過610公里
- 努比亞Z40SPro星空典藏版正式公布 堪稱窄邊框天花板
- vivo無線運(yùn)動(dòng)耳機(jī)2今日正式上市 首銷只要119元
- 最強(qiáng)進(jìn)化_對于最強(qiáng)進(jìn)化簡單介紹
- 互動(dòng) 北汽藍(lán)谷:目前SiC電機(jī)控制器已經(jīng)處于研轉(zhuǎn)產(chǎn)的階段 正在進(jìn)行第三輪可靠耐久測試_熱推薦
- 【世界快播報(bào)】溫暖“童”行,長壽這場培訓(xùn)教你如何贏得孩子的心!
- 環(huán)球快資訊丨旬月在古文是什么意思_古文的旬是什么意思
- 銀魂哪一集是神威出場_銀魂第三季神威出場了嗎|全球快看點(diǎn)
- 戀愛恐懼癥的癥狀_戀愛恐懼癥的24個(gè)表現(xiàn) 戀愛恐懼癥有什么表現(xiàn)
- 微動(dòng)態(tài)丨力爭突破100億元!2023臨沂實(shí)施水利項(xiàng)目工程數(shù)量及投資額均居全省第一
- 證明信的格式及范文調(diào)職_證明信的格式及范文
- 快消息!講歷史的節(jié)目誰講得好(講歷史的節(jié)目)
- 后搖音樂代表作_后搖音樂
- “杭州傘” “玉琮館” 這些亞運(yùn)場館科技感爆棚_天天微資訊
- 焦點(diǎn)消息!中國信通院“OSCAR合規(guī)治理沙龍”在京召開 騰訊、阿里等企業(yè)共話開源生態(tài)建設(shè)
- 當(dāng)前動(dòng)態(tài):基金調(diào)研丨Harding Loevner基金調(diào)研漢鐘精機(jī)
- 當(dāng)前觀點(diǎn):最新!河南要求:優(yōu)先保住小麥種子、落實(shí)跨區(qū)機(jī)收免費(fèi)通行......
- 中超:深圳勝梅州客家
- 天天時(shí)訊:情感與現(xiàn)實(shí):探秘斯皮爾伯格如何通過電影讓人深思人生
- 北京檢察機(jī)關(guān)依法對周茂非涉嫌貪污、受賄案提起公訴
- 直播預(yù)告:今日中午專家教你居家推拿治療頸腰椎???|環(huán)球快播
- 福建進(jìn)一步加強(qiáng)房地產(chǎn)項(xiàng)目預(yù)售資金監(jiān)管 違規(guī)企業(yè)將暫停銷售
- 瀘水縣氣象臺發(fā)布高溫橙色預(yù)警信號【Ⅱ級/嚴(yán)重】【2023-05-29】 天天滾動(dòng)
- 皇社十年的等待!久保建英發(fā)文慶祝:歐冠,我們來啦!
- 天孚通信:控股股東擬減持公司不超0.75%股份
- 迎接賽末沖刺階段!
- 天天百事通!棲霞建設(shè): 棲霞建設(shè)持股5%以上股東集中競價(jià)減持股份計(jì)劃時(shí)間屆滿暨結(jié)果公告
- 小舞成神造型終于來了,頭發(fā)完全散開,身穿白色蕾絲樣子仙哭|視焦點(diǎn)訊
- 世界熱文:海賊王:收視率最高的一集,只因娜美這這位侍女的迷之走光!
- 環(huán)球熱推薦:海水環(huán)境質(zhì)量總體保持穩(wěn)定 2022年我國海洋生態(tài)環(huán)境狀況穩(wěn)中趨好
- 618職場福利!華為HarmonyOS 3 double職場生產(chǎn)力|環(huán)球播報(bào)
- 世界快資訊:一餓就心慌渾身無力發(fā)抖需要治療嗎(一餓就心慌渾身無力發(fā)抖)
- 當(dāng)虹科技與三六零集團(tuán)簽約:開展內(nèi)容審核項(xiàng)目合作|全球時(shí)訊
- 土耳其第一次舉辦總統(tǒng)選舉第二輪投票 充滿了不確定性 全球聚看點(diǎn)
- 最新快訊!36氪晚報(bào)丨波音將在零部件供應(yīng)鏈等領(lǐng)域與越南合作;渣打與普華永道中國聯(lián)合發(fā)布白皮書;五糧液參股創(chuàng)投企業(yè)投資新能源公司
- 經(jīng)濟(jì)日報(bào):為農(nóng)機(jī)跨區(qū)作業(yè)提供有溫度的服務(wù)|當(dāng)前訊息
- 無人駕駛礦山運(yùn)輸機(jī)器人"載山CarMo"正式投入使用|焦點(diǎn)滾動(dòng)
- 天天熱點(diǎn)評!吉林省前4月規(guī)上工業(yè)快速增長
- 波士頓咨詢公司報(bào)告:中國時(shí)尚行業(yè)將呈現(xiàn)量穩(wěn)質(zhì)升趨勢
- eFishery 完成規(guī)模為1.08億美元的D輪融資,軟銀等參投
- 講述“這一屆”職場人的故事
- 新增多項(xiàng)實(shí)用功能,廣汽傳祺影酷迎新版本OTA升級-全球資訊
- 環(huán)球新消息丨V觀財(cái)報(bào)|張家界收年報(bào)問詢函:為何凈利潤連續(xù)三年虧損?
- 隆基5月單晶硅片價(jià)格公示 平均價(jià)格下調(diào)約30%
- 深圳時(shí)尚家居設(shè)計(jì)周圓滿閉幕,德國 88 年品牌樂德飛翼
- 工業(yè)富聯(lián)漲6.6% 機(jī)構(gòu)凈賣出7.15億元
- 環(huán)球觀速訊丨兩部門:推動(dòng)大企業(yè)加強(qiáng)計(jì)量引領(lǐng)帶動(dòng),促大中小企業(yè)融通發(fā)展
- 華電國際漲停 機(jī)構(gòu)凈買入1.76億元
- 戴威美國二次創(chuàng)業(yè)項(xiàng)目陷入困境:資金鏈?zhǔn)茏?擴(kuò)張徹底停滯 天天速讀
- 焦點(diǎn)滾動(dòng):布吉人民醫(yī)院婦科怎么樣 布吉婦科醫(yī)院
- 焦點(diǎn)快看:報(bào)告稱2025年中國分布式存儲市場規(guī)模將超200億元
- 臺灣5月消費(fèi)者信心指數(shù)回升 學(xué)者指“反映短期效應(yīng)”
- iPhone16Pro機(jī)型為6.3和6.9英寸,屏幕加大只因這個(gè)組件 焦點(diǎn)播報(bào)
- 每日熱文:18元一斤?消費(fèi)者大呼西瓜貴了 一小塊瓜要5元
- 廢鋼跌勢趨緩,跟隨成材運(yùn)行
- 硅動(dòng)力6月5日上交所首發(fā)上會(huì) 擬募資6.9億元|速遞
- 全球快播:少年中國問丨量子計(jì)算如何改變我們的生活?
- 江西移動(dòng)與南昌市人民政府深化戰(zhàn)略合作
- 思密達(dá)全新劑型蒙脫石混懸液上市
- 微信:治理個(gè)人帳號發(fā)布違禁品營銷信息行為 世界觀速訊
- 東方通跌15.64% 機(jī)構(gòu)凈賣出7416萬元_天天即時(shí)看
- 航錦科技跌9.57% 機(jī)構(gòu)凈賣出9469萬元 短訊
- 全球視點(diǎn)!光子芯片溫控耗能減至目前的百萬分之一 可用于未來數(shù)據(jù)中心和超級計(jì)算機(jī)通信網(wǎng)絡(luò)
- 2023中關(guān)村論壇|精彩繼續(xù) 中關(guān)村國際技術(shù)交易大會(huì)不落幕 天天看熱訊
- 工行淮安城北支行貫徹學(xué)習(xí)二十大“四輪驅(qū)動(dòng)”推進(jìn)網(wǎng)點(diǎn)競爭力提升_實(shí)時(shí)焦點(diǎn)
- 生態(tài)環(huán)境部:穩(wěn)步擴(kuò)大火電、鋼鐵等行業(yè)碳監(jiān)測評估
- 北京海淀區(qū)20所中小學(xué)授牌“非遺傳承基地?!?/a>
- 科技部火炬中心黨委書記呂先志:去年177家國家高新區(qū)園區(qū)生產(chǎn)總值占國內(nèi)GDP比重13.9%_全球信息
- 觀熱點(diǎn):文遠(yuǎn)知行獲ISO/SAE 21434汽車網(wǎng)絡(luò)安全流程認(rèn)證
- 工信部:1-4月份我國軟件業(yè)務(wù)收入33166億元,同比增長12.8%
- 北京米揚(yáng)麗格夏正義院長:關(guān)于舒鉑材料的臨床實(shí)踐 暨纖鉑新品上市
- 為什么現(xiàn)在的演唱會(huì)都不能選位置?|全球訊息
- 清肺排毒湯_清肺
- 切瓦特·埃加福特加盟《毒液3》 漫威再就業(yè) 天天資訊
- 米蘭鎖定前四,皮奧利用人釋放信號:有人急需挽留,有人放棄治療
- 不屑,姆巴佩突爆爭議采訪!皇馬底蘊(yùn)成笑話,佛爺知道C羅多好了
- HKC惠科發(fā)布首款QHD 500Hz顯示器:40-500Hz可變高刷、雙百色域 全球簡訊
- 天合光能跌16.34% 機(jī)構(gòu)凈賣出4.52億元
- 環(huán)球熱門:Patient21獲得1.08億美元C輪融資
- 天津港集團(tuán)與ABB公司簽署戰(zhàn)略合作協(xié)議|環(huán)球熱文
- 世界簡訊:渝北雙鳳橋街道:做好燃?xì)庾蚤]閥安裝工作 筑牢群眾生命安全防線
- 特斯拉聲明:目前沒有與任何第三方進(jìn)行招聘活動(dòng)-每日訊息
- 觀天下·美債危機(jī)|媒體和業(yè)內(nèi)人士:美國債務(wù)上限協(xié)議達(dá)成未必是“好消息”_天天簡訊
- 觀天下!通富微電漲10% 機(jī)構(gòu)凈買入3.3億元
- 華為開發(fā)者大會(huì)2023 ( Cloud ) 將于7月7日正式揭幕-微動(dòng)態(tài)
- 高三備考好兄弟Brother DCP-T426W打印機(jī)
- 最高法、全國婦聯(lián)發(fā)布保護(hù)未成年人權(quán)益司法救助典型案例 環(huán)球報(bào)道
- 鵬都農(nóng)牧跌9.95% 機(jī)構(gòu)凈賣出5105萬元
- 教師辦公必備好物Brother DCP-B7535DW打印機(jī)
- 花旗銀行開戶條件門檻_花旗銀行開戶條件
- 榮耀90系列全新發(fā)布,全系標(biāo)配2億像素寫真相機(jī)影像升維_當(dāng)前熱門
- 每日精選:開發(fā)“在線預(yù)約”,創(chuàng)新旅游業(yè)服務(wù) 在家“動(dòng)動(dòng)手”,出游更省心
- 臺北電腦展上英偉達(dá)(NVDA.US)公布了哪些產(chǎn)品和服務(wù)?-天天視點(diǎn)
- 滾動(dòng):18年前失蹤兒子,線索斷裂
- 榮耀90系列全新發(fā)布,全系標(biāo)配2億像素寫真相機(jī)影像升維_焦點(diǎn)快播
- 百度地圖2023年第一季度中國城市交通報(bào)告:廣東人通勤出行最幸福|環(huán)球速看
- 全球今亮點(diǎn)!吳若曼新任興銀基金董事長兼法定代表人 張貴云離任
- 每日精選:電影《長空之王》香港票房超11萬美元
- 兩部門聯(lián)合印發(fā)《關(guān)于實(shí)施中小企業(yè)計(jì)量伙伴計(jì)劃的通知》
- 第25屆上海國際電影節(jié)金爵獎(jiǎng)入圍影片名單揭曉 速讀
- 當(dāng)前視點(diǎn)!現(xiàn)代和起亞宣布與FIFA的合作伙伴關(guān)系延長至2030年
- 天天新動(dòng)態(tài):平安基金成鈞離任2只ETF
- 國投瑞銀瑞盛混合(LOF)增聘基金經(jīng)理賀明之 全球熱頭條
- 中微電科技完成新一輪融資-全球速訊
- 每日看點(diǎn)!Checkmate.獲得1500萬美元A輪融資
- 匯豐晉信基金副總經(jīng)理兼首席運(yùn)營官趙琳離任|實(shí)時(shí)
- 當(dāng)前快看:醫(yī)療冷鏈有哪些股票?醫(yī)療冷鏈概念股票一覽
- 世界今日訊!光伏組件概念股名單一覽(2023A股光伏組件概念上市公司)
- 光伏發(fā)電投資額同比大增 機(jī)構(gòu)看好光伏設(shè)備高景氣
- 環(huán)球動(dòng)態(tài):神舟十五號乘組即將返回 創(chuàng)出艙次數(shù)最多等多項(xiàng)紀(jì)錄
- 世界今日報(bào)丨海洛創(chuàng)新獲千萬元Pre-A輪融資
- 視頻解析工具Video-ChatGPT上線 可用文本描述視頻內(nèi)容 世界新動(dòng)態(tài)
- Sabi Am獲得3800萬美元B輪融資
- 競賽聚英才 第二屆"長江杯"動(dòng)力電池技術(shù)挑戰(zhàn)賽決賽開幕
- 租房難?一德國男子使用ChatGPT 找到滿意的房子 全球微資訊
- 業(yè)界:提升農(nóng)業(yè)社會(huì)化服務(wù)水平 讓小農(nóng)戶融入大產(chǎn)業(yè)大市場_世界關(guān)注
- 【環(huán)球時(shí)快訊】收評:創(chuàng)業(yè)板指跌1.14% 電力板塊全天強(qiáng)勢
- 【當(dāng)前熱聞】全國首個(gè)無人島島主成“老賴” 名下海島起價(jià)2785萬流拍
- 天天快看:種地吧出品方申請后陡門商標(biāo) 種地吧出品方申請十個(gè)勤天商標(biāo)
- 天天觀熱點(diǎn):次北固山下的意思簡短一點(diǎn)_次北固山下的意思簡介介紹
- 全球看點(diǎn):議論“校園碾壓案”家長妝容,這是無聊更是殘忍
- 當(dāng)前快播:豆瓣8.1,這世界也容不下男孩的親密友誼
- 搞了半天,高德打車無證卻變相從事網(wǎng)約車經(jīng)營,一喂等平臺吃瓜了
- 華為發(fā)布商業(yè)市場新品,助力數(shù)字化轉(zhuǎn)型_每日播報(bào)
- 寶馨科技攜新能源領(lǐng)域多項(xiàng)最新研發(fā)和應(yīng)用成果亮相SNEC展會(huì) 每日熱點(diǎn)
- 外媒:特斯拉數(shù)據(jù)或“大規(guī)?!毙孤?,涉及馬斯克信息-全球消息
- Orbofi AI獲得280萬美元戰(zhàn)略投資-全球聚看點(diǎn)
- 潤貝航科(001316):該股換手率大于8%(05-29)-聚看點(diǎn)