
文章實(shí)時(shí)采集
優(yōu)采云的強大功能有哪些?不妨前往www.ucaiyun
采集交流 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 78 次瀏覽 ? 2023-01-14 18:29
優(yōu)采云的文章實(shí)時(shí)采集功能不僅能夠幫助用戶(hù)節省時(shí)間和精力,同時(shí)還可以有效地幫助用戶(hù)進(jìn)行SEO優(yōu)化。它可以讓用戶(hù)根據關(guān)鍵詞和關(guān)鍵詞組對文章進(jìn)行分類(lèi),使得文章內容與關(guān)鍵詞相關(guān)性更強,有助于網(wǎng)站在搜索引擎中獲得更好的排名。
此外,優(yōu)采云還可以讓用戶(hù)根據特定的關(guān)鍵詞自動(dòng)生成新聞內容,不僅能夠大大減少人工制作內容的工作量,還可以節省人工制作內容所耗費的時(shí)間。此外,優(yōu)采云還可以根據用戶(hù)所輸入的內容,自動(dòng)生成相應的新聞標題和圖片。
最后,優(yōu)采云還可以幫助用戶(hù)快速地將新聞內容上傳到各大平臺上去。用戶(hù)只需要將新聞內容上傳到優(yōu)采云中,就能夠快速地將內容同步到各大平臺上去。這樣一來(lái),用戶(hù)就不必為了將新聞內容發(fā)布到各大平臺耗費大量的時(shí)間和精力了。
總之,優(yōu)采云是一款強大的文章實(shí)時(shí)采集軟件,能夠有效地幫助用戶(hù)快速、準確地從多個(gè)網(wǎng)站上獲取信息,并根據特定的關(guān)鍵詞進(jìn)行SEO優(yōu)化、生成相應的標題和圖片、將新聞內容上傳到各大平臺。如果你也想體驗一下優(yōu)采云的強大功能,不妨前往www.bjpromise.cn注冊使用一下吧。 查看全部
文章實(shí)時(shí)采集是當今網(wǎng)絡(luò )營(yíng)銷(xiāo)活動(dòng)中非常重要的一環(huán),它能夠有效提升網(wǎng)站的曝光度,進(jìn)而帶來(lái)更多的流量。優(yōu)采云是一款非常出色的文章實(shí)時(shí)采集軟件,可以幫助用戶(hù)快速地從多個(gè)網(wǎng)站上抓取信息,并將其匯總到網(wǎng)站中。

優(yōu)采云的文章實(shí)時(shí)采集功能不僅能夠幫助用戶(hù)節省時(shí)間和精力,同時(shí)還可以有效地幫助用戶(hù)進(jìn)行SEO優(yōu)化。它可以讓用戶(hù)根據關(guān)鍵詞和關(guān)鍵詞組對文章進(jìn)行分類(lèi),使得文章內容與關(guān)鍵詞相關(guān)性更強,有助于網(wǎng)站在搜索引擎中獲得更好的排名。

此外,優(yōu)采云還可以讓用戶(hù)根據特定的關(guān)鍵詞自動(dòng)生成新聞內容,不僅能夠大大減少人工制作內容的工作量,還可以節省人工制作內容所耗費的時(shí)間。此外,優(yōu)采云還可以根據用戶(hù)所輸入的內容,自動(dòng)生成相應的新聞標題和圖片。

最后,優(yōu)采云還可以幫助用戶(hù)快速地將新聞內容上傳到各大平臺上去。用戶(hù)只需要將新聞內容上傳到優(yōu)采云中,就能夠快速地將內容同步到各大平臺上去。這樣一來(lái),用戶(hù)就不必為了將新聞內容發(fā)布到各大平臺耗費大量的時(shí)間和精力了。
總之,優(yōu)采云是一款強大的文章實(shí)時(shí)采集軟件,能夠有效地幫助用戶(hù)快速、準確地從多個(gè)網(wǎng)站上獲取信息,并根據特定的關(guān)鍵詞進(jìn)行SEO優(yōu)化、生成相應的標題和圖片、將新聞內容上傳到各大平臺。如果你也想體驗一下優(yōu)采云的強大功能,不妨前往www.bjpromise.cn注冊使用一下吧。
優(yōu)采云是一個(gè)強大而易用的實(shí)時(shí)文章采集工具
采集交流 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 190 次瀏覽 ? 2023-01-14 12:32
優(yōu)采云是一個(gè)專(zhuān)業(yè)的文章實(shí)時(shí)采集工具,可以幫助編輯更快地收集到最新的新聞、資訊和信息,從而及時(shí)發(fā)布最新的文章。優(yōu)采云不僅支持實(shí)時(shí)采集,還包含了多種功能,如SEO優(yōu)化、數據分析和內容分發(fā)等,這些功能都能幫助編輯有效地處理和發(fā)布內容。
優(yōu)采云的優(yōu)勢在于:首先,它可以幫助編輯快速準確地獲得所需信息;其次,它具有SEO優(yōu)化功能,能夠幫助文章在搜索引擎中展示出來(lái);再者,它還能夠幫助用戶(hù)進(jìn)行數據分析和內容分發(fā)工作。此外,優(yōu)采云還有一個(gè)強大的團隊,隨時(shí)提供用戶(hù)服務(wù)和技術(shù)支持。
此外,優(yōu)采云還能夠根據用戶(hù)的需要進(jìn)行擴展或升級。對于小型團隊來(lái)說(shuō),使用優(yōu)采云就好像是雇傭一位專(zhuān)業(yè)的新聞偵察員一樣方便。如此一來(lái),就不需要專(zhuān)門(mén)從事內容采集工作的人員來(lái)手工錄入信息了。
總之,優(yōu)采云是一個(gè)強大而易用的實(shí)時(shí)文章采集工具。通過(guò)使用優(yōu)采云,不僅能夠快速準確地獲得所需信息,而且還能幫助用戶(hù)進(jìn)行SEO優(yōu)化、數據分析和內容分發(fā)工作。想要詳情了解優(yōu)采云的相關(guān)信息、特性、價(jià)格、應用場(chǎng)合等方面的信息,請前往www.bjpromise.cn 。 查看全部
文章實(shí)時(shí)采集是現在網(wǎng)絡(luò )編輯寫(xiě)作的必備技能。它可以讓編輯更快地收集到實(shí)時(shí)的新聞、資訊和信息,從而及時(shí)發(fā)布最新的文章。隨著(zhù)互聯(lián)網(wǎng)的發(fā)展,文章實(shí)時(shí)采集也變得越來(lái)越重要。
優(yōu)采云是一個(gè)專(zhuān)業(yè)的文章實(shí)時(shí)采集工具,可以幫助編輯更快地收集到最新的新聞、資訊和信息,從而及時(shí)發(fā)布最新的文章。優(yōu)采云不僅支持實(shí)時(shí)采集,還包含了多種功能,如SEO優(yōu)化、數據分析和內容分發(fā)等,這些功能都能幫助編輯有效地處理和發(fā)布內容。

優(yōu)采云的優(yōu)勢在于:首先,它可以幫助編輯快速準確地獲得所需信息;其次,它具有SEO優(yōu)化功能,能夠幫助文章在搜索引擎中展示出來(lái);再者,它還能夠幫助用戶(hù)進(jìn)行數據分析和內容分發(fā)工作。此外,優(yōu)采云還有一個(gè)強大的團隊,隨時(shí)提供用戶(hù)服務(wù)和技術(shù)支持。

此外,優(yōu)采云還能夠根據用戶(hù)的需要進(jìn)行擴展或升級。對于小型團隊來(lái)說(shuō),使用優(yōu)采云就好像是雇傭一位專(zhuān)業(yè)的新聞偵察員一樣方便。如此一來(lái),就不需要專(zhuān)門(mén)從事內容采集工作的人員來(lái)手工錄入信息了。

總之,優(yōu)采云是一個(gè)強大而易用的實(shí)時(shí)文章采集工具。通過(guò)使用優(yōu)采云,不僅能夠快速準確地獲得所需信息,而且還能幫助用戶(hù)進(jìn)行SEO優(yōu)化、數據分析和內容分發(fā)工作。想要詳情了解優(yōu)采云的相關(guān)信息、特性、價(jià)格、應用場(chǎng)合等方面的信息,請前往www.bjpromise.cn 。
優(yōu)采云這樣的文章實(shí)時(shí)采集解決方案可以幫助用戶(hù)快速采集內容
采集交流 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 131 次瀏覽 ? 2023-01-13 21:30
文章實(shí)時(shí)采集有助于網(wǎng)站在搜索引擎上獲得更好的排名,因為搜索引擎會(huì )對網(wǎng)站上的內容進(jìn)行審核,如果內容是原創(chuàng )的,就會(huì )對網(wǎng)站進(jìn)行獎勵。而如果內容是從其他網(wǎng)站復制而來(lái),就不會(huì )有任何獎勵。
因此,文章實(shí)時(shí)采集是一項非常有用的工具,但是也要注意避免一些問(wèn)題。例如,不能直接復制某些文章而不注明出處,這樣做會(huì )影響原作者的版權。此外,應該避免采集過(guò)于頻繁,這樣會(huì )造成用戶(hù)體驗不好。
幸運的是,有一些解決方案可以幫助用戶(hù)在文章實(shí)時(shí)采集時(shí)更加高效、安全。例如優(yōu)采云這樣的軟件可以幫助用戶(hù)快速、合法地將文章內容從其他網(wǎng)站復制到自己的網(wǎng)站上。優(yōu)采云不僅能幫助用戶(hù)快速采集內容,還能幫助用戶(hù)做好SEO優(yōu)化工作,使得新聞內容在各大搜索引擎中得到最大化展示。此外,優(yōu)采云也為用戶(hù)提供了友好、易用的界面來(lái)幫助用戶(hù)快速找到合適的內容。
總之,使用優(yōu)采云這樣的文章實(shí)時(shí)采集解決方案可以幫助用戶(hù)快速、合法地將新聞信息從其他網(wǎng)站上復制到自己的網(wǎng)站上,吸引更多流量、增加SEO優(yōu)化效果。想要詳情了解優(yōu)采云的相關(guān)信息可以前往官網(wǎng)www.bjpromise.cn,也可以咨詢(xún)在線(xiàn)客服人員。 查看全部
隨著(zhù)信息技術(shù)的發(fā)展,文章實(shí)時(shí)采集已成為一項重要的網(wǎng)絡(luò )營(yíng)銷(xiāo)方式。文章實(shí)時(shí)采集是將網(wǎng)上其他網(wǎng)站上的文章內容復制并轉發(fā)到自己的網(wǎng)站上,以便獲得更多的流量,吸引更多的用戶(hù)。

文章實(shí)時(shí)采集有助于網(wǎng)站在搜索引擎上獲得更好的排名,因為搜索引擎會(huì )對網(wǎng)站上的內容進(jìn)行審核,如果內容是原創(chuàng )的,就會(huì )對網(wǎng)站進(jìn)行獎勵。而如果內容是從其他網(wǎng)站復制而來(lái),就不會(huì )有任何獎勵。

因此,文章實(shí)時(shí)采集是一項非常有用的工具,但是也要注意避免一些問(wèn)題。例如,不能直接復制某些文章而不注明出處,這樣做會(huì )影響原作者的版權。此外,應該避免采集過(guò)于頻繁,這樣會(huì )造成用戶(hù)體驗不好。

幸運的是,有一些解決方案可以幫助用戶(hù)在文章實(shí)時(shí)采集時(shí)更加高效、安全。例如優(yōu)采云這樣的軟件可以幫助用戶(hù)快速、合法地將文章內容從其他網(wǎng)站復制到自己的網(wǎng)站上。優(yōu)采云不僅能幫助用戶(hù)快速采集內容,還能幫助用戶(hù)做好SEO優(yōu)化工作,使得新聞內容在各大搜索引擎中得到最大化展示。此外,優(yōu)采云也為用戶(hù)提供了友好、易用的界面來(lái)幫助用戶(hù)快速找到合適的內容。
總之,使用優(yōu)采云這樣的文章實(shí)時(shí)采集解決方案可以幫助用戶(hù)快速、合法地將新聞信息從其他網(wǎng)站上復制到自己的網(wǎng)站上,吸引更多流量、增加SEO優(yōu)化效果。想要詳情了解優(yōu)采云的相關(guān)信息可以前往官網(wǎng)www.bjpromise.cn,也可以咨詢(xún)在線(xiàn)客服人員。
優(yōu)采云使用SEO監測工具來(lái)監測SEO優(yōu)化水平?
采集交流 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 81 次瀏覽 ? 2023-01-13 17:35
隨著(zhù)互聯(lián)網(wǎng)的發(fā)展,文章實(shí)時(shí)采集已成為企業(yè)數據處理中不可或缺的一部分。首先,文章實(shí)時(shí)采集可以幫助企業(yè)快速獲取市場(chǎng)信息,從而及時(shí)掌握市場(chǎng)動(dòng)態(tài),并能夠根據市場(chǎng)行情及時(shí)調整產(chǎn)品戰略和市場(chǎng)定位。其次,文章實(shí)時(shí)采集也有助于企業(yè)提升SEO優(yōu)化水平,以便在搜索引擎中獲得最佳位置。
作為一家專(zhuān)業(yè)的文章實(shí)時(shí)采集服務(wù)商,優(yōu)采云將不斷創(chuàng )新、不斷進(jìn)步、不斷開(kāi)拓,針對不同企業(yè)的需求,開(kāi)發(fā)出多元化、高效、易用的文章實(shí)時(shí)采集解決方案。優(yōu)采云使用先進(jìn)的人工智能和機器學(xué)習技術(shù)來(lái)對海量信息進(jìn)行分類(lèi)、識別、存儲和分析,并根據用戶(hù)需要進(jìn)行相應的處理。此外,優(yōu)采云還將根據用戶(hù)需要對信息進(jìn)行初步處理、去噪、去重、去除廣告內容以及關(guān)鍵詞標注等工作。
此外,優(yōu)采云還將不斷引入先進(jìn)的SEO優(yōu)化工具來(lái)幫助用戶(hù)快速獲得權威性?xún)热莶⑻嵘齋EO優(yōu)化水平。例如:使用語(yǔ)義分析工具來(lái)解決內容相關(guān)性問(wèn)題;使用關(guān)鍵詞分析工具來(lái)幫助用戶(hù)快速找出相應的核心詞;使用圖片分割工具來(lái)有效地將圖片內容與文字內容相結合;使用圖片校正工具來(lái)保證圖片尺寸合規;使用SEO優(yōu)化工具來(lái)幫助用戶(hù)快速找出有效核心詞;使用SEO監測工具來(lái)監測SEO效果。
優(yōu)采云是一家專(zhuān)注于新聞信息處理的高科技IT服務(wù)商,地址位于中國上海浦東新區張揚路888號國航大廈1801-1802。如有任何問(wèn)題或者想要了解優(yōu)采云的服務(wù)內容,都可以通過(guò)www.bjpromise.cn 網(wǎng)站進(jìn)行咨詢(xún)。 查看全部
文章實(shí)時(shí)采集是一種自動(dòng)化的網(wǎng)絡(luò )數據抓取技術(shù),它利用特定的網(wǎng)絡(luò )爬蟲(chóng)和內容處理軟件,對互聯(lián)網(wǎng)上的信息進(jìn)行實(shí)時(shí)采集,從而大大提升了企業(yè)數據處理能力和效率。

隨著(zhù)互聯(lián)網(wǎng)的發(fā)展,文章實(shí)時(shí)采集已成為企業(yè)數據處理中不可或缺的一部分。首先,文章實(shí)時(shí)采集可以幫助企業(yè)快速獲取市場(chǎng)信息,從而及時(shí)掌握市場(chǎng)動(dòng)態(tài),并能夠根據市場(chǎng)行情及時(shí)調整產(chǎn)品戰略和市場(chǎng)定位。其次,文章實(shí)時(shí)采集也有助于企業(yè)提升SEO優(yōu)化水平,以便在搜索引擎中獲得最佳位置。

作為一家專(zhuān)業(yè)的文章實(shí)時(shí)采集服務(wù)商,優(yōu)采云將不斷創(chuàng )新、不斷進(jìn)步、不斷開(kāi)拓,針對不同企業(yè)的需求,開(kāi)發(fā)出多元化、高效、易用的文章實(shí)時(shí)采集解決方案。優(yōu)采云使用先進(jìn)的人工智能和機器學(xué)習技術(shù)來(lái)對海量信息進(jìn)行分類(lèi)、識別、存儲和分析,并根據用戶(hù)需要進(jìn)行相應的處理。此外,優(yōu)采云還將根據用戶(hù)需要對信息進(jìn)行初步處理、去噪、去重、去除廣告內容以及關(guān)鍵詞標注等工作。

此外,優(yōu)采云還將不斷引入先進(jìn)的SEO優(yōu)化工具來(lái)幫助用戶(hù)快速獲得權威性?xún)热莶⑻嵘齋EO優(yōu)化水平。例如:使用語(yǔ)義分析工具來(lái)解決內容相關(guān)性問(wèn)題;使用關(guān)鍵詞分析工具來(lái)幫助用戶(hù)快速找出相應的核心詞;使用圖片分割工具來(lái)有效地將圖片內容與文字內容相結合;使用圖片校正工具來(lái)保證圖片尺寸合規;使用SEO優(yōu)化工具來(lái)幫助用戶(hù)快速找出有效核心詞;使用SEO監測工具來(lái)監測SEO效果。
優(yōu)采云是一家專(zhuān)注于新聞信息處理的高科技IT服務(wù)商,地址位于中國上海浦東新區張揚路888號國航大廈1801-1802。如有任何問(wèn)題或者想要了解優(yōu)采云的服務(wù)內容,都可以通過(guò)www.bjpromise.cn 網(wǎng)站進(jìn)行咨詢(xún)。
優(yōu)采云軟件為用戶(hù)提供文章實(shí)時(shí)采集服務(wù)(圖)
采集交流 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 132 次瀏覽 ? 2023-01-12 21:48
優(yōu)采云軟件可以在線(xiàn)搜索、實(shí)時(shí)抓取各類(lèi)新聞、博客、微博和論壇中的最新內容,并把這些信息轉化為文字、圖片或視頻,方便用戶(hù)及時(shí)了解最新動(dòng)態(tài)。同時(shí),優(yōu)采云還支持多樣化的搜索引擎,如Google、Bing、Yahoo等,用戶(hù)可以根據關(guān)鍵詞快速找到所需內容。
此外,優(yōu)采云還為用戶(hù)提供SEO優(yōu)化功能,能夠有效地幫助用戶(hù)將實(shí)時(shí)抓取的內容進(jìn)行SEO優(yōu)化處理,使之在搜索引擎中顯得更加突出。通過(guò)SEO優(yōu)化后的內容,用戶(hù)可以得到更好的搜索引擎流量,從而獲得更多的瀏覽量和關(guān)注度。
另外,優(yōu)采云還具有數據分析功能,能夠根據用戶(hù)所需要的信息進(jìn)行數據分類(lèi),并對數據進(jìn)行分類(lèi)和分析處理。這樣一來(lái),用戶(hù)就可以方便快速地對新聞、博客、微博和論壇中相關(guān)信息進(jìn)行歸類(lèi)與分類(lèi)處理,并對數據形成思想和思考觀(guān)點(diǎn)。
總而言之,優(yōu)采云是一個(gè)強大的文章實(shí)時(shí)采集工具,能夠有效地幫助用戶(hù)實(shí)時(shí)抓取內容、SEO優(yōu)化內容和進(jìn)行數據分類(lèi)分析。如想要詳細了解優(yōu)采云的相關(guān)信息并想要使用該軟件來(lái)幫助你開(kāi)展相關(guān)工作,請訪(fǎng)問(wèn)官網(wǎng)www.bjpromise.cn 了解詳情。 查看全部
文章實(shí)時(shí)采集是一項重要的任務(wù),尤其是對于網(wǎng)絡(luò )傳播的媒體來(lái)說(shuō),更是日常工作必不可少的重要內容。優(yōu)采云是一款強大的文章實(shí)時(shí)采集軟件,能夠有效地為用戶(hù)提供文章實(shí)時(shí)采集服務(wù)。

優(yōu)采云軟件可以在線(xiàn)搜索、實(shí)時(shí)抓取各類(lèi)新聞、博客、微博和論壇中的最新內容,并把這些信息轉化為文字、圖片或視頻,方便用戶(hù)及時(shí)了解最新動(dòng)態(tài)。同時(shí),優(yōu)采云還支持多樣化的搜索引擎,如Google、Bing、Yahoo等,用戶(hù)可以根據關(guān)鍵詞快速找到所需內容。

此外,優(yōu)采云還為用戶(hù)提供SEO優(yōu)化功能,能夠有效地幫助用戶(hù)將實(shí)時(shí)抓取的內容進(jìn)行SEO優(yōu)化處理,使之在搜索引擎中顯得更加突出。通過(guò)SEO優(yōu)化后的內容,用戶(hù)可以得到更好的搜索引擎流量,從而獲得更多的瀏覽量和關(guān)注度。

另外,優(yōu)采云還具有數據分析功能,能夠根據用戶(hù)所需要的信息進(jìn)行數據分類(lèi),并對數據進(jìn)行分類(lèi)和分析處理。這樣一來(lái),用戶(hù)就可以方便快速地對新聞、博客、微博和論壇中相關(guān)信息進(jìn)行歸類(lèi)與分類(lèi)處理,并對數據形成思想和思考觀(guān)點(diǎn)。
總而言之,優(yōu)采云是一個(gè)強大的文章實(shí)時(shí)采集工具,能夠有效地幫助用戶(hù)實(shí)時(shí)抓取內容、SEO優(yōu)化內容和進(jìn)行數據分類(lèi)分析。如想要詳細了解優(yōu)采云的相關(guān)信息并想要使用該軟件來(lái)幫助你開(kāi)展相關(guān)工作,請訪(fǎng)問(wèn)官網(wǎng)www.bjpromise.cn 了解詳情。
優(yōu)采云SEO優(yōu)化,一鍵發(fā)布,數據分析(圖)
采集交流 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 87 次瀏覽 ? 2023-01-12 16:17
優(yōu)采云是一款多功能的文章實(shí)時(shí)采集軟件,可以讓用戶(hù)快速準確地實(shí)時(shí)收集各種信息。首先,優(yōu)采云可以幫助用戶(hù)快速地獲取最新的新聞、博客文章和其他信息,使用戶(hù)能夠更快地獲得最新的信息。其次,優(yōu)采云可以進(jìn)行SEO優(yōu)化,為用戶(hù)創(chuàng )建高質(zhì)量的內容,使其能夠更好地排名和被搜索引擎找到。此外,優(yōu)采云還可以幫助用戶(hù)篩選出高質(zhì)量的內容,并支持多個(gè)網(wǎng)站同時(shí)采集數據,使得整個(gè)數據的采集工作變得簡(jiǎn)單快速。
此外,優(yōu)采云還有一個(gè)獨特的特性就是“一鍵發(fā)布”功能。該功能可以幫助用戶(hù)將所有采集到的內容一鍵發(fā)布到各大平臺上(如微博、QQ空間、Facebook等),省去手動(dòng)發(fā)布內容的步驟。此外,優(yōu)采云還有一個(gè)強大的數據分析功能,用戶(hù)可以根據不同情況對已經(jīng)采集到的數據進(jìn)行分析和監測(如話(huà)題/欄目/作者/回復數/瀏覽人數/時(shí)效性等)。
總之,優(yōu)采云是一個(gè)功能強大、易用性強的文章實(shí)時(shí)采集軟件.其強大的功能不僅方便用戶(hù)快速、準確地獲取信息,還能幫助用戶(hù)進(jìn)行SEO優(yōu)化,一鍵發(fā)布,數據分析,帶來(lái)了前所未有的體驗.如想要使用優(yōu)采云,只要去它的官網(wǎng)www.bjpromise.cn就可以進(jìn)行注冊和使用. 查看全部
文章實(shí)時(shí)采集是近年來(lái)越來(lái)越流行的一種網(wǎng)絡(luò )采集方式,它可以將來(lái)自不同源的新聞、博客文章和其他信息匯總到一個(gè)地方,便于用戶(hù)的閱讀。優(yōu)采云是一款功能強大的文章實(shí)時(shí)采集軟件,可以幫助用戶(hù)快速、有效地獲取最新的新聞、博客文章和其他信息,并進(jìn)行SEO優(yōu)化,有效解決信息采集難題。

優(yōu)采云是一款多功能的文章實(shí)時(shí)采集軟件,可以讓用戶(hù)快速準確地實(shí)時(shí)收集各種信息。首先,優(yōu)采云可以幫助用戶(hù)快速地獲取最新的新聞、博客文章和其他信息,使用戶(hù)能夠更快地獲得最新的信息。其次,優(yōu)采云可以進(jìn)行SEO優(yōu)化,為用戶(hù)創(chuàng )建高質(zhì)量的內容,使其能夠更好地排名和被搜索引擎找到。此外,優(yōu)采云還可以幫助用戶(hù)篩選出高質(zhì)量的內容,并支持多個(gè)網(wǎng)站同時(shí)采集數據,使得整個(gè)數據的采集工作變得簡(jiǎn)單快速。

此外,優(yōu)采云還有一個(gè)獨特的特性就是“一鍵發(fā)布”功能。該功能可以幫助用戶(hù)將所有采集到的內容一鍵發(fā)布到各大平臺上(如微博、QQ空間、Facebook等),省去手動(dòng)發(fā)布內容的步驟。此外,優(yōu)采云還有一個(gè)強大的數據分析功能,用戶(hù)可以根據不同情況對已經(jīng)采集到的數據進(jìn)行分析和監測(如話(huà)題/欄目/作者/回復數/瀏覽人數/時(shí)效性等)。

總之,優(yōu)采云是一個(gè)功能強大、易用性強的文章實(shí)時(shí)采集軟件.其強大的功能不僅方便用戶(hù)快速、準確地獲取信息,還能幫助用戶(hù)進(jìn)行SEO優(yōu)化,一鍵發(fā)布,數據分析,帶來(lái)了前所未有的體驗.如想要使用優(yōu)采云,只要去它的官網(wǎng)www.bjpromise.cn就可以進(jìn)行注冊和使用.
優(yōu)采云是一款相當出色的文章實(shí)時(shí)采集軟件
采集交流 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 103 次瀏覽 ? 2023-01-12 15:15
優(yōu)采云是一款專(zhuān)業(yè)的文章實(shí)時(shí)采集軟件,它利用SEO優(yōu)化技術(shù)對內容進(jìn)行處理,使得采集到的內容更加有價(jià)值、有效。同時(shí),該軟件支持多種格式的內容采集,包括圖片、音頻、視頻、新聞等,只要用戶(hù)將關(guān)注的關(guān)鍵詞輸入到優(yōu)采云中,就能夠快速地將所需內容進(jìn)行采集。
此外,優(yōu)采云還有一個(gè)獨特的特性——“一鍵發(fā)布”功能。用戶(hù)在選中所需要的內容后,就可以使用“一鍵發(fā)布”功能快速將內容發(fā)布到對應平臺上去,如博客、微信、微博等。用戶(hù)只需要將所要發(fā)布平臺的信息輸入進(jìn)去就行了,不必耗費大量時(shí)間去手動(dòng)上傳圖片或文字。
此外,優(yōu)采云還有一個(gè)獨特的特性——“一鍵生成”功能。通過(guò)該功能,用戶(hù)可以快速地將所選中的內容生成html格式代碼,然后將代碼復制到對應平臺即可。
總之,優(yōu)采云是一款出色的文章實(shí)時(shí)采集軟件。該軟件擁有SEO優(yōu)化功能、多樣格式內容采集功能、一鍵發(fā)布功能和一鍵生成功能四大特性。如果你想快速地將新聞和信息采集到你的博客上去,不妨試試優(yōu)采云吧!它的官網(wǎng)是www.bjpromise.cn。 查看全部
文章實(shí)時(shí)采集是一項新興的網(wǎng)絡(luò )技術(shù),它可以幫助網(wǎng)站主或博客主快速采集關(guān)于自己感興趣的內容,以便及時(shí)地將新鮮內容發(fā)布到網(wǎng)站上。近年來(lái),隨著(zhù)互聯(lián)網(wǎng)技術(shù)的發(fā)展,文章實(shí)時(shí)采集技術(shù)也不斷取得進(jìn)步,各種類(lèi)型的采集軟件也相繼推出,其中優(yōu)采云是一款相當出色的文章實(shí)時(shí)采集軟件。

優(yōu)采云是一款專(zhuān)業(yè)的文章實(shí)時(shí)采集軟件,它利用SEO優(yōu)化技術(shù)對內容進(jìn)行處理,使得采集到的內容更加有價(jià)值、有效。同時(shí),該軟件支持多種格式的內容采集,包括圖片、音頻、視頻、新聞等,只要用戶(hù)將關(guān)注的關(guān)鍵詞輸入到優(yōu)采云中,就能夠快速地將所需內容進(jìn)行采集。

此外,優(yōu)采云還有一個(gè)獨特的特性——“一鍵發(fā)布”功能。用戶(hù)在選中所需要的內容后,就可以使用“一鍵發(fā)布”功能快速將內容發(fā)布到對應平臺上去,如博客、微信、微博等。用戶(hù)只需要將所要發(fā)布平臺的信息輸入進(jìn)去就行了,不必耗費大量時(shí)間去手動(dòng)上傳圖片或文字。

此外,優(yōu)采云還有一個(gè)獨特的特性——“一鍵生成”功能。通過(guò)該功能,用戶(hù)可以快速地將所選中的內容生成html格式代碼,然后將代碼復制到對應平臺即可。
總之,優(yōu)采云是一款出色的文章實(shí)時(shí)采集軟件。該軟件擁有SEO優(yōu)化功能、多樣格式內容采集功能、一鍵發(fā)布功能和一鍵生成功能四大特性。如果你想快速地將新聞和信息采集到你的博客上去,不妨試試優(yōu)采云吧!它的官網(wǎng)是www.bjpromise.cn。
優(yōu)采云采集器讓文章實(shí)時(shí)采集工具更方便(圖)
采集交流 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 123 次瀏覽 ? 2022-12-28 01:15
隨著(zhù)當今互聯(lián)網(wǎng)的發(fā)展,實(shí)時(shí)采集的需求越來(lái)越大,也有越來(lái)越多的產(chǎn)品出現在市場(chǎng)上,但是如何選擇合適的產(chǎn)品并不容易。這里建議大家可以考慮一下優(yōu)采云采集器,這是一款由北京優(yōu)勝采集技術(shù)有限公司開(kāi)發(fā)的新一代文章實(shí)時(shí)采集工具。
優(yōu)采云采集器特別注重用戶(hù)體驗,擁有強大的數據采集能力、數據分析功能、文章質(zhì)量評分機制以及個(gè)性化創(chuàng )作導航等多項功能,可以幫助用戶(hù)快速準確地將所需信息從海量文章中進(jìn)行篩選、整理和歸類(lèi)。
此外,優(yōu)采云采集器還擁有獨特而強大的“AI+語(yǔ)義標注”功能,針對不同話(huà)題可以快速準確地將相關(guān)內容進(jìn)行標注,讓信息歸類(lèi)變得十分便利。此外,還有針對性強、使用方便、準確性高的新聞實(shí)時(shí)推送列表,可以幫助用戶(hù)快速定位到所需內容。
優(yōu)采云采集器還支持多平臺使用,包括PC端、APP端和微信小程序端。不同平臺上都具有相同的功能:快速、便捷地將所需信息從海量文章中進(jìn)行歸類(lèi)整理。
使用優(yōu)采云采集器所得到的文章也是十分優(yōu)質(zhì)的。優(yōu)采云采集器不但具有強大的信息裁剪功能,而且還具備專(zhuān)業(yè)化評分機制:根據文章內容、時(shí)效性、版權歸屬保障以及去水印處理等四個(gè)方面對文章進(jìn)行評判。此外,還具有一套實(shí)時(shí)檢測保障新聞?wù)鎸?shí)性的版權保障體系。
總而言之,優(yōu)采云采集器是一個(gè)十分出色的文章實(shí)時(shí)采集工具:既方便易用、準確性高、耗時(shí)少、內容優(yōu)質(zhì);同時(shí)也可以幫助用戶(hù)快速整理新聞內容并檢測真實(shí)性。想要嘗試使用優(yōu)采云采集器的話(huà)就快去www.bjpromise.cn上去看看吧~ 查看全部
文章實(shí)時(shí)采集,是現在網(wǎng)絡(luò )語(yǔ)境下許多用戶(hù)最想要擁有的功能。此類(lèi)功能可以幫助用戶(hù)快速、高效地把相關(guān)信息采集歸類(lèi),從而提升用戶(hù)的工作效率,也會(huì )為用戶(hù)的工作帶來(lái)很大的便利。
隨著(zhù)當今互聯(lián)網(wǎng)的發(fā)展,實(shí)時(shí)采集的需求越來(lái)越大,也有越來(lái)越多的產(chǎn)品出現在市場(chǎng)上,但是如何選擇合適的產(chǎn)品并不容易。這里建議大家可以考慮一下優(yōu)采云采集器,這是一款由北京優(yōu)勝采集技術(shù)有限公司開(kāi)發(fā)的新一代文章實(shí)時(shí)采集工具。

優(yōu)采云采集器特別注重用戶(hù)體驗,擁有強大的數據采集能力、數據分析功能、文章質(zhì)量評分機制以及個(gè)性化創(chuàng )作導航等多項功能,可以幫助用戶(hù)快速準確地將所需信息從海量文章中進(jìn)行篩選、整理和歸類(lèi)。
此外,優(yōu)采云采集器還擁有獨特而強大的“AI+語(yǔ)義標注”功能,針對不同話(huà)題可以快速準確地將相關(guān)內容進(jìn)行標注,讓信息歸類(lèi)變得十分便利。此外,還有針對性強、使用方便、準確性高的新聞實(shí)時(shí)推送列表,可以幫助用戶(hù)快速定位到所需內容。

優(yōu)采云采集器還支持多平臺使用,包括PC端、APP端和微信小程序端。不同平臺上都具有相同的功能:快速、便捷地將所需信息從海量文章中進(jìn)行歸類(lèi)整理。
使用優(yōu)采云采集器所得到的文章也是十分優(yōu)質(zhì)的。優(yōu)采云采集器不但具有強大的信息裁剪功能,而且還具備專(zhuān)業(yè)化評分機制:根據文章內容、時(shí)效性、版權歸屬保障以及去水印處理等四個(gè)方面對文章進(jìn)行評判。此外,還具有一套實(shí)時(shí)檢測保障新聞?wù)鎸?shí)性的版權保障體系。
總而言之,優(yōu)采云采集器是一個(gè)十分出色的文章實(shí)時(shí)采集工具:既方便易用、準確性高、耗時(shí)少、內容優(yōu)質(zhì);同時(shí)也可以幫助用戶(hù)快速整理新聞內容并檢測真實(shí)性。想要嘗試使用優(yōu)采云采集器的話(huà)就快去www.bjpromise.cn上去看看吧~
文章實(shí)時(shí)采集:優(yōu)采云采集器讓你擁有自動(dòng)化爬取網(wǎng)頁(yè)的能力
采集交流 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 87 次瀏覽 ? 2022-12-27 22:30
近幾年,由于互聯(lián)網(wǎng)的發(fā)展,在線(xiàn)內容的更新速度越來(lái)越快,從而對我們的日常工作帶來(lái)了一定的挑戰。抓取、整理、歸類(lèi)和分析在線(xiàn)信息變得愈發(fā)重要,而文章實(shí)時(shí)采集正是我們實(shí)現這一目標的有效手段之一。
眾所周知,文章實(shí)時(shí)采集是將大量網(wǎng)頁(yè)上的內容通過(guò)特定的方式,以較快的速度、較好的效果從原始網(wǎng)站抓取下來(lái),并存儲到本地數據庫中。這就為我們帶來(lái)了便利,因為不需要人工去整理大量信息,也不會(huì )浪費太多時(shí)間去尋找想要的內容。
如今,優(yōu)采云采集器引入了先進(jìn)的文章實(shí)時(shí)采集服務(wù),令人眼前一亮。該服務(wù)能夠讓用戶(hù)在不需要復雜代碼、開(kāi)發(fā)者協(xié)助或者是特殊工具情況下,就能夠方便地從各大熱門(mén)網(wǎng)站上獲取到最新、最相關(guān)的信息。
優(yōu)采云采集器使用方便易行,用戶(hù)只需要根據自己的需要對優(yōu)采云采集器進(jìn)行一番配置即可。優(yōu)采云采集器還能夠根據用戶(hù)定義的關(guān)鍵字去匹配想要獲取的內容,并支持多頁(yè)面歸總功能。而且該服務(wù)也能夠保證數據準確性和真實(shí)性,從而避免出現信息不準確、甚至是被劫持之后顯示有誤導性?xún)热莸那闆r。
隨著(zhù)人工智能、大數據和物聯(lián)網(wǎng)的不斷發(fā)展壯大,對信息快速準確地進(jìn)行分析、整理和歸總變得愈發(fā)重要。 查看全部
文章實(shí)時(shí)采集:優(yōu)采云采集器讓你擁有自動(dòng)化爬取網(wǎng)頁(yè)的能力
近幾年,由于互聯(lián)網(wǎng)的發(fā)展,在線(xiàn)內容的更新速度越來(lái)越快,從而對我們的日常工作帶來(lái)了一定的挑戰。抓取、整理、歸類(lèi)和分析在線(xiàn)信息變得愈發(fā)重要,而文章實(shí)時(shí)采集正是我們實(shí)現這一目標的有效手段之一。

眾所周知,文章實(shí)時(shí)采集是將大量網(wǎng)頁(yè)上的內容通過(guò)特定的方式,以較快的速度、較好的效果從原始網(wǎng)站抓取下來(lái),并存儲到本地數據庫中。這就為我們帶來(lái)了便利,因為不需要人工去整理大量信息,也不會(huì )浪費太多時(shí)間去尋找想要的內容。
如今,優(yōu)采云采集器引入了先進(jìn)的文章實(shí)時(shí)采集服務(wù),令人眼前一亮。該服務(wù)能夠讓用戶(hù)在不需要復雜代碼、開(kāi)發(fā)者協(xié)助或者是特殊工具情況下,就能夠方便地從各大熱門(mén)網(wǎng)站上獲取到最新、最相關(guān)的信息。

優(yōu)采云采集器使用方便易行,用戶(hù)只需要根據自己的需要對優(yōu)采云采集器進(jìn)行一番配置即可。優(yōu)采云采集器還能夠根據用戶(hù)定義的關(guān)鍵字去匹配想要獲取的內容,并支持多頁(yè)面歸總功能。而且該服務(wù)也能夠保證數據準確性和真實(shí)性,從而避免出現信息不準確、甚至是被劫持之后顯示有誤導性?xún)热莸那闆r。
隨著(zhù)人工智能、大數據和物聯(lián)網(wǎng)的不斷發(fā)展壯大,對信息快速準確地進(jìn)行分析、整理和歸總變得愈發(fā)重要。
優(yōu)采云采集器就是你所需要的工具
采集交流 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 115 次瀏覽 ? 2022-12-27 17:26
優(yōu)采云采集器,是一款功能強大的實(shí)時(shí)采集工具,可以為用戶(hù)提供最新、最準確的信息。在優(yōu)采云采集器中,用戶(hù)可以輕松地實(shí)時(shí)采集各種Web信息,從而獲得最新、最準確的內容。
優(yōu)采云采集器還具備強大的數據處理能力,可以根據用戶(hù)的需求快速將原始數據進(jìn)行分析、清理、壓縮、加工等處理。此外,還可以根據不同的需求提供不同格式的數據導出:HTML、XML、JSON等。
此外,優(yōu)采云采集器還具備多個(gè)賬號同時(shí)使用功能,讓用戶(hù)可以快速地進(jìn)行信息分享和協(xié)作。此外,還有一鍵式監測功能,可以讓用戶(hù)快速監測到最新發(fā)布的文章內容,從而節省大量時(shí)間。
總之,優(yōu)采云采集器是一個(gè)非常好用的實(shí)時(shí)信息采集工具。它不僅可以快速準確地定位所需要的內容,而且還具備強大的數據處理能力和多個(gè)賬號合作功能;此外還具有監測功能,能節省大量時(shí)間。如果你想要快速準確地獲取最新信息并整理成你想要的格式,那么優(yōu)采云采集器就是你所需要的工具(www.ucaiyun. 查看全部
文章實(shí)時(shí)采集,是現今網(wǎng)上信息采集的一種重要方式。隨著(zhù)新聞、博客、論壇、期刊等各種文章的不斷發(fā)布,如何快速準確地定位到想要的內容,已成為很多人面臨的一個(gè)共同問(wèn)題。優(yōu)采云采集器(www.bjpromise.cn)正是為解決這個(gè)問(wèn)題而誕生的。
優(yōu)采云采集器,是一款功能強大的實(shí)時(shí)采集工具,可以為用戶(hù)提供最新、最準確的信息。在優(yōu)采云采集器中,用戶(hù)可以輕松地實(shí)時(shí)采集各種Web信息,從而獲得最新、最準確的內容。

優(yōu)采云采集器還具備強大的數據處理能力,可以根據用戶(hù)的需求快速將原始數據進(jìn)行分析、清理、壓縮、加工等處理。此外,還可以根據不同的需求提供不同格式的數據導出:HTML、XML、JSON等。

此外,優(yōu)采云采集器還具備多個(gè)賬號同時(shí)使用功能,讓用戶(hù)可以快速地進(jìn)行信息分享和協(xié)作。此外,還有一鍵式監測功能,可以讓用戶(hù)快速監測到最新發(fā)布的文章內容,從而節省大量時(shí)間。
總之,優(yōu)采云采集器是一個(gè)非常好用的實(shí)時(shí)信息采集工具。它不僅可以快速準確地定位所需要的內容,而且還具備強大的數據處理能力和多個(gè)賬號合作功能;此外還具有監測功能,能節省大量時(shí)間。如果你想要快速準確地獲取最新信息并整理成你想要的格式,那么優(yōu)采云采集器就是你所需要的工具(www.ucaiyun.
解決方案:文章實(shí)時(shí)采集:優(yōu)采云采集器幫你輕松解決
采集交流 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 105 次瀏覽 ? 2022-12-27 16:22
文章實(shí)時(shí)采集:優(yōu)采云采集器幫你輕松解決
新聞信息、產(chǎn)品介紹、技術(shù)文檔等,都是日常生活或工作中常見(jiàn)的內容。隨著(zhù)網(wǎng)絡(luò )的發(fā)展,很多信息可以在網(wǎng)上獲取,但很多人發(fā)現,如果要從大量的文章中獲取有用的信息,這是一項非常耗時(shí)且不能保證準確性的工作。
針對這種情況,優(yōu)采云采集器應運而生。優(yōu)采云采集器是一款強大的數據采集工具,可以幫助用戶(hù)快速準確地從海量文章中獲取有用的信息,減少了手動(dòng)搜索的工作量。
優(yōu)采云采集器具有多功能。它不僅可以快速準確地從海量文章中獲取有用的信息,而且可以實(shí)時(shí)監測新聞、公告、博客、平臺等多個(gè)板塊的數據變化情況,并能夠根據用戶(hù)需要實(shí)時(shí)將數據導出。此外,優(yōu)采云采集器還能為用戶(hù)節省大量學(xué)習成本,使得不同行業(yè)的用戶(hù)都能輕松使用。
此外,優(yōu)采云采集器還為用戶(hù)提供了先進(jìn)的數據分析功能。優(yōu)采云采集器可以幫助用戶(hù)快速分析數據特征并將分析結果形象化呈現出來(lái)。此外,優(yōu)采云采集器還能根據特征列表快速找到新聞相關(guān)評論并分析評論情感,為市場(chǎng)行為判斷、輿情判斷、競爭數據追蹤、電子商務(wù)銷(xiāo)售判斷等方面的決策奠定基礎。
總而言之,優(yōu)采云采集器是一站式數字化整合解決方案供應商,能幫助用戶(hù)快速準確地從海量文章中獲取有用信息、實(shí)時(shí)監測數據變化情況、先進(jìn)的數據分析功能并將分析結果形象化呈現出來(lái)。如果你還在為通過(guò)海量數據快速獲取有用信息而煩惱,就到www.bjpromise.cn上注冊使用優(yōu)采云采集器,幫你快速有效解決這一問(wèn)題吧! 查看全部
解決方案:文章實(shí)時(shí)采集:優(yōu)采云采集器幫你輕松解決
文章實(shí)時(shí)采集:優(yōu)采云采集器幫你輕松解決

新聞信息、產(chǎn)品介紹、技術(shù)文檔等,都是日常生活或工作中常見(jiàn)的內容。隨著(zhù)網(wǎng)絡(luò )的發(fā)展,很多信息可以在網(wǎng)上獲取,但很多人發(fā)現,如果要從大量的文章中獲取有用的信息,這是一項非常耗時(shí)且不能保證準確性的工作。
針對這種情況,優(yōu)采云采集器應運而生。優(yōu)采云采集器是一款強大的數據采集工具,可以幫助用戶(hù)快速準確地從海量文章中獲取有用的信息,減少了手動(dòng)搜索的工作量。

優(yōu)采云采集器具有多功能。它不僅可以快速準確地從海量文章中獲取有用的信息,而且可以實(shí)時(shí)監測新聞、公告、博客、平臺等多個(gè)板塊的數據變化情況,并能夠根據用戶(hù)需要實(shí)時(shí)將數據導出。此外,優(yōu)采云采集器還能為用戶(hù)節省大量學(xué)習成本,使得不同行業(yè)的用戶(hù)都能輕松使用。
此外,優(yōu)采云采集器還為用戶(hù)提供了先進(jìn)的數據分析功能。優(yōu)采云采集器可以幫助用戶(hù)快速分析數據特征并將分析結果形象化呈現出來(lái)。此外,優(yōu)采云采集器還能根據特征列表快速找到新聞相關(guān)評論并分析評論情感,為市場(chǎng)行為判斷、輿情判斷、競爭數據追蹤、電子商務(wù)銷(xiāo)售判斷等方面的決策奠定基礎。
總而言之,優(yōu)采云采集器是一站式數字化整合解決方案供應商,能幫助用戶(hù)快速準確地從海量文章中獲取有用信息、實(shí)時(shí)監測數據變化情況、先進(jìn)的數據分析功能并將分析結果形象化呈現出來(lái)。如果你還在為通過(guò)海量數據快速獲取有用信息而煩惱,就到www.bjpromise.cn上注冊使用優(yōu)采云采集器,幫你快速有效解決這一問(wèn)題吧!
秘密:優(yōu)采云采集器讓內容工作者松了一口氣!
采集交流 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 338 次瀏覽 ? 2022-12-27 01:15
文章實(shí)時(shí)采集一直是內容工作者的頭疼問(wèn)題,每天從網(wǎng)上搜集、整理有價(jià)值的內容,既耗費大量時(shí)間又枯燥乏味,這是一個(gè)永無(wú)止境的過(guò)程。但隨著(zhù)互聯(lián)網(wǎng)技術(shù)的不斷發(fā)展,如今出現了文章實(shí)時(shí)采集這一利器,讓眾多內容工作者松了一口氣。
文章實(shí)時(shí)采集是指能夠根據用戶(hù)設定的關(guān)鍵詞或分類(lèi)獲取最新的信息、新聞及帖子,并將其帶回用戶(hù)。在實(shí)時(shí)采集中,用戶(hù)可以選擇各種數據來(lái)源、制定數據采集頻率、保存原始內容、展示數據的方式,以及其他各種功能。一般使用語(yǔ)言為php+mysql+ajax+js+css,也有使用python開(kāi)發(fā)的。
優(yōu)采云采集器就是其中之一。優(yōu)采云采集器是國內專(zhuān)業(yè)新聞采集工具,可以快速實(shí)時(shí)抓取各大媒體平臺上的新聞、博客、微博、微信等海量數據;同時(shí)支持遠程API對外服務(wù);獨特的“根據URL準確匹配”功能可以解決URL地址多樣化帶來(lái)的正則表達式匹配困難;不僅能快速準確采集海量數據,而且能夠保證數據真實(shí)性。
此外,優(yōu)采云采集器還具有擴展性強、易部署部分特性。優(yōu) 查看全部
秘密:優(yōu)采云采集器讓內容工作者松了一口氣!
文章實(shí)時(shí)采集一直是內容工作者的頭疼問(wèn)題,每天從網(wǎng)上搜集、整理有價(jià)值的內容,既耗費大量時(shí)間又枯燥乏味,這是一個(gè)永無(wú)止境的過(guò)程。但隨著(zhù)互聯(lián)網(wǎng)技術(shù)的不斷發(fā)展,如今出現了文章實(shí)時(shí)采集這一利器,讓眾多內容工作者松了一口氣。

文章實(shí)時(shí)采集是指能夠根據用戶(hù)設定的關(guān)鍵詞或分類(lèi)獲取最新的信息、新聞及帖子,并將其帶回用戶(hù)。在實(shí)時(shí)采集中,用戶(hù)可以選擇各種數據來(lái)源、制定數據采集頻率、保存原始內容、展示數據的方式,以及其他各種功能。一般使用語(yǔ)言為php+mysql+ajax+js+css,也有使用python開(kāi)發(fā)的。

優(yōu)采云采集器就是其中之一。優(yōu)采云采集器是國內專(zhuān)業(yè)新聞采集工具,可以快速實(shí)時(shí)抓取各大媒體平臺上的新聞、博客、微博、微信等海量數據;同時(shí)支持遠程API對外服務(wù);獨特的“根據URL準確匹配”功能可以解決URL地址多樣化帶來(lái)的正則表達式匹配困難;不僅能快速準確采集海量數據,而且能夠保證數據真實(shí)性。
此外,優(yōu)采云采集器還具有擴展性強、易部署部分特性。優(yōu)
解決方案:優(yōu)采云采集器:幫助用戶(hù)快速有效地對數千條
采集交流 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 149 次瀏覽 ? 2022-12-26 17:29
文章實(shí)時(shí)采集是一種便捷的內容采集方式,它讓人們可以輕松地采集網(wǎng)上的文章、圖片、視頻等多媒體信息。隨著(zhù)互聯(lián)網(wǎng)時(shí)代的發(fā)展,文章實(shí)時(shí)采集技術(shù)也不斷改進(jìn),為用戶(hù)提供了更加便捷的采集服務(wù)。
優(yōu)采云采集器(YouCai Collector)是一款專(zhuān)業(yè)的文章實(shí)時(shí)采集工具,它可以幫助用戶(hù)快速有效地實(shí)現文章實(shí)時(shí)采集。該軟件擁有強大的爬蟲(chóng)能力,能夠快速精準地搜索并抓取用戶(hù)所需要的內容,同時(shí)具備強大的過(guò)濾功能,可以根據用戶(hù)的需要進(jìn)行內容過(guò)濾,從而減少用戶(hù)手動(dòng)篩選內容的工作量。
此外,YouCai Collector還支持各種多媒體信息的采集和下載,包括圖片、新聞、視頻、博客、微博等。它可以幫助用戶(hù)快速有效地對數千條不同內容進(jìn)行歸類(lèi)和分類(lèi);而且可以將所有內容直接導出到Excel表格中。此外,YouCai Collector還具備很多其他獨特的功能:
一、語(yǔ)義分析功能 – YouCai Collector可以幫助用戶(hù)分析出不同文章之間的語(yǔ)義差異;
二、AI 智能判斷 – YouCai Collector可以根據用戶(hù)所需要的內容對信息進(jìn)行 AI 智能判斷;
三、情感分析 – 可以對不同內容進(jìn)行情感分析;
四、數字化 – 可以將原始信息數字化并存儲在數據庫中。
YouCai Collector 的優(yōu)勢在于可以大大減少人員測試所需要花費的時(shí)間和精力。此外,YouCai Collector 還具有易用性強、界面友好、使用方便、適應性強等優(yōu)勢。YouCai Collector 能夠大大減少人工測試所耗費的時(shí)間和精力。
總之,YouCai Collector 是一款強大而易用的文章實(shí)時(shí)采集工具。該工具具有強大的爬蟲(chóng)能力和AI 智能判斷能力 ,能夠幫助用戶(hù)快速有效地實(shí)現信息采集與運用。如今,YouCai Collector 已成為市場(chǎng)上最流行的文章實(shí)時(shí)采集工具之一。 查看全部
解決方案:優(yōu)采云采集器:幫助用戶(hù)快速有效地對數千條
文章實(shí)時(shí)采集是一種便捷的內容采集方式,它讓人們可以輕松地采集網(wǎng)上的文章、圖片、視頻等多媒體信息。隨著(zhù)互聯(lián)網(wǎng)時(shí)代的發(fā)展,文章實(shí)時(shí)采集技術(shù)也不斷改進(jìn),為用戶(hù)提供了更加便捷的采集服務(wù)。
優(yōu)采云采集器(YouCai Collector)是一款專(zhuān)業(yè)的文章實(shí)時(shí)采集工具,它可以幫助用戶(hù)快速有效地實(shí)現文章實(shí)時(shí)采集。該軟件擁有強大的爬蟲(chóng)能力,能夠快速精準地搜索并抓取用戶(hù)所需要的內容,同時(shí)具備強大的過(guò)濾功能,可以根據用戶(hù)的需要進(jìn)行內容過(guò)濾,從而減少用戶(hù)手動(dòng)篩選內容的工作量。

此外,YouCai Collector還支持各種多媒體信息的采集和下載,包括圖片、新聞、視頻、博客、微博等。它可以幫助用戶(hù)快速有效地對數千條不同內容進(jìn)行歸類(lèi)和分類(lèi);而且可以將所有內容直接導出到Excel表格中。此外,YouCai Collector還具備很多其他獨特的功能:
一、語(yǔ)義分析功能 – YouCai Collector可以幫助用戶(hù)分析出不同文章之間的語(yǔ)義差異;
二、AI 智能判斷 – YouCai Collector可以根據用戶(hù)所需要的內容對信息進(jìn)行 AI 智能判斷;

三、情感分析 – 可以對不同內容進(jìn)行情感分析;
四、數字化 – 可以將原始信息數字化并存儲在數據庫中。
YouCai Collector 的優(yōu)勢在于可以大大減少人員測試所需要花費的時(shí)間和精力。此外,YouCai Collector 還具有易用性強、界面友好、使用方便、適應性強等優(yōu)勢。YouCai Collector 能夠大大減少人工測試所耗費的時(shí)間和精力。
總之,YouCai Collector 是一款強大而易用的文章實(shí)時(shí)采集工具。該工具具有強大的爬蟲(chóng)能力和AI 智能判斷能力 ,能夠幫助用戶(hù)快速有效地實(shí)現信息采集與運用。如今,YouCai Collector 已成為市場(chǎng)上最流行的文章實(shí)時(shí)采集工具之一。
解決方案:【實(shí)時(shí)數倉】DWD層需求分析及實(shí)現思路、idea環(huán)境搭建、實(shí)現DWD層處理用戶(hù)行
采集交流 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 119 次瀏覽 ? 2022-12-20 05:12
文章目錄
一、DWD層需求分析及實(shí)現思路 1、分層需求分析
構建實(shí)時(shí)數倉的目的主要是增加數據計算的復用性。 每增加一個(gè)新的統計要求,不是從原來(lái)的數據計算,而是從半成品繼續加工。
這里從kafka的ods層讀取用戶(hù)行為日志和業(yè)務(wù)數據,簡(jiǎn)單處理后,作為dwd層回寫(xiě)給kafka。
2 各層功能分層數據描述 生成計算工具 存儲介質(zhì)
消耗臭氧層物質(zhì)
原創(chuàng )數據、日志和業(yè)務(wù)數據
日志服務(wù)器,麥克斯韋
卡夫卡
DWD
流式處理是以數據對象為單位進(jìn)行的,例如訂單、頁(yè)面訪(fǎng)問(wèn)量等。
弗林克
卡夫卡
DWM
對于一些數據對象的進(jìn)一步處理,比如獨立訪(fǎng)問(wèn),跳出行為。 還是詳細的數據。
弗林克
卡夫卡
暗淡
維度數據
弗林克
數據庫
DWS
將多個(gè)事實(shí)數據按照一個(gè)維度topic輕聚合,形成一個(gè)topic wide table。
弗林克
點(diǎn)擊之家
存托憑證
根據可視化的需要,對Clickhouse中的數據進(jìn)行過(guò)濾聚合。
Clickhouse SQL
可視化
3 DWD層功能詳解(一)用戶(hù)行為日志數據
根據不同類(lèi)別的日志進(jìn)行拆分。
前端埋點(diǎn)的所有數據都放在Kafka中的ods_base_log主題中,比如啟動(dòng)日志、頁(yè)面訪(fǎng)問(wèn)日志、曝光日志等,雖然日志都是一樣的,但是分為不同的類(lèi)型。 以后做數據統計的時(shí)候,不方便從這個(gè)題目中獲取所有的數據。 因此,需要從ods_base_log主題中提取數據,根據日志類(lèi)型將不同類(lèi)型的數據放入不同的主題中,并進(jìn)行分流操作,比如將啟動(dòng)日志放入啟動(dòng)主題中,將曝光登錄曝光主題。 日志被放入日志主題中。
(2) 業(yè)務(wù)數據
根據業(yè)務(wù)數據類(lèi)型(維度或事實(shí))進(jìn)行拆分。
MySQL存儲的業(yè)務(wù)數據中有很多表。 這些表分為兩種,一種是事實(shí)表,一種是維表。 采集數據時(shí),只要業(yè)務(wù)數據發(fā)生變化,就會(huì )通過(guò)maxwell采集到Kafka的ods_base_db_m主題中,不區分事實(shí)和維度。 如果是factual data,想放在kafka不同的單獨topic中,比如order topic,order detail topic,payment topic等。對于維度數據,不適合放在kafka中存儲。 Kafka不適合長(cháng)期存儲,默認存儲7天。 海量數據的分析計算也不適合存儲在MySQL中,因為在分析計算的過(guò)程中需要不斷的進(jìn)行查詢(xún)操作,給業(yè)務(wù)數據庫帶來(lái)了很大的壓力,而MySQL對于大量數據的查詢(xún)性能較差。
使用維度數據時(shí),需要根據維度id查詢(xún)具體數據。 KV型數據庫更適合存儲維度數據,根據K獲取V效率更高。 KV數據庫有Redis和Hbase,Redis長(cháng)期存儲壓力比較大。 最終選擇Hbase存儲維度數據。
4 DWD層數據準備實(shí)現思路2環(huán)境搭建1創(chuàng )建maven項目
創(chuàng )建一個(gè)maven項目,gmall2022-realtime。
2 修改配置文件 (1) 添加依賴(lài)
1.8
${java.version}
${java.version}
1.12.0
2.12
3.1.3
org.apache.flink
flink-java
${flink.version}
org.apache.flink
flink-streaming-java_${scala.version}
${flink.version}
org.apache.flink
flink-connector-kafka_${scala.version}
${flink.version}
org.apache.flink
flink-clients_${scala.version}
${flink.version}
org.apache.flink
flink-cep_${scala.version}
${flink.version}
org.apache.flink
flink-json
${flink.version}
com.alibaba
fastjson
1.2.68
<p>
org.apache.hadoop
hadoop-client
${hadoop.version}
org.slf4j
slf4j-api
1.7.25
org.slf4j
slf4j-log4j12
1.7.25
org.apache.logging.log4j
log4j-to-slf4j
2.14.0
org.apache.maven.plugins
maven-assembly-plugin
3.0.0
jar-with-dependencies
make-assembly
package
single
</p>
(2) 添加配置文件
在resources目錄下創(chuàng )建log4j.properties配置文件
log4j.rootLogger=error,stdout
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.target=System.out
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d %p [%c] - %m%n
3 創(chuàng )建如下包結構
目錄角色
應用程序
生成各層數據的Flink任務(wù)
豆子
數據對象
常見(jiàn)的
公共常量
效用
工具
3 準備用戶(hù)行為日志——DWD層
之前采集的日志數據已經(jīng)保存在Kafka中。 作為日志數據的ODS層,Kafka從ODS層讀取的日志數據分為三類(lèi),頁(yè)面日志、啟動(dòng)日志、暴露日志。 這三類(lèi)數據雖然都是用戶(hù)行為數據,但是它們的數據結構完全不同,所以需要拆分處理。 將拆分后的日志寫(xiě)回Kafka的不同主題作為日志DWD層。
頁(yè)面日志輸出到主流,啟動(dòng)日志輸出到啟動(dòng)端輸出流,曝光日志輸出到曝光端輸出流。
1個(gè)主要任務(wù)
整體流程如下:
2 分區、分組和分流
三者的關(guān)系和區別如下:
3 代碼實(shí)現(1)接收Kafka數據,轉換為封裝和操作Kafka的工具類(lèi),并提供獲取kafka消費者的方法(閱讀)
/**
* 操作kafka工具類(lèi)
*/
public class MyKafkaUtil {
private static final String KAFKA_SERVER = "hadoop101:9092,hadoop102:9092,hadoop103:9092";
// 獲取kafka的消費者
public static FlinkKafkaConsumer getKafkaSource(String topic,String groupId){
Properties props = new Properties();
props.setProperty(ConsumerConfig.BOOTSTRAP_SERVERS_CONFIG,KAFKA_SERVER);
// 定義消費者組
props.setProperty(ConsumerConfig.GROUP_ID_CONFIG,groupId);
<p>
return new FlinkKafkaConsumer(topic,new SimpleStringSchema(),props);
}
}
</p>
b Flink調用工具類(lèi)主程序讀取數據
/**
* 對日志數據進(jìn)行分流操作
* 啟動(dòng)、曝光、頁(yè)面
* 啟動(dòng)日志放到啟動(dòng)側輸出流中
* 曝光日志放到曝光側輸出流中
* 頁(yè)面日志放到主流中
* 將不同流的數據寫(xiě)回到kafka的dwd主題中
*/
public class BaseLogApp {
public static void main(String[] args) throws Exception{
// TODO 1 基本環(huán)境準備
// 流處理環(huán)境
StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment();
// 設置并行度
env.setParallelism(4);
// TODO 2 檢查點(diǎn)相關(guān)設置
// 開(kāi)啟檢查點(diǎn)
// 每5S中開(kāi)啟一次檢查點(diǎn),檢查點(diǎn)模式為EXACTLY_ONCE
env.enableCheckpointing(5000L, CheckpointingMode.EXACTLY_ONCE);
// 設置檢查點(diǎn)超時(shí)時(shí)間
env.getCheckpointConfig().setCheckpointTimeout(60000L);
// 設置重啟策略
// 重啟三次,每次間隔3s鐘
env.setRestartStrategy(RestartStrategies.fixedDelayRestart(3,3000L));
// 設置job取消后,檢查點(diǎn)是否保留
env.getCheckpointConfig().enableExternalizedCheckpoints(CheckpointConfig.ExternalizedCheckpointCleanup.RETAIN_ON_CANCELLATION);
// 設置狀態(tài)后端 -- 基于內存 or 文件系統 or RocksDB
// 內存:狀態(tài)存在TaskManager內存中,檢查點(diǎn)存在JobManager內存中
// 文件系統:狀態(tài)存在TaskManager內存中,檢查點(diǎn)存在指定的文件系統路徑中
// RocksDB:看做和Redis類(lèi)似的數據庫,狀態(tài)存在TaskManager內存中,檢查點(diǎn)存在JobManager內存和本地磁盤(pán)上
// hadoop中nm的地址
env.setStateBackend(new FsStateBackend("hdfs://hadoop101:8020/ck/gmall"));
// 指定操作HDFS的用戶(hù)
System.setProperty("HADOOP_USER_NAME","hzy");
// TODO 3 從kafka讀取數據
// 聲明消費的主題和消費者組
String topic = "ods_base_log";
String groupId = "base_log_app_group";
// 獲取kafka消費者
FlinkKafkaConsumer kafkaSource = MyKafkaUtil.getKafkaSource(topic, groupId);
// 讀取數據,封裝為流
DataStreamSource kafkaDS = env.addSource(kafkaSource);
// TODO 4 對讀取的數據進(jìn)行結構的轉換 jsonStr -> jsonObj
// // 匿名內部類(lèi)實(shí)現
// SingleOutputStreamOperator jsonObjDS = kafkaDS.map(
// new MapFunction() {
// @Override
// public JSONObject map(String jsonStr) throws Exception {
// return JSON.parseObject(jsonStr);
// }
// }
// );
// // lambda表達式實(shí)現
// kafkaDS.map(
// jsonStr -> JSON.parse(jsonStr)
// );
// 方法的默認調用,注意導入的是alibaba JSON包
SingleOutputStreamOperator jsonObjDS = kafkaDS.map(JSON::parseObject);
jsonObjDS.print(">>>");
// TODO 5 修復新老訪(fǎng)客狀態(tài)
// TODO 6 按照日志類(lèi)型對日志進(jìn)行分流
// TODO 7 將不同流的數據寫(xiě)到kafka的dwd不同主題中
env.execute();
}
}
測試
# 啟動(dòng)zookeeper
# 啟動(dòng)kafka
# 啟動(dòng)采集服務(wù)
logger.sh start
# 啟動(dòng)nm以將檢查點(diǎn)保存到hdfs上
start-dfs.sh
# 等待安全模式關(guān)閉,啟動(dòng)主程序,如果出現權限問(wèn)題,可以將權限放開(kāi)
hdfs dfs -chmod -R 777 /
# 或者增加以下代碼到主程序中
System.setProperty("HADOOP_USER_NAME","hzy");
# 程序運行起來(lái)后,啟動(dòng)模擬生成日志數據jar包,在主程序中可以接收到數據
解決方案:抖音品質(zhì)建設 - iOS啟動(dòng)優(yōu)化《實(shí)戰篇》
前言
啟動(dòng)是App給用戶(hù)的第一印象。 啟動(dòng)越慢,用戶(hù)流失的概率就越高。 良好的啟動(dòng)速度是用戶(hù)體驗不可或缺的一部分。 啟動(dòng)優(yōu)化涉及的知識點(diǎn)非常多,知識點(diǎn)范圍很廣。 文章難以面面俱到,分為原理和實(shí)戰兩部分。 本文為實(shí)戰文章。
原理:抖音品質(zhì)建設——iOS啟動(dòng)優(yōu)化《原理》
如何做啟動(dòng)優(yōu)化?
在文章正式內容開(kāi)始之前,大家可以想一想,如果自己來(lái)做啟動(dòng)優(yōu)化,會(huì )怎么進(jìn)行呢?
這其實(shí)是一個(gè)比較大的問(wèn)題。 遇到類(lèi)似情況,我們可以把大問(wèn)題分解成幾個(gè)小問(wèn)題:
對應本文的三個(gè)模塊:監控、工具和最佳實(shí)踐。
監控啟動(dòng)埋點(diǎn)
既然要監控,那就需要在代碼中能夠獲取到啟動(dòng)時(shí)間。 每個(gè)人都采用相同的起點(diǎn)作為起點(diǎn):創(chuàng )建進(jìn)程的時(shí)間。
起始點(diǎn)對應于用戶(hù)感知到的Launch Image消失的第一幀。 抖音采用的方案如下:
蘋(píng)果官方的統計方式是第一種CA::Transaction::commit,但是對應的實(shí)現是在系統框架內,抖音的方式非常接近這一點(diǎn)。
分階段
排查線(xiàn)上問(wèn)題,只有一個(gè)耗時(shí)的埋點(diǎn)入手顯然是不夠的。 可與單點(diǎn)埋點(diǎn)分階段組合使用。 以下是抖音目前的監控方案:
+load 和 initializer 的調用順序與鏈接順序有關(guān)。 鏈接順序默認是按照CocoaPod Pod名稱(chēng)升序排列的,所以選擇AAA開(kāi)頭的名稱(chēng)可以讓某個(gè)+load和initializer先執行。
無(wú)入侵監控
公司的APM團隊提供了一個(gè)非侵入式的啟動(dòng)監控方案,將啟動(dòng)過(guò)程拆分為幾個(gè)與業(yè)務(wù)無(wú)關(guān)的相對粗粒度的階段:進(jìn)程創(chuàng )建、最早+load、didFinishLuanching啟動(dòng)和第一個(gè)屏幕的第一次繪制完成。
前三個(gè)時(shí)間點(diǎn)的無(wú)創(chuàng )采集比較簡(jiǎn)單
我們希望將首屏渲染完成時(shí)間與MetricKit對齊,即獲取調用CA::Transaction::commit()方法的時(shí)間。
通過(guò)Runloop源碼分析和離線(xiàn)調試,我們發(fā)現CA::Transaction::commit()、CFRunLoopPerformBlock、kCFRunLoopBeforeTimers這三個(gè)時(shí)序的順序如下:
可以通過(guò)在didFinishLaunch中向Runloop注冊block或者BeforeTimerObserver來(lái)獲取上圖中兩個(gè)時(shí)間點(diǎn)的回調,代碼如下:
//注冊block
CFRunLoopRef?mainRunloop?=?[[NSRunLoop?mainRunLoop]?getCFRunLoop];
CFRunLoopPerformBlock(mainRunloop,NSDefaultRunLoopMode,^(){
????NSTimeInterval?stamp?=?[[NSDate?date]?timeIntervalSince1970];
????NSLog(@"runloop?block?launch?end:%f",stamp);
});
//注冊kCFRunLoopBeforeTimers回調
CFRunLoopRef?mainRunloop?=?[[NSRunLoop?mainRunLoop]?getCFRunLoop];
CFRunLoopActivity?activities?=?kCFRunLoopAllActivities;
CFRunLoopObserverRef?observer?=?CFRunLoopObserverCreateWithHandler(kCFAllocatorDefault,?activities,?YES,?0,?^(CFRunLoopObserverRef?observer,?CFRunLoopActivity?activity)?{
????if?(activity?==?kCFRunLoopBeforeTimers)?{
????????NSTimeInterval?stamp?=?[[NSDate?date]?timeIntervalSince1970];
????????NSLog(@"runloop?beforetimers?launch?end:%f",stamp);
????????CFRunLoopRemoveObserver(mainRunloop,?observer,?kCFRunLoopCommonModes);
????}
});
CFRunLoopAddObserver(mainRunloop,?observer,?kCFRunLoopCommonModes);
經(jīng)過(guò)實(shí)際測試,我們最終選擇的非侵入式首屏渲染方案是:
對于iOS13(含)及以上系統,在runloop中注冊一個(gè)kCFRunLoopBeforeTimers的回調,獲取App首屏渲染完成,更準確。 iOS13以下系統使用CFRunLoopPerformBlock方法注入block以更準確的定時(shí)獲取App首屏渲染。監控周期
App的生命周期可以分為研發(fā)、灰度、上線(xiàn)三個(gè)階段。 不同階段監測的目的和方法不同。
發(fā)展階段
研發(fā)階段監控的主要目的是防止劣化。 相應的,也會(huì )有離線(xiàn)自動(dòng)監控。 通過(guò)實(shí)際啟動(dòng)性能測試,盡快發(fā)現問(wèn)題并解決問(wèn)題。 抖音離線(xiàn)自動(dòng)監控抖音如下:
由定時(shí)任務(wù)觸發(fā),先以發(fā)布方式打包,然后運行自動(dòng)化測試。 測試完成后會(huì )上報測試結果,方便通過(guò)看板跟蹤整體變化趨勢。
如果發(fā)現有降級,會(huì )先發(fā)出告警信息,然后通過(guò)二分查找找到對應的降級MR,然后自動(dòng)運行火焰圖和儀表輔助定位問(wèn)題。
那么如何保證檢測結果穩定可靠呢?
答案是控制變量:
在實(shí)踐中,我們發(fā)現iPhone 8的穩定性最好,其次是iPhone X,iPhone 6的穩定性很差。
除了自動(dòng)化測試之外,還可以在研發(fā)過(guò)程中增加一些訪(fǎng)問(wèn)權限,以防止啟動(dòng)降級。 這些訪(fǎng)問(wèn)包括
不建議做細粒度的Code Review,除非你對相關(guān)業(yè)務(wù)有很好的了解,否則一般肉眼是看不出來(lái)有沒(méi)有變質(zhì)的。
在線(xiàn)和灰度
灰度和線(xiàn)上策略類(lèi)似,主要看行情數據和配置報警。 市場(chǎng)監控和警報與公司的基礎設施有很大關(guān)系。 如果沒(méi)有對應的基礎設施Xcode MetricKit本身也可以看到啟動(dòng)時(shí)間:打開(kāi)Xcode -> Window -> Origanizer -> Launch Time
行情數據本身就是統計性的,會(huì )存在一些統計規律:
基于這些背景,我們一般會(huì )控制變量:去掉地區、機型、版本,有時(shí)甚至會(huì )根據時(shí)間看啟動(dòng)時(shí)間的趨勢。
工具
完成監控后,我們需要找到一些可以?xún)?yōu)化的點(diǎn),需要借助工具。 主要包括儀器和自主開(kāi)發(fā)兩大類(lèi)。
時(shí)間分析器
Time Profiler是一款在日常性能分析中被廣泛使用的工具。 它通常會(huì )選擇一個(gè)時(shí)間段,然后匯總分析調用棧的耗時(shí)。 但是Time Profiler其實(shí)只適合做粗粒度的分析。 你為什么這么說(shuō)? 讓我們來(lái)看看它是如何工作的:
默認情況下,Time Profiler 會(huì )每隔 1ms 采樣一次,只采集運行線(xiàn)程的調用堆棧,最后進(jìn)行統計匯總。 比如下圖中的5個(gè)樣本中,沒(méi)有對method3進(jìn)行采樣,所以最后聚合的stack中是看不到method3的。 所以在Time Profiler中看到的時(shí)間并不是代碼的實(shí)際執行時(shí)間,而是stack在采樣統計中出現的時(shí)間。
Time Profiler 支持一些額外的配置。 如果計算時(shí)間和實(shí)際時(shí)間相差較大,可以嘗試啟用:
系統跟蹤
既然Time Profiler支持粗粒度的分析,那么有沒(méi)有什么細粒度的分析工具呢? 答案是系統跟蹤。
由于我們要細化分析,所以需要標記一小段時(shí)間,可以用Point of interest標記。 此外,系統跟蹤對于分析虛擬內存和線(xiàn)程狀態(tài)很有用:
os_路標
os_signpost 是 iOS 12 推出的用于在儀器中標記時(shí)間段的 API。 性能非常高,可以認為對啟動(dòng)沒(méi)有影響。 結合開(kāi)頭提到的階段性監控,我們可以在Instrument中將啟動(dòng)劃分為多個(gè)階段,結合其他模板具體問(wèn)題具體分析:
os_signpost結合swizzle可以產(chǎn)生意想不到的效果,比如hook所有的load方法分析對應的耗時(shí),hook UIImage對應的方法統計啟動(dòng)路徑上使用的圖片的加載耗時(shí)。
其他樂(lè )器模板
除了這些,還有幾個(gè)比較常用的模板:
火焰圖
火焰圖對于分析與時(shí)間相關(guān)的性能瓶頸非常有用,可以直接畫(huà)出耗時(shí)的業(yè)務(wù)代碼。 另外,可以自動(dòng)生成火焰圖,然后diff,可以用于自動(dòng)歸因。
火焰圖有兩種常見(jiàn)的實(shí)現方式
本質(zhì)上就是在方法的開(kāi)頭和結尾加兩個(gè)點(diǎn)就可以知道方法的耗時(shí),然后轉換成Chrome標準的json格式進(jìn)行分析。 注意,即使使用mmap寫(xiě)文件,還是會(huì )出現一些錯誤,所以發(fā)現的問(wèn)題不一定是問(wèn)題,需要二次確認。
最佳實(shí)踐總體思路
優(yōu)化的整體思路其實(shí)就是四個(gè)步驟:
刪除啟動(dòng)項,最直接的方法。 如果你不能刪除它,請嘗試延遲它。 延遲包括首次訪(fǎng)問(wèn)和啟動(dòng)后找合適的時(shí)間預熱。 如果不能延遲,可以試試并發(fā)。 如果不會(huì )多核多線(xiàn)程,可以試試。 讓代碼執行得更快
本節將以Main函數為分界線(xiàn),看Main函數前后的優(yōu)化方案; 然后介紹如何優(yōu)化Page In; 最后講解一些非常規的優(yōu)化方案,對架構的要求比較高。
主要之前
Main函數之前的啟動(dòng)過(guò)程如下:
動(dòng)態(tài)庫
減少動(dòng)態(tài)庫的數量可以減少在啟動(dòng)關(guān)閉時(shí)創(chuàng )建和加載動(dòng)態(tài)庫所花費的時(shí)間。 官方建議動(dòng)態(tài)庫數量小于6個(gè)。
推薦的方式是將動(dòng)態(tài)庫轉換為靜態(tài)庫,因為這樣可以額外減少包的大小。 另一種方式是合并動(dòng)態(tài)庫,但是在實(shí)踐中可操作性不是很高。 最后要提的是,不要鏈接那些你不使用的庫(包括系統),因為它會(huì )減慢閉包的創(chuàng )建速度。
離線(xiàn)代碼
離線(xiàn)代碼可以減少 Rebase & Bind & Runtime 初始化的耗時(shí)。 那么如何找到不用的代碼,然后下線(xiàn)呢? 分為靜態(tài)掃描和在線(xiàn)統計。
最簡(jiǎn)單的靜態(tài)掃描是基于A(yíng)ppCode,但是項目大后AppCode的索引速度很慢。 另一種靜態(tài)掃描是基于 Mach-O 的:
如果你把兩者區別一下就知道那些classes/sel沒(méi)有用到,但是objc是支持運行時(shí)調用的,刪除前需要確認兩次。
統計無(wú)用代碼的另一種方法是使用在線(xiàn)數據統計。 主流的解決方案有以下三種:
前兩種是ROI較高的解決方案,大部分時(shí)候Class級別的滲透率就足夠了。
+加載遷移
除了方法本身耗時(shí),+load也會(huì )造成大量的Page In,+load的存在也會(huì )影響App的穩定性,因為無(wú)法捕捉到crash。
比如很多DI容器需要給類(lèi)綁定協(xié)議,所以需要在啟動(dòng)的時(shí)候提前注冊(+load):
+?(void)load
{
????[DICenter?bindClass:IMPClass?toProtocol:@protocol(SomeProcotol)]
}
本質(zhì)上只要知道protocol和class的對應關(guān)系,使用clang屬性,這個(gè)過(guò)程就可以遷移到編譯期:
typedef?struct{
????const?char?*?cls;
????const?char?*?protocol;
}_di_pair;
#if?DEBUG
#define?DI_SERVICE(PROTOCOL_NAME,CLASS_NAME)\
__used?static?Class?_DI_VALID_METHOD(void){\
????return?[CLASS_NAME?class];\
}\
__attribute((used,?section(_DI_SEGMENT?","?_DI_SECTION?)))?static?_di_pair?_DI_UNIQUE_VAR?=?\
{\
_TO_STRING(CLASS_NAME),\
_TO_STRING(PROTOCOL_NAME),\
};\
#else
__attribute((used,?section(_DI_SEGMENT?","?_DI_SECTION?)))?static?_di_pair?_DI_UNIQUE_VAR?=?\
{\
_TO_STRING(CLASS_NAME),\
_TO_STRING(PROTOCOL_NAME),\
};\
#endif
原理很簡(jiǎn)單:宏提供接口,編譯時(shí)將類(lèi)名和協(xié)議名寫(xiě)入二進(jìn)制的指定段,運行時(shí)讀出關(guān)系就知道協(xié)議綁定在哪個(gè)類(lèi)上。
有同學(xué)會(huì )注意到有一個(gè)無(wú)用的方法_DI_VALID_METHOD,它只存在于debug模式下,目的是為了讓編譯器保證類(lèi)型安全。
靜態(tài)初始化遷移
靜態(tài)初始化,和+load方法一樣,也會(huì )造成大量的Page In,通常來(lái)自C++代碼,比如網(wǎng)絡(luò )或者特效庫。 另外,一些靜態(tài)初始化是通過(guò)頭文件引入的,可以通過(guò)預處理來(lái)確認。
幾種典型的遷移思路:
//Bad
namespace?{
????static?const?std::string?bucket[]?=?{"apples",?"pears",?"meerkats"};
}
const?std::string?GetBucketThing(int?i)?{
?????return?bucket[i];
}
//Good
std::string?GetBucketThing(int?i)?{
??static?const?std::string?bucket[]?=?{"apples",?"pears",?"meerkats"};
??return?bucket[i];
}
Main 之后的啟動(dòng)器
啟動(dòng)需要框架來(lái)控制,抖音采用輕量級的中心化方案:
啟動(dòng)任務(wù)的執行過(guò)程如下:
為什么需要啟動(dòng)器?
三方SDK
一些第三方SDK啟動(dòng)時(shí)間比較長(cháng),比如Fabric,抖音下線(xiàn)后抖音的啟動(dòng)速度快了70ms左右。
除了下線(xiàn),很多SDK都可以延遲,比如分享、登錄等。另外,在接入SDK之前,可以先評估一下對啟動(dòng)性能的影響。 如果影響較大,可以反饋給SDK提供商修改,尤其是付費SDK。 他們其實(shí)很愿意配合,做一些修改。
高頻法
有些方法單獨耗時(shí)不高,但在啟動(dòng)路徑上會(huì )被多次調用,累計起來(lái)耗時(shí)不低。 比如讀取Info.plist中的配置:
+?(NSString?*)plistChannel
{
????return?[[[NSBundle?mainBundle]?infoDictionary]?objectForKey:@"CHANNEL_NAME"];
}
修改的方式很簡(jiǎn)單,加一層內存緩存即可。 這種問(wèn)題在TimeProfiler中選擇時(shí)間段的時(shí)候經(jīng)??梢钥吹?。
鎖
鎖之所以影響啟動(dòng)時(shí)間,是因為有時(shí)候子線(xiàn)程先持有鎖,主線(xiàn)程需要等待子線(xiàn)程鎖釋放。 還要警惕系統會(huì )有很多隱藏的全局鎖,比如dyld和Runtime。 例如:
下圖是UIImage imageNamed造成的主線(xiàn)程阻塞:
從右邊的??梢钥闯?,imageNamed觸發(fā)dlopen,dlopen等待dyld的全局鎖。 通過(guò)System Trace的Thread State Event,可以找到線(xiàn)程被阻塞的下一個(gè)事件。 此事件表明該線(xiàn)程可以再次運行,因為其他線(xiàn)程已經(jīng)釋放了鎖:
接下來(lái)通過(guò)分析此時(shí)后臺線(xiàn)程在做什么,就會(huì )知道為什么會(huì )持有鎖,以及如何優(yōu)化。
線(xiàn)程數
線(xiàn)程的數量和優(yōu)先級都會(huì )影響啟動(dòng)時(shí)間。 您可以通過(guò)設置 QoS 來(lái)配置優(yōu)先級。 兩個(gè)高質(zhì)量的 QoS 是用戶(hù)交互的/發(fā)起的。 啟動(dòng)時(shí)需要主線(xiàn)程等待的子線(xiàn)程任務(wù)要設置為高質(zhì)量。
優(yōu)質(zhì)線(xiàn)程的數量不應超過(guò) CPU 內核的數量。 您可以通過(guò)System Trace 的System Load 來(lái)分析這種情況。
/GCD
dispatch_queue_attr_t?attr?=?dispatch_queue_attr_make_with_qos_class(DISPATCH_QUEUE_SERIAL,?QOS_CLASS_UTILITY,?-1);
dispatch_queue_t?queue?=?dispatch_queue_create("com.custom.utility.queue",?attr);
//NSOperationQueue
operationQueue.qualityOfService?=?NSQualityOfServiceUtility
線(xiàn)程數也會(huì )影響啟動(dòng)時(shí)間,但在iOS中全局控制線(xiàn)程并不容易。 比如二/三方庫的后臺線(xiàn)程不好控制,但是業(yè)務(wù)線(xiàn)程可以通過(guò)啟動(dòng)任務(wù)來(lái)控制。
線(xiàn)程多沒(méi)關(guān)系,只要同時(shí)執行的并發(fā)不多,可以通過(guò)System Trace查看上下文切換耗時(shí),確認線(xiàn)程數是否是啟動(dòng)瓶頸.
圖片
難免會(huì )用到很多圖片來(lái)啟動(dòng)。 有什么辦法可以?xún)?yōu)化圖片加載的耗時(shí)嗎?
使用 Asset 管理圖像,而不是直接將它們放在 bundle 中。 資產(chǎn)將在編譯期間進(jìn)行優(yōu)化,以加快加載速度。 另外在A(yíng)sset中加載圖片比Bundle更快,因為UIImage imageNamed需要遍歷Bundle來(lái)尋找圖片。 Asset中加載圖片的耗時(shí)主要在第一張圖片,因為需要建立索引,這部分耗時(shí)可以通過(guò)將啟動(dòng)的圖片放到一個(gè)小的Asset中來(lái)減少。
每次創(chuàng )建一個(gè)UIImage,都需要IO,在渲染第一幀的時(shí)候解碼。 所以這個(gè)耗時(shí)的部分可以通過(guò)在子線(xiàn)程之前預加載(創(chuàng )建UIImage)來(lái)優(yōu)化。
如下圖所示,圖像只會(huì )在后期的“RootWindow Creation”和“First Frame Rendering”中使用,所以可以在啟動(dòng)前期啟動(dòng)預加載的子線(xiàn)程來(lái)啟動(dòng)任務(wù)。
魚(yú)鉤
fishhook是一個(gè)用來(lái)hook C函數的庫,但是第一次調用這個(gè)庫比較耗時(shí),所以最好不要帶上線(xiàn)。 Fishhook如下圖遍歷Mach-O的多個(gè)段,找到函數指針和函數符號名的映射關(guān)系。 副作用是需要大量的Page Ins。 對于大型應用,在 iPhone X 上啟動(dòng)冷啟動(dòng)需要時(shí)間 200ms+。
如果一定要使用fishhook,請在子線(xiàn)程中調用,不要直接在_dyld_register_func_for_add_image中調用fishhook。 因為這個(gè)方法會(huì )持有一個(gè)dyld的全局互斥量,系統庫經(jīng)常在主線(xiàn)程啟動(dòng)時(shí)調用dlsym和dlopen,內部也需要這個(gè)鎖,導致上述子線(xiàn)程阻塞主線(xiàn)程。
第一幀渲染
不同的APP有不同的業(yè)務(wù)形態(tài),首幀渲染優(yōu)化方式也大不相同。 幾個(gè)常見(jiàn)的優(yōu)化點(diǎn):
其他提示
啟動(dòng)優(yōu)化有一些需要注意的tips:
不要刪除tmp/com.apple.dyld目錄,因為iOS 13+的啟動(dòng)閉包存放在該目錄下。 如果刪除了,下次啟動(dòng)時(shí)會(huì )重新創(chuàng )建。 創(chuàng )建閉包的過(guò)程非常緩慢。 接下來(lái)是IO優(yōu)化。 一種常見(jiàn)的方式是使用mmap來(lái)使IO更快,也可以在啟動(dòng)的早期預加載數據。
還有一些點(diǎn)在iPhone 6上耗時(shí)會(huì )明顯增加:
iPhone 6是一個(gè)分水嶺,性能會(huì )跌落懸崖,你可以在iPhone 6上降低部分用戶(hù)交互來(lái)?yè)Q取核心體驗(切記AB驗證)。
Page In耗時(shí)
啟動(dòng)路徑上會(huì )觸發(fā)大量Page Ins。 有沒(méi)有辦法優(yōu)化這部分耗時(shí)?
部分重命名
App Store 會(huì )對上傳的 App 的 TEXT 部分進(jìn)行加密,并在 Page In 發(fā)生時(shí)對其進(jìn)行解密。 解密過(guò)程非常耗時(shí)。 由于TEXT部分會(huì )被加密,直接的思路就是將TEXT部分的內容移動(dòng)到其他部分。 ld還有一個(gè)參數rename_section來(lái)支持重命名:
抖音更名方案:
"-Wl,-rename_section,__TEXT,__cstring,__RODATA,__cstring",
"-Wl,-rename_section,__TEXT,__const,__RODATA,__const",
"-Wl,-rename_section,__TEXT,__gcc_except_tab,__RODATA,__gcc_except_tab",
"-Wl,-rename_section,__TEXT,__objc_methname,__RODATA,__objc_methname",
"-Wl,-rename_section,__TEXT,__objc_classname,__RODATA,__objc_classname",
"-Wl,-rename_section,__TEXT,__objc_methtype,__RODATA,__objc_methtype"
這種優(yōu)化方式在iOS 13下是有效的,因為iOS 13優(yōu)化了解密過(guò)程,Page In在的時(shí)候不需要解密,這也是iOS 13啟動(dòng)速度更快的原因之一。
二元重排
由于在啟動(dòng)路徑上會(huì )觸發(fā)大量的Page Ins,請問(wèn)有什么辦法可以?xún)?yōu)化嗎?
啟動(dòng)具有局部性的特點(diǎn),即啟動(dòng)時(shí)只用到少量函數,而且這些函數分布比較分散,因此Page In讀取的數據利用率不高。 如果我們可以將用于啟動(dòng)的函數安排成連續的二進(jìn)制區間,那么我們就可以減少Page In的數量,從而優(yōu)化啟動(dòng)時(shí)間:
以下圖為例。 啟動(dòng)時(shí)使用方法一和方法三。 為了執行相應的代碼,需要兩次 Page Ins。 如果我們把方法一和方法三放在一起,那么只需要一次Page In,從而提高了啟動(dòng)速度。
鏈接器 ld 有一個(gè)參數 -order_file 支持根據符號排列二進(jìn)制文件。 啟動(dòng)時(shí)使用的主流符號有兩種獲取方式:
Facebook的LLVM function instrumentation是為order_file定制的,代碼也是他們?yōu)長(cháng)LVM開(kāi)發(fā)的,已經(jīng)合并到LLVM的主分支中。
Facebook的方案更精細,生成的order_file是最優(yōu)方案,但工作量巨大。 抖音的方案不需要源碼編譯,不需要修改現有的編譯環(huán)境和流程,侵入性最小。 缺點(diǎn)是只能覆蓋90%左右的符號。
- 灰度是任何優(yōu)化的好階段,因為很多新的優(yōu)化方案都存在不確定性,需要先在灰度上進(jìn)行驗證。
非常規方案動(dòng)態(tài)庫懶加載
一開(kāi)始我們提到可以通過(guò)刪除代碼來(lái)減少代碼量,那么有沒(méi)有什么辦法可以在不減少代碼總量的情況下減少啟動(dòng)時(shí)加載的代碼量呢?
什么是懶加載動(dòng)態(tài)庫? 普通的動(dòng)態(tài)庫直接或間接地由主二進(jìn)制文件鏈接,因此這些動(dòng)態(tài)庫將在啟動(dòng)時(shí)加載。 如果只是打包進(jìn)App,不參與鏈接,那么啟動(dòng)時(shí)不會(huì )自動(dòng)加載。 當運行時(shí)需要動(dòng)態(tài)庫中的內容時(shí),會(huì )手動(dòng)延遲加載。
動(dòng)態(tài)庫的延遲加載在編譯時(shí)和運行時(shí)都需要修改。 編譯時(shí)的架構:
像 A.framework 這樣的動(dòng)態(tài)庫是延遲加載的,因為它們不參與主二進(jìn)制文件的直接或間接鏈接。 動(dòng)態(tài)庫之間必然存在一些共同的依賴(lài)關(guān)系,將這些依賴(lài)關(guān)系打包成Shared.framework來(lái)解決公共依賴(lài)關(guān)系的問(wèn)題。
運行時(shí)由-[NSBundle load]加載,本質(zhì)上是調用底層的dlopen。 那么什么時(shí)候觸發(fā)手動(dòng)加載動(dòng)態(tài)庫呢?
動(dòng)態(tài)庫可以分為業(yè)務(wù)類(lèi)和函數類(lèi)兩種。 業(yè)務(wù)是UI的入口,動(dòng)態(tài)庫加載的邏輯可以匯聚到路由內部,讓外部實(shí)際上不知道動(dòng)態(tài)庫是懶加載的,可以更好的斷層——寬容。 函數庫(比如上圖中的QR.framework)會(huì )有點(diǎn)不同,因為沒(méi)有UI等入口,函數庫需要自己維護Wrapper:
動(dòng)態(tài)庫懶加載除了減少啟動(dòng)加載的代碼外,還可以防止業(yè)務(wù)長(cháng)時(shí)間添加代碼導致的啟動(dòng)降級,因為業(yè)務(wù)在第一次訪(fǎng)問(wèn)時(shí)就完成了初始化。
該解決方案還有其他優(yōu)點(diǎn)。 比如動(dòng)態(tài)庫轉換后本地編譯時(shí)間會(huì )大大減少,對其他性能指標也有好處。 缺點(diǎn)是會(huì )犧牲一定的包體積,但是懶加載的動(dòng)態(tài)庫可以通過(guò)分段壓縮等方式進(jìn)行優(yōu)化。 來(lái)平衡這部分損失。
后臺獲取
Background Fetch 可以定時(shí)在后臺啟動(dòng)應用,對時(shí)間敏感的應用(比如新聞)在后臺刷新數據,可以提高提要加載速度,提升用戶(hù)體驗。
那么,為什么這種“后臺?;睢睓C制能夠提高啟動(dòng)速度呢? 我們來(lái)看一個(gè)典型案例:
系統在后臺啟動(dòng)應用程序需要很長(cháng)時(shí)間。 因為內存等原因,后臺App被kill了。 此時(shí),用戶(hù)立即啟動(dòng)App。 那么這個(gè)啟動(dòng)就是熱啟動(dòng),因為緩存還在。 另一次系統在后臺啟動(dòng)應用程序。 這個(gè)時(shí)候用戶(hù)在A(yíng)pp在后臺的時(shí)候點(diǎn)擊App,那么這個(gè)啟動(dòng)就是后臺回到前臺,因為App還活著(zhù)
通過(guò)這兩個(gè)典型場(chǎng)景,我們可以看出為什么Background Fetch可以提高啟動(dòng)速度:
啟動(dòng)后臺有一些需要注意的地方,比如日?;顒?dòng),廣告,甚至AB組入口的邏輯都會(huì )受到影響,需要大量的適配。 經(jīng)常需要launcher來(lái)支持,因為didFinishLaunch中執行的task在后臺啟動(dòng)時(shí)需要延遲到第一次回到前臺才正常啟動(dòng)。
總結
最后,提取了我們認為在任何優(yōu)化中都很重要的幾點(diǎn):
加入我們
我們是負責抖音客戶(hù)端基礎能力研發(fā)和新技術(shù)探索的團隊。 我們深耕工程/業(yè)務(wù)架構、研發(fā)工具、編譯系統等,支持業(yè)務(wù)快速迭代,同時(shí)保證超大規模團隊的研發(fā)效率和工程質(zhì)量。 在性能/穩定性等方面不斷探索,力求為全球億萬(wàn)用戶(hù)提供最極致的基礎體驗。
如果你熱愛(ài)技術(shù),歡迎加入抖音基礎技術(shù)團隊,讓我們一起打造億級國民APP。 目前我們在上海、北京、杭州、深圳都有招聘需求。 內推可以聯(lián)系郵箱:,郵件標題:姓名-工作年限-抖音-基礎技術(shù)抖音 /Android。
歡迎關(guān)注“字節跳動(dòng)技術(shù)團隊”
簡(jiǎn)歷投遞聯(lián)系郵箱:“ ” 查看全部
解決方案:【實(shí)時(shí)數倉】DWD層需求分析及實(shí)現思路、idea環(huán)境搭建、實(shí)現DWD層處理用戶(hù)行
文章目錄
一、DWD層需求分析及實(shí)現思路 1、分層需求分析
構建實(shí)時(shí)數倉的目的主要是增加數據計算的復用性。 每增加一個(gè)新的統計要求,不是從原來(lái)的數據計算,而是從半成品繼續加工。
這里從kafka的ods層讀取用戶(hù)行為日志和業(yè)務(wù)數據,簡(jiǎn)單處理后,作為dwd層回寫(xiě)給kafka。
2 各層功能分層數據描述 生成計算工具 存儲介質(zhì)
消耗臭氧層物質(zhì)
原創(chuàng )數據、日志和業(yè)務(wù)數據
日志服務(wù)器,麥克斯韋
卡夫卡
DWD
流式處理是以數據對象為單位進(jìn)行的,例如訂單、頁(yè)面訪(fǎng)問(wèn)量等。
弗林克
卡夫卡
DWM
對于一些數據對象的進(jìn)一步處理,比如獨立訪(fǎng)問(wèn),跳出行為。 還是詳細的數據。
弗林克
卡夫卡
暗淡
維度數據
弗林克
數據庫
DWS
將多個(gè)事實(shí)數據按照一個(gè)維度topic輕聚合,形成一個(gè)topic wide table。
弗林克
點(diǎn)擊之家
存托憑證
根據可視化的需要,對Clickhouse中的數據進(jìn)行過(guò)濾聚合。
Clickhouse SQL
可視化
3 DWD層功能詳解(一)用戶(hù)行為日志數據
根據不同類(lèi)別的日志進(jìn)行拆分。
前端埋點(diǎn)的所有數據都放在Kafka中的ods_base_log主題中,比如啟動(dòng)日志、頁(yè)面訪(fǎng)問(wèn)日志、曝光日志等,雖然日志都是一樣的,但是分為不同的類(lèi)型。 以后做數據統計的時(shí)候,不方便從這個(gè)題目中獲取所有的數據。 因此,需要從ods_base_log主題中提取數據,根據日志類(lèi)型將不同類(lèi)型的數據放入不同的主題中,并進(jìn)行分流操作,比如將啟動(dòng)日志放入啟動(dòng)主題中,將曝光登錄曝光主題。 日志被放入日志主題中。
(2) 業(yè)務(wù)數據
根據業(yè)務(wù)數據類(lèi)型(維度或事實(shí))進(jìn)行拆分。
MySQL存儲的業(yè)務(wù)數據中有很多表。 這些表分為兩種,一種是事實(shí)表,一種是維表。 采集數據時(shí),只要業(yè)務(wù)數據發(fā)生變化,就會(huì )通過(guò)maxwell采集到Kafka的ods_base_db_m主題中,不區分事實(shí)和維度。 如果是factual data,想放在kafka不同的單獨topic中,比如order topic,order detail topic,payment topic等。對于維度數據,不適合放在kafka中存儲。 Kafka不適合長(cháng)期存儲,默認存儲7天。 海量數據的分析計算也不適合存儲在MySQL中,因為在分析計算的過(guò)程中需要不斷的進(jìn)行查詢(xún)操作,給業(yè)務(wù)數據庫帶來(lái)了很大的壓力,而MySQL對于大量數據的查詢(xún)性能較差。
使用維度數據時(shí),需要根據維度id查詢(xún)具體數據。 KV型數據庫更適合存儲維度數據,根據K獲取V效率更高。 KV數據庫有Redis和Hbase,Redis長(cháng)期存儲壓力比較大。 最終選擇Hbase存儲維度數據。
4 DWD層數據準備實(shí)現思路2環(huán)境搭建1創(chuàng )建maven項目
創(chuàng )建一個(gè)maven項目,gmall2022-realtime。
2 修改配置文件 (1) 添加依賴(lài)
1.8
${java.version}
${java.version}
1.12.0
2.12
3.1.3
org.apache.flink
flink-java
${flink.version}
org.apache.flink
flink-streaming-java_${scala.version}
${flink.version}
org.apache.flink
flink-connector-kafka_${scala.version}
${flink.version}
org.apache.flink
flink-clients_${scala.version}
${flink.version}
org.apache.flink
flink-cep_${scala.version}
${flink.version}
org.apache.flink
flink-json
${flink.version}
com.alibaba
fastjson
1.2.68
<p>

org.apache.hadoop
hadoop-client
${hadoop.version}
org.slf4j
slf4j-api
1.7.25
org.slf4j
slf4j-log4j12
1.7.25
org.apache.logging.log4j
log4j-to-slf4j
2.14.0
org.apache.maven.plugins
maven-assembly-plugin
3.0.0
jar-with-dependencies
make-assembly
package
single
</p>
(2) 添加配置文件
在resources目錄下創(chuàng )建log4j.properties配置文件
log4j.rootLogger=error,stdout
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.target=System.out
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d %p [%c] - %m%n
3 創(chuàng )建如下包結構
目錄角色
應用程序
生成各層數據的Flink任務(wù)
豆子
數據對象
常見(jiàn)的
公共常量
效用
工具
3 準備用戶(hù)行為日志——DWD層
之前采集的日志數據已經(jīng)保存在Kafka中。 作為日志數據的ODS層,Kafka從ODS層讀取的日志數據分為三類(lèi),頁(yè)面日志、啟動(dòng)日志、暴露日志。 這三類(lèi)數據雖然都是用戶(hù)行為數據,但是它們的數據結構完全不同,所以需要拆分處理。 將拆分后的日志寫(xiě)回Kafka的不同主題作為日志DWD層。
頁(yè)面日志輸出到主流,啟動(dòng)日志輸出到啟動(dòng)端輸出流,曝光日志輸出到曝光端輸出流。
1個(gè)主要任務(wù)
整體流程如下:
2 分區、分組和分流
三者的關(guān)系和區別如下:
3 代碼實(shí)現(1)接收Kafka數據,轉換為封裝和操作Kafka的工具類(lèi),并提供獲取kafka消費者的方法(閱讀)
/**
* 操作kafka工具類(lèi)
*/
public class MyKafkaUtil {
private static final String KAFKA_SERVER = "hadoop101:9092,hadoop102:9092,hadoop103:9092";
// 獲取kafka的消費者
public static FlinkKafkaConsumer getKafkaSource(String topic,String groupId){
Properties props = new Properties();
props.setProperty(ConsumerConfig.BOOTSTRAP_SERVERS_CONFIG,KAFKA_SERVER);
// 定義消費者組
props.setProperty(ConsumerConfig.GROUP_ID_CONFIG,groupId);
<p>

return new FlinkKafkaConsumer(topic,new SimpleStringSchema(),props);
}
}
</p>
b Flink調用工具類(lèi)主程序讀取數據
/**
* 對日志數據進(jìn)行分流操作
* 啟動(dòng)、曝光、頁(yè)面
* 啟動(dòng)日志放到啟動(dòng)側輸出流中
* 曝光日志放到曝光側輸出流中
* 頁(yè)面日志放到主流中
* 將不同流的數據寫(xiě)回到kafka的dwd主題中
*/
public class BaseLogApp {
public static void main(String[] args) throws Exception{
// TODO 1 基本環(huán)境準備
// 流處理環(huán)境
StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment();
// 設置并行度
env.setParallelism(4);
// TODO 2 檢查點(diǎn)相關(guān)設置
// 開(kāi)啟檢查點(diǎn)
// 每5S中開(kāi)啟一次檢查點(diǎn),檢查點(diǎn)模式為EXACTLY_ONCE
env.enableCheckpointing(5000L, CheckpointingMode.EXACTLY_ONCE);
// 設置檢查點(diǎn)超時(shí)時(shí)間
env.getCheckpointConfig().setCheckpointTimeout(60000L);
// 設置重啟策略
// 重啟三次,每次間隔3s鐘
env.setRestartStrategy(RestartStrategies.fixedDelayRestart(3,3000L));
// 設置job取消后,檢查點(diǎn)是否保留
env.getCheckpointConfig().enableExternalizedCheckpoints(CheckpointConfig.ExternalizedCheckpointCleanup.RETAIN_ON_CANCELLATION);
// 設置狀態(tài)后端 -- 基于內存 or 文件系統 or RocksDB
// 內存:狀態(tài)存在TaskManager內存中,檢查點(diǎn)存在JobManager內存中
// 文件系統:狀態(tài)存在TaskManager內存中,檢查點(diǎn)存在指定的文件系統路徑中
// RocksDB:看做和Redis類(lèi)似的數據庫,狀態(tài)存在TaskManager內存中,檢查點(diǎn)存在JobManager內存和本地磁盤(pán)上
// hadoop中nm的地址
env.setStateBackend(new FsStateBackend("hdfs://hadoop101:8020/ck/gmall"));
// 指定操作HDFS的用戶(hù)
System.setProperty("HADOOP_USER_NAME","hzy");
// TODO 3 從kafka讀取數據
// 聲明消費的主題和消費者組
String topic = "ods_base_log";
String groupId = "base_log_app_group";
// 獲取kafka消費者
FlinkKafkaConsumer kafkaSource = MyKafkaUtil.getKafkaSource(topic, groupId);
// 讀取數據,封裝為流
DataStreamSource kafkaDS = env.addSource(kafkaSource);
// TODO 4 對讀取的數據進(jìn)行結構的轉換 jsonStr -> jsonObj
// // 匿名內部類(lèi)實(shí)現
// SingleOutputStreamOperator jsonObjDS = kafkaDS.map(
// new MapFunction() {
// @Override
// public JSONObject map(String jsonStr) throws Exception {
// return JSON.parseObject(jsonStr);
// }
// }
// );
// // lambda表達式實(shí)現
// kafkaDS.map(
// jsonStr -> JSON.parse(jsonStr)
// );
// 方法的默認調用,注意導入的是alibaba JSON包
SingleOutputStreamOperator jsonObjDS = kafkaDS.map(JSON::parseObject);
jsonObjDS.print(">>>");
// TODO 5 修復新老訪(fǎng)客狀態(tài)
// TODO 6 按照日志類(lèi)型對日志進(jìn)行分流
// TODO 7 將不同流的數據寫(xiě)到kafka的dwd不同主題中
env.execute();
}
}
測試
# 啟動(dòng)zookeeper
# 啟動(dòng)kafka
# 啟動(dòng)采集服務(wù)
logger.sh start
# 啟動(dòng)nm以將檢查點(diǎn)保存到hdfs上
start-dfs.sh
# 等待安全模式關(guān)閉,啟動(dòng)主程序,如果出現權限問(wèn)題,可以將權限放開(kāi)
hdfs dfs -chmod -R 777 /
# 或者增加以下代碼到主程序中
System.setProperty("HADOOP_USER_NAME","hzy");
# 程序運行起來(lái)后,啟動(dòng)模擬生成日志數據jar包,在主程序中可以接收到數據
解決方案:抖音品質(zhì)建設 - iOS啟動(dòng)優(yōu)化《實(shí)戰篇》
前言
啟動(dòng)是App給用戶(hù)的第一印象。 啟動(dòng)越慢,用戶(hù)流失的概率就越高。 良好的啟動(dòng)速度是用戶(hù)體驗不可或缺的一部分。 啟動(dòng)優(yōu)化涉及的知識點(diǎn)非常多,知識點(diǎn)范圍很廣。 文章難以面面俱到,分為原理和實(shí)戰兩部分。 本文為實(shí)戰文章。
原理:抖音品質(zhì)建設——iOS啟動(dòng)優(yōu)化《原理》
如何做啟動(dòng)優(yōu)化?
在文章正式內容開(kāi)始之前,大家可以想一想,如果自己來(lái)做啟動(dòng)優(yōu)化,會(huì )怎么進(jìn)行呢?
這其實(shí)是一個(gè)比較大的問(wèn)題。 遇到類(lèi)似情況,我們可以把大問(wèn)題分解成幾個(gè)小問(wèn)題:
對應本文的三個(gè)模塊:監控、工具和最佳實(shí)踐。
監控啟動(dòng)埋點(diǎn)
既然要監控,那就需要在代碼中能夠獲取到啟動(dòng)時(shí)間。 每個(gè)人都采用相同的起點(diǎn)作為起點(diǎn):創(chuàng )建進(jìn)程的時(shí)間。
起始點(diǎn)對應于用戶(hù)感知到的Launch Image消失的第一幀。 抖音采用的方案如下:
蘋(píng)果官方的統計方式是第一種CA::Transaction::commit,但是對應的實(shí)現是在系統框架內,抖音的方式非常接近這一點(diǎn)。
分階段
排查線(xiàn)上問(wèn)題,只有一個(gè)耗時(shí)的埋點(diǎn)入手顯然是不夠的。 可與單點(diǎn)埋點(diǎn)分階段組合使用。 以下是抖音目前的監控方案:
+load 和 initializer 的調用順序與鏈接順序有關(guān)。 鏈接順序默認是按照CocoaPod Pod名稱(chēng)升序排列的,所以選擇AAA開(kāi)頭的名稱(chēng)可以讓某個(gè)+load和initializer先執行。
無(wú)入侵監控
公司的APM團隊提供了一個(gè)非侵入式的啟動(dòng)監控方案,將啟動(dòng)過(guò)程拆分為幾個(gè)與業(yè)務(wù)無(wú)關(guān)的相對粗粒度的階段:進(jìn)程創(chuàng )建、最早+load、didFinishLuanching啟動(dòng)和第一個(gè)屏幕的第一次繪制完成。
前三個(gè)時(shí)間點(diǎn)的無(wú)創(chuàng )采集比較簡(jiǎn)單
我們希望將首屏渲染完成時(shí)間與MetricKit對齊,即獲取調用CA::Transaction::commit()方法的時(shí)間。
通過(guò)Runloop源碼分析和離線(xiàn)調試,我們發(fā)現CA::Transaction::commit()、CFRunLoopPerformBlock、kCFRunLoopBeforeTimers這三個(gè)時(shí)序的順序如下:
可以通過(guò)在didFinishLaunch中向Runloop注冊block或者BeforeTimerObserver來(lái)獲取上圖中兩個(gè)時(shí)間點(diǎn)的回調,代碼如下:
//注冊block
CFRunLoopRef?mainRunloop?=?[[NSRunLoop?mainRunLoop]?getCFRunLoop];
CFRunLoopPerformBlock(mainRunloop,NSDefaultRunLoopMode,^(){
????NSTimeInterval?stamp?=?[[NSDate?date]?timeIntervalSince1970];
????NSLog(@"runloop?block?launch?end:%f",stamp);
});
//注冊kCFRunLoopBeforeTimers回調
CFRunLoopRef?mainRunloop?=?[[NSRunLoop?mainRunLoop]?getCFRunLoop];
CFRunLoopActivity?activities?=?kCFRunLoopAllActivities;
CFRunLoopObserverRef?observer?=?CFRunLoopObserverCreateWithHandler(kCFAllocatorDefault,?activities,?YES,?0,?^(CFRunLoopObserverRef?observer,?CFRunLoopActivity?activity)?{
????if?(activity?==?kCFRunLoopBeforeTimers)?{
????????NSTimeInterval?stamp?=?[[NSDate?date]?timeIntervalSince1970];
????????NSLog(@"runloop?beforetimers?launch?end:%f",stamp);
????????CFRunLoopRemoveObserver(mainRunloop,?observer,?kCFRunLoopCommonModes);
????}
});
CFRunLoopAddObserver(mainRunloop,?observer,?kCFRunLoopCommonModes);
經(jīng)過(guò)實(shí)際測試,我們最終選擇的非侵入式首屏渲染方案是:
對于iOS13(含)及以上系統,在runloop中注冊一個(gè)kCFRunLoopBeforeTimers的回調,獲取App首屏渲染完成,更準確。 iOS13以下系統使用CFRunLoopPerformBlock方法注入block以更準確的定時(shí)獲取App首屏渲染。監控周期
App的生命周期可以分為研發(fā)、灰度、上線(xiàn)三個(gè)階段。 不同階段監測的目的和方法不同。
發(fā)展階段
研發(fā)階段監控的主要目的是防止劣化。 相應的,也會(huì )有離線(xiàn)自動(dòng)監控。 通過(guò)實(shí)際啟動(dòng)性能測試,盡快發(fā)現問(wèn)題并解決問(wèn)題。 抖音離線(xiàn)自動(dòng)監控抖音如下:
由定時(shí)任務(wù)觸發(fā),先以發(fā)布方式打包,然后運行自動(dòng)化測試。 測試完成后會(huì )上報測試結果,方便通過(guò)看板跟蹤整體變化趨勢。
如果發(fā)現有降級,會(huì )先發(fā)出告警信息,然后通過(guò)二分查找找到對應的降級MR,然后自動(dòng)運行火焰圖和儀表輔助定位問(wèn)題。
那么如何保證檢測結果穩定可靠呢?
答案是控制變量:
在實(shí)踐中,我們發(fā)現iPhone 8的穩定性最好,其次是iPhone X,iPhone 6的穩定性很差。
除了自動(dòng)化測試之外,還可以在研發(fā)過(guò)程中增加一些訪(fǎng)問(wèn)權限,以防止啟動(dòng)降級。 這些訪(fǎng)問(wèn)包括
不建議做細粒度的Code Review,除非你對相關(guān)業(yè)務(wù)有很好的了解,否則一般肉眼是看不出來(lái)有沒(méi)有變質(zhì)的。
在線(xiàn)和灰度
灰度和線(xiàn)上策略類(lèi)似,主要看行情數據和配置報警。 市場(chǎng)監控和警報與公司的基礎設施有很大關(guān)系。 如果沒(méi)有對應的基礎設施Xcode MetricKit本身也可以看到啟動(dòng)時(shí)間:打開(kāi)Xcode -> Window -> Origanizer -> Launch Time
行情數據本身就是統計性的,會(huì )存在一些統計規律:
基于這些背景,我們一般會(huì )控制變量:去掉地區、機型、版本,有時(shí)甚至會(huì )根據時(shí)間看啟動(dòng)時(shí)間的趨勢。
工具
完成監控后,我們需要找到一些可以?xún)?yōu)化的點(diǎn),需要借助工具。 主要包括儀器和自主開(kāi)發(fā)兩大類(lèi)。
時(shí)間分析器
Time Profiler是一款在日常性能分析中被廣泛使用的工具。 它通常會(huì )選擇一個(gè)時(shí)間段,然后匯總分析調用棧的耗時(shí)。 但是Time Profiler其實(shí)只適合做粗粒度的分析。 你為什么這么說(shuō)? 讓我們來(lái)看看它是如何工作的:
默認情況下,Time Profiler 會(huì )每隔 1ms 采樣一次,只采集運行線(xiàn)程的調用堆棧,最后進(jìn)行統計匯總。 比如下圖中的5個(gè)樣本中,沒(méi)有對method3進(jìn)行采樣,所以最后聚合的stack中是看不到method3的。 所以在Time Profiler中看到的時(shí)間并不是代碼的實(shí)際執行時(shí)間,而是stack在采樣統計中出現的時(shí)間。
Time Profiler 支持一些額外的配置。 如果計算時(shí)間和實(shí)際時(shí)間相差較大,可以嘗試啟用:
系統跟蹤
既然Time Profiler支持粗粒度的分析,那么有沒(méi)有什么細粒度的分析工具呢? 答案是系統跟蹤。
由于我們要細化分析,所以需要標記一小段時(shí)間,可以用Point of interest標記。 此外,系統跟蹤對于分析虛擬內存和線(xiàn)程狀態(tài)很有用:
os_路標
os_signpost 是 iOS 12 推出的用于在儀器中標記時(shí)間段的 API。 性能非常高,可以認為對啟動(dòng)沒(méi)有影響。 結合開(kāi)頭提到的階段性監控,我們可以在Instrument中將啟動(dòng)劃分為多個(gè)階段,結合其他模板具體問(wèn)題具體分析:
os_signpost結合swizzle可以產(chǎn)生意想不到的效果,比如hook所有的load方法分析對應的耗時(shí),hook UIImage對應的方法統計啟動(dòng)路徑上使用的圖片的加載耗時(shí)。
其他樂(lè )器模板
除了這些,還有幾個(gè)比較常用的模板:
火焰圖
火焰圖對于分析與時(shí)間相關(guān)的性能瓶頸非常有用,可以直接畫(huà)出耗時(shí)的業(yè)務(wù)代碼。 另外,可以自動(dòng)生成火焰圖,然后diff,可以用于自動(dòng)歸因。
火焰圖有兩種常見(jiàn)的實(shí)現方式
本質(zhì)上就是在方法的開(kāi)頭和結尾加兩個(gè)點(diǎn)就可以知道方法的耗時(shí),然后轉換成Chrome標準的json格式進(jìn)行分析。 注意,即使使用mmap寫(xiě)文件,還是會(huì )出現一些錯誤,所以發(fā)現的問(wèn)題不一定是問(wèn)題,需要二次確認。
最佳實(shí)踐總體思路
優(yōu)化的整體思路其實(shí)就是四個(gè)步驟:

刪除啟動(dòng)項,最直接的方法。 如果你不能刪除它,請嘗試延遲它。 延遲包括首次訪(fǎng)問(wèn)和啟動(dòng)后找合適的時(shí)間預熱。 如果不能延遲,可以試試并發(fā)。 如果不會(huì )多核多線(xiàn)程,可以試試。 讓代碼執行得更快
本節將以Main函數為分界線(xiàn),看Main函數前后的優(yōu)化方案; 然后介紹如何優(yōu)化Page In; 最后講解一些非常規的優(yōu)化方案,對架構的要求比較高。
主要之前
Main函數之前的啟動(dòng)過(guò)程如下:
動(dòng)態(tài)庫
減少動(dòng)態(tài)庫的數量可以減少在啟動(dòng)關(guān)閉時(shí)創(chuàng )建和加載動(dòng)態(tài)庫所花費的時(shí)間。 官方建議動(dòng)態(tài)庫數量小于6個(gè)。
推薦的方式是將動(dòng)態(tài)庫轉換為靜態(tài)庫,因為這樣可以額外減少包的大小。 另一種方式是合并動(dòng)態(tài)庫,但是在實(shí)踐中可操作性不是很高。 最后要提的是,不要鏈接那些你不使用的庫(包括系統),因為它會(huì )減慢閉包的創(chuàng )建速度。
離線(xiàn)代碼
離線(xiàn)代碼可以減少 Rebase & Bind & Runtime 初始化的耗時(shí)。 那么如何找到不用的代碼,然后下線(xiàn)呢? 分為靜態(tài)掃描和在線(xiàn)統計。
最簡(jiǎn)單的靜態(tài)掃描是基于A(yíng)ppCode,但是項目大后AppCode的索引速度很慢。 另一種靜態(tài)掃描是基于 Mach-O 的:
如果你把兩者區別一下就知道那些classes/sel沒(méi)有用到,但是objc是支持運行時(shí)調用的,刪除前需要確認兩次。
統計無(wú)用代碼的另一種方法是使用在線(xiàn)數據統計。 主流的解決方案有以下三種:
前兩種是ROI較高的解決方案,大部分時(shí)候Class級別的滲透率就足夠了。
+加載遷移
除了方法本身耗時(shí),+load也會(huì )造成大量的Page In,+load的存在也會(huì )影響App的穩定性,因為無(wú)法捕捉到crash。
比如很多DI容器需要給類(lèi)綁定協(xié)議,所以需要在啟動(dòng)的時(shí)候提前注冊(+load):
+?(void)load
{
????[DICenter?bindClass:IMPClass?toProtocol:@protocol(SomeProcotol)]
}
本質(zhì)上只要知道protocol和class的對應關(guān)系,使用clang屬性,這個(gè)過(guò)程就可以遷移到編譯期:
typedef?struct{
????const?char?*?cls;
????const?char?*?protocol;
}_di_pair;
#if?DEBUG
#define?DI_SERVICE(PROTOCOL_NAME,CLASS_NAME)\
__used?static?Class?_DI_VALID_METHOD(void){\
????return?[CLASS_NAME?class];\
}\
__attribute((used,?section(_DI_SEGMENT?","?_DI_SECTION?)))?static?_di_pair?_DI_UNIQUE_VAR?=?\
{\
_TO_STRING(CLASS_NAME),\
_TO_STRING(PROTOCOL_NAME),\
};\
#else
__attribute((used,?section(_DI_SEGMENT?","?_DI_SECTION?)))?static?_di_pair?_DI_UNIQUE_VAR?=?\
{\
_TO_STRING(CLASS_NAME),\
_TO_STRING(PROTOCOL_NAME),\
};\
#endif
原理很簡(jiǎn)單:宏提供接口,編譯時(shí)將類(lèi)名和協(xié)議名寫(xiě)入二進(jìn)制的指定段,運行時(shí)讀出關(guān)系就知道協(xié)議綁定在哪個(gè)類(lèi)上。
有同學(xué)會(huì )注意到有一個(gè)無(wú)用的方法_DI_VALID_METHOD,它只存在于debug模式下,目的是為了讓編譯器保證類(lèi)型安全。
靜態(tài)初始化遷移
靜態(tài)初始化,和+load方法一樣,也會(huì )造成大量的Page In,通常來(lái)自C++代碼,比如網(wǎng)絡(luò )或者特效庫。 另外,一些靜態(tài)初始化是通過(guò)頭文件引入的,可以通過(guò)預處理來(lái)確認。
幾種典型的遷移思路:
//Bad
namespace?{
????static?const?std::string?bucket[]?=?{"apples",?"pears",?"meerkats"};
}
const?std::string?GetBucketThing(int?i)?{
?????return?bucket[i];
}
//Good
std::string?GetBucketThing(int?i)?{
??static?const?std::string?bucket[]?=?{"apples",?"pears",?"meerkats"};
??return?bucket[i];
}
Main 之后的啟動(dòng)器
啟動(dòng)需要框架來(lái)控制,抖音采用輕量級的中心化方案:
啟動(dòng)任務(wù)的執行過(guò)程如下:
為什么需要啟動(dòng)器?
三方SDK
一些第三方SDK啟動(dòng)時(shí)間比較長(cháng),比如Fabric,抖音下線(xiàn)后抖音的啟動(dòng)速度快了70ms左右。
除了下線(xiàn),很多SDK都可以延遲,比如分享、登錄等。另外,在接入SDK之前,可以先評估一下對啟動(dòng)性能的影響。 如果影響較大,可以反饋給SDK提供商修改,尤其是付費SDK。 他們其實(shí)很愿意配合,做一些修改。
高頻法
有些方法單獨耗時(shí)不高,但在啟動(dòng)路徑上會(huì )被多次調用,累計起來(lái)耗時(shí)不低。 比如讀取Info.plist中的配置:
+?(NSString?*)plistChannel
{
????return?[[[NSBundle?mainBundle]?infoDictionary]?objectForKey:@"CHANNEL_NAME"];
}
修改的方式很簡(jiǎn)單,加一層內存緩存即可。 這種問(wèn)題在TimeProfiler中選擇時(shí)間段的時(shí)候經(jīng)??梢钥吹?。
鎖
鎖之所以影響啟動(dòng)時(shí)間,是因為有時(shí)候子線(xiàn)程先持有鎖,主線(xiàn)程需要等待子線(xiàn)程鎖釋放。 還要警惕系統會(huì )有很多隱藏的全局鎖,比如dyld和Runtime。 例如:

下圖是UIImage imageNamed造成的主線(xiàn)程阻塞:
從右邊的??梢钥闯?,imageNamed觸發(fā)dlopen,dlopen等待dyld的全局鎖。 通過(guò)System Trace的Thread State Event,可以找到線(xiàn)程被阻塞的下一個(gè)事件。 此事件表明該線(xiàn)程可以再次運行,因為其他線(xiàn)程已經(jīng)釋放了鎖:
接下來(lái)通過(guò)分析此時(shí)后臺線(xiàn)程在做什么,就會(huì )知道為什么會(huì )持有鎖,以及如何優(yōu)化。
線(xiàn)程數
線(xiàn)程的數量和優(yōu)先級都會(huì )影響啟動(dòng)時(shí)間。 您可以通過(guò)設置 QoS 來(lái)配置優(yōu)先級。 兩個(gè)高質(zhì)量的 QoS 是用戶(hù)交互的/發(fā)起的。 啟動(dòng)時(shí)需要主線(xiàn)程等待的子線(xiàn)程任務(wù)要設置為高質(zhì)量。
優(yōu)質(zhì)線(xiàn)程的數量不應超過(guò) CPU 內核的數量。 您可以通過(guò)System Trace 的System Load 來(lái)分析這種情況。
/GCD
dispatch_queue_attr_t?attr?=?dispatch_queue_attr_make_with_qos_class(DISPATCH_QUEUE_SERIAL,?QOS_CLASS_UTILITY,?-1);
dispatch_queue_t?queue?=?dispatch_queue_create("com.custom.utility.queue",?attr);
//NSOperationQueue
operationQueue.qualityOfService?=?NSQualityOfServiceUtility
線(xiàn)程數也會(huì )影響啟動(dòng)時(shí)間,但在iOS中全局控制線(xiàn)程并不容易。 比如二/三方庫的后臺線(xiàn)程不好控制,但是業(yè)務(wù)線(xiàn)程可以通過(guò)啟動(dòng)任務(wù)來(lái)控制。
線(xiàn)程多沒(méi)關(guān)系,只要同時(shí)執行的并發(fā)不多,可以通過(guò)System Trace查看上下文切換耗時(shí),確認線(xiàn)程數是否是啟動(dòng)瓶頸.
圖片
難免會(huì )用到很多圖片來(lái)啟動(dòng)。 有什么辦法可以?xún)?yōu)化圖片加載的耗時(shí)嗎?
使用 Asset 管理圖像,而不是直接將它們放在 bundle 中。 資產(chǎn)將在編譯期間進(jìn)行優(yōu)化,以加快加載速度。 另外在A(yíng)sset中加載圖片比Bundle更快,因為UIImage imageNamed需要遍歷Bundle來(lái)尋找圖片。 Asset中加載圖片的耗時(shí)主要在第一張圖片,因為需要建立索引,這部分耗時(shí)可以通過(guò)將啟動(dòng)的圖片放到一個(gè)小的Asset中來(lái)減少。
每次創(chuàng )建一個(gè)UIImage,都需要IO,在渲染第一幀的時(shí)候解碼。 所以這個(gè)耗時(shí)的部分可以通過(guò)在子線(xiàn)程之前預加載(創(chuàng )建UIImage)來(lái)優(yōu)化。
如下圖所示,圖像只會(huì )在后期的“RootWindow Creation”和“First Frame Rendering”中使用,所以可以在啟動(dòng)前期啟動(dòng)預加載的子線(xiàn)程來(lái)啟動(dòng)任務(wù)。
魚(yú)鉤
fishhook是一個(gè)用來(lái)hook C函數的庫,但是第一次調用這個(gè)庫比較耗時(shí),所以最好不要帶上線(xiàn)。 Fishhook如下圖遍歷Mach-O的多個(gè)段,找到函數指針和函數符號名的映射關(guān)系。 副作用是需要大量的Page Ins。 對于大型應用,在 iPhone X 上啟動(dòng)冷啟動(dòng)需要時(shí)間 200ms+。
如果一定要使用fishhook,請在子線(xiàn)程中調用,不要直接在_dyld_register_func_for_add_image中調用fishhook。 因為這個(gè)方法會(huì )持有一個(gè)dyld的全局互斥量,系統庫經(jīng)常在主線(xiàn)程啟動(dòng)時(shí)調用dlsym和dlopen,內部也需要這個(gè)鎖,導致上述子線(xiàn)程阻塞主線(xiàn)程。
第一幀渲染
不同的APP有不同的業(yè)務(wù)形態(tài),首幀渲染優(yōu)化方式也大不相同。 幾個(gè)常見(jiàn)的優(yōu)化點(diǎn):
其他提示
啟動(dòng)優(yōu)化有一些需要注意的tips:
不要刪除tmp/com.apple.dyld目錄,因為iOS 13+的啟動(dòng)閉包存放在該目錄下。 如果刪除了,下次啟動(dòng)時(shí)會(huì )重新創(chuàng )建。 創(chuàng )建閉包的過(guò)程非常緩慢。 接下來(lái)是IO優(yōu)化。 一種常見(jiàn)的方式是使用mmap來(lái)使IO更快,也可以在啟動(dòng)的早期預加載數據。
還有一些點(diǎn)在iPhone 6上耗時(shí)會(huì )明顯增加:
iPhone 6是一個(gè)分水嶺,性能會(huì )跌落懸崖,你可以在iPhone 6上降低部分用戶(hù)交互來(lái)?yè)Q取核心體驗(切記AB驗證)。
Page In耗時(shí)
啟動(dòng)路徑上會(huì )觸發(fā)大量Page Ins。 有沒(méi)有辦法優(yōu)化這部分耗時(shí)?
部分重命名
App Store 會(huì )對上傳的 App 的 TEXT 部分進(jìn)行加密,并在 Page In 發(fā)生時(shí)對其進(jìn)行解密。 解密過(guò)程非常耗時(shí)。 由于TEXT部分會(huì )被加密,直接的思路就是將TEXT部分的內容移動(dòng)到其他部分。 ld還有一個(gè)參數rename_section來(lái)支持重命名:
抖音更名方案:
"-Wl,-rename_section,__TEXT,__cstring,__RODATA,__cstring",
"-Wl,-rename_section,__TEXT,__const,__RODATA,__const",
"-Wl,-rename_section,__TEXT,__gcc_except_tab,__RODATA,__gcc_except_tab",
"-Wl,-rename_section,__TEXT,__objc_methname,__RODATA,__objc_methname",
"-Wl,-rename_section,__TEXT,__objc_classname,__RODATA,__objc_classname",
"-Wl,-rename_section,__TEXT,__objc_methtype,__RODATA,__objc_methtype"
這種優(yōu)化方式在iOS 13下是有效的,因為iOS 13優(yōu)化了解密過(guò)程,Page In在的時(shí)候不需要解密,這也是iOS 13啟動(dòng)速度更快的原因之一。
二元重排
由于在啟動(dòng)路徑上會(huì )觸發(fā)大量的Page Ins,請問(wèn)有什么辦法可以?xún)?yōu)化嗎?
啟動(dòng)具有局部性的特點(diǎn),即啟動(dòng)時(shí)只用到少量函數,而且這些函數分布比較分散,因此Page In讀取的數據利用率不高。 如果我們可以將用于啟動(dòng)的函數安排成連續的二進(jìn)制區間,那么我們就可以減少Page In的數量,從而優(yōu)化啟動(dòng)時(shí)間:
以下圖為例。 啟動(dòng)時(shí)使用方法一和方法三。 為了執行相應的代碼,需要兩次 Page Ins。 如果我們把方法一和方法三放在一起,那么只需要一次Page In,從而提高了啟動(dòng)速度。
鏈接器 ld 有一個(gè)參數 -order_file 支持根據符號排列二進(jìn)制文件。 啟動(dòng)時(shí)使用的主流符號有兩種獲取方式:
Facebook的LLVM function instrumentation是為order_file定制的,代碼也是他們?yōu)長(cháng)LVM開(kāi)發(fā)的,已經(jīng)合并到LLVM的主分支中。
Facebook的方案更精細,生成的order_file是最優(yōu)方案,但工作量巨大。 抖音的方案不需要源碼編譯,不需要修改現有的編譯環(huán)境和流程,侵入性最小。 缺點(diǎn)是只能覆蓋90%左右的符號。
- 灰度是任何優(yōu)化的好階段,因為很多新的優(yōu)化方案都存在不確定性,需要先在灰度上進(jìn)行驗證。
非常規方案動(dòng)態(tài)庫懶加載
一開(kāi)始我們提到可以通過(guò)刪除代碼來(lái)減少代碼量,那么有沒(méi)有什么辦法可以在不減少代碼總量的情況下減少啟動(dòng)時(shí)加載的代碼量呢?
什么是懶加載動(dòng)態(tài)庫? 普通的動(dòng)態(tài)庫直接或間接地由主二進(jìn)制文件鏈接,因此這些動(dòng)態(tài)庫將在啟動(dòng)時(shí)加載。 如果只是打包進(jìn)App,不參與鏈接,那么啟動(dòng)時(shí)不會(huì )自動(dòng)加載。 當運行時(shí)需要動(dòng)態(tài)庫中的內容時(shí),會(huì )手動(dòng)延遲加載。
動(dòng)態(tài)庫的延遲加載在編譯時(shí)和運行時(shí)都需要修改。 編譯時(shí)的架構:
像 A.framework 這樣的動(dòng)態(tài)庫是延遲加載的,因為它們不參與主二進(jìn)制文件的直接或間接鏈接。 動(dòng)態(tài)庫之間必然存在一些共同的依賴(lài)關(guān)系,將這些依賴(lài)關(guān)系打包成Shared.framework來(lái)解決公共依賴(lài)關(guān)系的問(wèn)題。
運行時(shí)由-[NSBundle load]加載,本質(zhì)上是調用底層的dlopen。 那么什么時(shí)候觸發(fā)手動(dòng)加載動(dòng)態(tài)庫呢?
動(dòng)態(tài)庫可以分為業(yè)務(wù)類(lèi)和函數類(lèi)兩種。 業(yè)務(wù)是UI的入口,動(dòng)態(tài)庫加載的邏輯可以匯聚到路由內部,讓外部實(shí)際上不知道動(dòng)態(tài)庫是懶加載的,可以更好的斷層——寬容。 函數庫(比如上圖中的QR.framework)會(huì )有點(diǎn)不同,因為沒(méi)有UI等入口,函數庫需要自己維護Wrapper:
動(dòng)態(tài)庫懶加載除了減少啟動(dòng)加載的代碼外,還可以防止業(yè)務(wù)長(cháng)時(shí)間添加代碼導致的啟動(dòng)降級,因為業(yè)務(wù)在第一次訪(fǎng)問(wèn)時(shí)就完成了初始化。
該解決方案還有其他優(yōu)點(diǎn)。 比如動(dòng)態(tài)庫轉換后本地編譯時(shí)間會(huì )大大減少,對其他性能指標也有好處。 缺點(diǎn)是會(huì )犧牲一定的包體積,但是懶加載的動(dòng)態(tài)庫可以通過(guò)分段壓縮等方式進(jìn)行優(yōu)化。 來(lái)平衡這部分損失。
后臺獲取
Background Fetch 可以定時(shí)在后臺啟動(dòng)應用,對時(shí)間敏感的應用(比如新聞)在后臺刷新數據,可以提高提要加載速度,提升用戶(hù)體驗。
那么,為什么這種“后臺?;睢睓C制能夠提高啟動(dòng)速度呢? 我們來(lái)看一個(gè)典型案例:
系統在后臺啟動(dòng)應用程序需要很長(cháng)時(shí)間。 因為內存等原因,后臺App被kill了。 此時(shí),用戶(hù)立即啟動(dòng)App。 那么這個(gè)啟動(dòng)就是熱啟動(dòng),因為緩存還在。 另一次系統在后臺啟動(dòng)應用程序。 這個(gè)時(shí)候用戶(hù)在A(yíng)pp在后臺的時(shí)候點(diǎn)擊App,那么這個(gè)啟動(dòng)就是后臺回到前臺,因為App還活著(zhù)
通過(guò)這兩個(gè)典型場(chǎng)景,我們可以看出為什么Background Fetch可以提高啟動(dòng)速度:
啟動(dòng)后臺有一些需要注意的地方,比如日?;顒?dòng),廣告,甚至AB組入口的邏輯都會(huì )受到影響,需要大量的適配。 經(jīng)常需要launcher來(lái)支持,因為didFinishLaunch中執行的task在后臺啟動(dòng)時(shí)需要延遲到第一次回到前臺才正常啟動(dòng)。
總結
最后,提取了我們認為在任何優(yōu)化中都很重要的幾點(diǎn):
加入我們
我們是負責抖音客戶(hù)端基礎能力研發(fā)和新技術(shù)探索的團隊。 我們深耕工程/業(yè)務(wù)架構、研發(fā)工具、編譯系統等,支持業(yè)務(wù)快速迭代,同時(shí)保證超大規模團隊的研發(fā)效率和工程質(zhì)量。 在性能/穩定性等方面不斷探索,力求為全球億萬(wàn)用戶(hù)提供最極致的基礎體驗。
如果你熱愛(ài)技術(shù),歡迎加入抖音基礎技術(shù)團隊,讓我們一起打造億級國民APP。 目前我們在上海、北京、杭州、深圳都有招聘需求。 內推可以聯(lián)系郵箱:,郵件標題:姓名-工作年限-抖音-基礎技術(shù)抖音 /Android。
歡迎關(guān)注“字節跳動(dòng)技術(shù)團隊”
簡(jiǎn)歷投遞聯(lián)系郵箱:“ ”
分享文章:文章自動(dòng)采集
采集交流 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 144 次瀏覽 ? 2022-12-20 03:28
文章自動(dòng)采集,文章自動(dòng)采集怎么做,文章自動(dòng)采集發(fā)布
文章自動(dòng)采集Discuz應用中心搜索“csdn123”神秘人物,下載采集插件成功后,開(kāi)啟自動(dòng)采集并發(fā)布內容。
使用百度的discuz結構化數據插件。 可以有效提高收錄效率,但主要還是要看你網(wǎng)站的優(yōu)化效果。
時(shí)代互聯(lián)為您解答
文章自動(dòng)采集wordpress采集采集文章文章
全網(wǎng)熱點(diǎn)話(huà)題:
1樓文章自動(dòng)采集軟件:可自動(dòng)采集大量關(guān)鍵詞 3可設置項采集特定網(wǎng)站頻道目錄下的所有文章內容(如simple,貼吧百度),系統智能匹配,無(wú)需要寫(xiě)復雜
2樓文章自動(dòng)采集采集器:文章內容自動(dòng)采集和發(fā)布內容經(jīng)歷了數月的搏擊,文章內容自動(dòng)采集和文章內容自動(dòng)發(fā)布已經(jīng)上線(xiàn),簡(jiǎn)單易用的操作面板,
3樓自動(dòng)采集生成文章:在采集過(guò)程中,會(huì )自動(dòng)生成一個(gè)目錄。 微信采集完成后,將采集采集的內容存放在weixin目錄下的微信公眾號中。 文章標題目錄內容為圖片和txt文件。 下載地址:
4樓自動(dòng)文章采集器:抖音采集軟件在之前的文章中也提到過(guò)。 這個(gè)神器在很多項目中都有使用。 今天給大家詳細介紹兩款抖音軟件! 兩個(gè)軟件都是同一個(gè)作者開(kāi)發(fā)的
即將到來(lái)的假期:11 月的萬(wàn)圣節! 再忙也要善待自己!
文章自動(dòng)采集!
直觀(guān):如何采集靜態(tài)文章系統
結束功能
函數 getbody(url)
下一個(gè)錯誤恢復
設置檢索 = createobject("microsoft.xmlhttp")
帶檢索
.open "get", url, false, "", ""
。發(fā)送
getbody = .responsebody
結束于
設置檢索 = 無(wú)
結束功能
函數 bytetestobstr(正文,cset)
昏暗的對象流
設置 objstream = server.createobject("adodb.stream")
objstream.type = 1
objstream.mode=3
對象流.open
objstream.write 正文
objstream.position = 0
objstream.type = 2
objstream.charset = cset
bytesobstr = 對象流。 閱讀文本
對象流。 關(guān)
設置 objstream = 無(wú)
結束功能
那我們先寫(xiě)個(gè)最簡(jiǎn)單的程序,一步步教你,(呵呵,廢話(huà)太多*.*)
將以上代碼命名為 get.asp
另一個(gè)頁(yè)面代碼稱(chēng)為 getfilename.asp。 代碼如下:
呵呵,getfilename.asp就完成了,當然這是最簡(jiǎn)單的copy,我們還得一步步修改完善,
當你走到代碼最遠的地方時(shí),你會(huì )看到一個(gè)與那個(gè)頁(yè)面基本相同的頁(yè)面。 當然有些圖片是不能顯示的!
然后我們分析這個(gè)頁(yè)面,首頁(yè),右鍵,查看源代碼找到這一行
知名度
當然,我們不要那么多,人氣就夠了,但是為了保險起見(jiàn),還是要多點(diǎn),
這是那些文件標題開(kāi)始的地方,然后我們找到它們結束的地方,
頁(yè)數
哦,我找到了這些代碼,多多少少都可以,我們的代碼需要一步步完善,
然后我們把getfilename.asp改成
再次運行此文件并查看,
你會(huì )發(fā)現少了很多東西,哦,簡(jiǎn)單多了,那么,我們再找規律,在同一個(gè)頁(yè)面查看源碼,
然后你會(huì )發(fā)現每個(gè)item都是由一個(gè)label組成的,這樣就好辦多了,
djmore=分裂(dj1,“”)
記住,仔細看,你會(huì )發(fā)現更多,
然后去掉前兩個(gè),就變成這樣了
讓我們循環(huán)
捆
response.write dj1 替換為
djmore=分裂(dj1,“”)
對于 i=1 到 ubound(djmore)-2
響應.write djmore(i)
下一個(gè)
這會(huì )將每一行分成以下內容
CSS語(yǔ)法手冊(一)字體屬性
2005-7-21
現在分析這段就容易多了,
讓我們?yōu)?djmore(i) 數組中的項目編寫(xiě)代碼,
l3=instr(djmore(i), "l4=instr(l3,djmore(i), """ target=""_blank""")
url=mid(djmore(i),l3,l4-l3)
響應。寫(xiě) url &"
“
為了方便寫(xiě)在這??里,
將以上段落替換為上一段
響應.write djmore(i)
在這里添加
是用來(lái)?yè)Q行的,比較好看,然后你看url好像多了點(diǎn)東西,所以我們要做一些處理,把
url=mid(djmore(i),l3,l4-l3) 變成
url=mid(djmore(i),l3+len("哦,沒(méi)問(wèn)題,再次運行時(shí)會(huì )留下地址,
哦對了,這只是針對每個(gè)頁(yè)面,如果你想要所有的,你只需要修改它 查看全部
分享文章:文章自動(dòng)采集
文章自動(dòng)采集,文章自動(dòng)采集怎么做,文章自動(dòng)采集發(fā)布
文章自動(dòng)采集Discuz應用中心搜索“csdn123”神秘人物,下載采集插件成功后,開(kāi)啟自動(dòng)采集并發(fā)布內容。
使用百度的discuz結構化數據插件。 可以有效提高收錄效率,但主要還是要看你網(wǎng)站的優(yōu)化效果。

時(shí)代互聯(lián)為您解答
文章自動(dòng)采集wordpress采集采集文章文章
全網(wǎng)熱點(diǎn)話(huà)題:
1樓文章自動(dòng)采集軟件:可自動(dòng)采集大量關(guān)鍵詞 3可設置項采集特定網(wǎng)站頻道目錄下的所有文章內容(如simple,貼吧百度),系統智能匹配,無(wú)需要寫(xiě)復雜

2樓文章自動(dòng)采集采集器:文章內容自動(dòng)采集和發(fā)布內容經(jīng)歷了數月的搏擊,文章內容自動(dòng)采集和文章內容自動(dòng)發(fā)布已經(jīng)上線(xiàn),簡(jiǎn)單易用的操作面板,
3樓自動(dòng)采集生成文章:在采集過(guò)程中,會(huì )自動(dòng)生成一個(gè)目錄。 微信采集完成后,將采集采集的內容存放在weixin目錄下的微信公眾號中。 文章標題目錄內容為圖片和txt文件。 下載地址:
4樓自動(dòng)文章采集器:抖音采集軟件在之前的文章中也提到過(guò)。 這個(gè)神器在很多項目中都有使用。 今天給大家詳細介紹兩款抖音軟件! 兩個(gè)軟件都是同一個(gè)作者開(kāi)發(fā)的
即將到來(lái)的假期:11 月的萬(wàn)圣節! 再忙也要善待自己!
文章自動(dòng)采集!
直觀(guān):如何采集靜態(tài)文章系統
結束功能
函數 getbody(url)
下一個(gè)錯誤恢復
設置檢索 = createobject("microsoft.xmlhttp")
帶檢索
.open "get", url, false, "", ""
。發(fā)送
getbody = .responsebody
結束于
設置檢索 = 無(wú)
結束功能
函數 bytetestobstr(正文,cset)
昏暗的對象流
設置 objstream = server.createobject("adodb.stream")
objstream.type = 1
objstream.mode=3
對象流.open
objstream.write 正文
objstream.position = 0
objstream.type = 2
objstream.charset = cset
bytesobstr = 對象流。 閱讀文本

對象流。 關(guān)
設置 objstream = 無(wú)
結束功能
那我們先寫(xiě)個(gè)最簡(jiǎn)單的程序,一步步教你,(呵呵,廢話(huà)太多*.*)
將以上代碼命名為 get.asp
另一個(gè)頁(yè)面代碼稱(chēng)為 getfilename.asp。 代碼如下:
呵呵,getfilename.asp就完成了,當然這是最簡(jiǎn)單的copy,我們還得一步步修改完善,
當你走到代碼最遠的地方時(shí),你會(huì )看到一個(gè)與那個(gè)頁(yè)面基本相同的頁(yè)面。 當然有些圖片是不能顯示的!
然后我們分析這個(gè)頁(yè)面,首頁(yè),右鍵,查看源代碼找到這一行
知名度
當然,我們不要那么多,人氣就夠了,但是為了保險起見(jiàn),還是要多點(diǎn),
這是那些文件標題開(kāi)始的地方,然后我們找到它們結束的地方,
頁(yè)數
哦,我找到了這些代碼,多多少少都可以,我們的代碼需要一步步完善,
然后我們把getfilename.asp改成
再次運行此文件并查看,
你會(huì )發(fā)現少了很多東西,哦,簡(jiǎn)單多了,那么,我們再找規律,在同一個(gè)頁(yè)面查看源碼,
然后你會(huì )發(fā)現每個(gè)item都是由一個(gè)label組成的,這樣就好辦多了,
djmore=分裂(dj1,“”)
記住,仔細看,你會(huì )發(fā)現更多,
然后去掉前兩個(gè),就變成這樣了
讓我們循環(huán)
捆

response.write dj1 替換為
djmore=分裂(dj1,“”)
對于 i=1 到 ubound(djmore)-2
響應.write djmore(i)
下一個(gè)
這會(huì )將每一行分成以下內容
CSS語(yǔ)法手冊(一)字體屬性
2005-7-21
現在分析這段就容易多了,
讓我們?yōu)?djmore(i) 數組中的項目編寫(xiě)代碼,
l3=instr(djmore(i), "l4=instr(l3,djmore(i), """ target=""_blank""")
url=mid(djmore(i),l3,l4-l3)
響應。寫(xiě) url &"
“
為了方便寫(xiě)在這??里,
將以上段落替換為上一段
響應.write djmore(i)
在這里添加
是用來(lái)?yè)Q行的,比較好看,然后你看url好像多了點(diǎn)東西,所以我們要做一些處理,把
url=mid(djmore(i),l3,l4-l3) 變成
url=mid(djmore(i),l3+len("哦,沒(méi)問(wèn)題,再次運行時(shí)會(huì )留下地址,
哦對了,這只是針對每個(gè)頁(yè)面,如果你想要所有的,你只需要修改它
官方數據:如何運用大數據,實(shí)現輿情監測?
采集交流 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 90 次瀏覽 ? 2022-12-16 03:37
隨著(zhù)移動(dòng)互聯(lián)網(wǎng)的快速發(fā)展,人類(lèi)已經(jīng)進(jìn)入了大數據時(shí)代。我們每天都在不知不覺(jué)中接觸到無(wú)數或真或假的信息,這讓我們無(wú)法辨別真假,有時(shí)也很容易受到輿論的影響?,F在政府、機構和企業(yè)都開(kāi)始關(guān)注輿論,知道負面輿論帶來(lái)的危害是巨大的。但在當今信息量巨大、傳播迅速的大數據時(shí)代,簡(jiǎn)單的操作已經(jīng)不能滿(mǎn)足網(wǎng)絡(luò )輿情的爆發(fā),那么如何利用大數據實(shí)施輿情監測呢?
1、如何利用大數據實(shí)施輿情監測?
1.將大數據與日常輿情管理緊密結合,提高網(wǎng)絡(luò )輿情整體管控水平。需要利用大數據突破傳統輿情管理的狹窄視野,建立網(wǎng)絡(luò )輿情大數據監測系統,采集網(wǎng)站等各網(wǎng)絡(luò )平臺的實(shí)時(shí)數據、博客、微博、微信、論壇等,全面分析輿情傳播動(dòng)態(tài)。
2.將大數據與輿論引導緊密結合,提高號召力和說(shuō)服力。大數據時(shí)代的輿論引導,一方面要“跟數”,通過(guò)對網(wǎng)絡(luò )數據的分析,把握網(wǎng)民的輿論傾向,了解網(wǎng)民的喜??好和特點(diǎn)。另一方面,我們要“用數據說(shuō)話(huà)”。數據最有說(shuō)服力。在充分采集相關(guān)數據的基礎上,運用圖表等數據可視化技術(shù),全面呈現事件的來(lái)龍去脈,讓網(wǎng)民不僅了解事件的真相,更了解事件的背景和來(lái)龍去脈。事發(fā),把握網(wǎng)友情緒。的角度來(lái)處理問(wèn)題。
3.將大數據與網(wǎng)上政府信息公開(kāi)緊密結合,提升政府公信力。目前,美國政府建立了統一的開(kāi)放數據門(mén)戶(hù)網(wǎng)站,并為社會(huì )各界提供接口,開(kāi)發(fā)應用程序以使用各部門(mén)的數據。一種新的政府信息公開(kāi)方式。要在保障數據安全的基礎上,探索建立我國大數據政務(wù)公開(kāi)制度,引導社會(huì )力量參與公共數據的挖掘和利用,實(shí)現數據價(jià)值最大化。
2. 下面舉例說(shuō)明如何實(shí)現基于網(wǎng)絡(luò )大數據的輿情監測
本文以2019年9月9日“港榮蒸糕丙二醇超標”輿論事件為例。通過(guò)對賽事新聞、博客、微博、微信、論壇等互聯(lián)網(wǎng)數據的持續監測和采集,多維度、全方位展現信息變化,以及輿情的具體實(shí)施過(guò)程開(kāi)展基于網(wǎng)絡(luò )大數據的監測。討論。
1、輿情發(fā)展趨勢監測分析
發(fā)展趨勢監測是從網(wǎng)絡(luò )數據來(lái)源、事件輿情數量和時(shí)間三個(gè)維度進(jìn)行趨勢分析。該分析結果可以直觀(guān)地展示各大網(wǎng)絡(luò )媒體的輿情傳播情況。
如圖1所示,輿情信息在2019年9月9日達到最大值。2019年9月8日00:00至2019年9月10日14:00期間,采集共23169條在網(wǎng)絡(luò )上收到的輿情信息中,微博平臺的傳播量最大,相關(guān)信息最多達4320條。新浪微博和微信成為此次事件的主要媒體。
2. 輿情和情緒趨勢監測分析
輿情情緒趨勢分析是通過(guò)對與輿情相關(guān)的網(wǎng)絡(luò )文本進(jìn)行情緒分析,全面了解公眾對輿論的態(tài)度。如圖2所示,在輿情事件的發(fā)展過(guò)程中,敏感信息占整個(gè)輿情的62.67%。
3、傳播途徑監測分析
傳播渠道分析是對輿情傳播方向、數量和范圍的直觀(guān)分析。對傳播渠道的監測和分析,可以幫助管理者更直觀(guān)地了解整個(gè)輿情事件的傳播路徑和事態(tài)的演變過(guò)程,尤其是輿論從哪里產(chǎn)生,從哪里發(fā)展。有跡可循,如圖3所示,層數越多,傳播范圍越廣。
4. 輿情媒體數量監測分析
輿情媒體數量監測分析是對主要參與輿論的媒體發(fā)布的輿情數量進(jìn)行監測分析。如圖4所示,在網(wǎng)絡(luò )媒體、論壇、微博、微信等媒體報道的采集的23169條網(wǎng)絡(luò )文本中,微博文本占比92.38%,占所有媒體文本的92.38%。最高。造成這樣結果的主要原因是活動(dòng)本身是在微博平臺發(fā)起的,而微博平臺有非常方便的媒體轉發(fā)功能。此外,大數據平臺擁有微博數據全量授權,讓數據挖掘更加全面準確。
網(wǎng)絡(luò )逐漸成為公眾參與輿論的第一渠道。在萬(wàn)物互聯(lián)的數據時(shí)代,加強網(wǎng)絡(luò )輿情監測和引導,對于維護國家穩定、促進(jìn)企業(yè)可持續發(fā)展具有重要的現實(shí)意義。此次香港榮正品牌被曝丙二醇超標,同樣是no zuo no die。想要不被卷入輿論的漩渦,除了使用大數據輿情監測系統等監測軟件為自己保駕護航外,還需要保證自己產(chǎn)品和服務(wù)的質(zhì)量。
解決方案:搜狗推送工具之搜狗百萬(wàn)蜘蛛實(shí)現
最近有很多站長(cháng)問(wèn)我搜狗推送工具好用嗎?可以分批推送嗎?送貨方式有哪些?搜狗 收錄 是怎么做到的?搜狗潘收錄應該做什么?搜狗的百萬(wàn)蜘蛛是如何實(shí)現的?今天,筆者就對這些問(wèn)題進(jìn)行統一的解答。
首先,搜狗推送工具肯定好用。搜狗官方是這么說(shuō)的:“為了鼓勵搜狗蜘蛛更快地發(fā)現你的站點(diǎn),你也可以通過(guò)網(wǎng)站收錄接口提交頁(yè)面申請收錄。提交后,搜狗搜索引擎會(huì )按照標準,為了提高處理效率,請不要重復提交同一個(gè)鏈接。沒(méi)用的,為什么要開(kāi)這樣的提交入口,一定有用,不然豈不是浪費資源?
搜狗提供了幾種提交方式?為了驗證站點(diǎn)推送,每個(gè)子域綁定的配額增加200,1000個(gè)子域相當于每天20萬(wàn)個(gè)推送配額。站后推送 2、非鑒權提交。單賬號單域名每天推送200條。如果需要大量推送,則需要大量的賬號。3.站點(diǎn)地圖推送。只有網(wǎng)站有這個(gè)站點(diǎn)地圖權限部分的權限,90%的網(wǎng)站沒(méi)有這個(gè)權限。
為了我們網(wǎng)站能夠盡快被搜狗蜘蛛和搜狗收錄找到,我們不得不不斷地向搜狗站長(cháng)平臺提交鏈接,讓蜘蛛來(lái)抓。為了提高效率,我們使用了搜狗的active批量推送工具,可以讓網(wǎng)站的所有鏈接在沒(méi)有vps的情況下自動(dòng)批量推送,工具自動(dòng)編碼。每天可提交數萬(wàn)個(gè)URL,支持24小時(shí)掛機,無(wú)人值守,長(cháng)期穩定。
怎樣才能用搜狗推送工具做好搜狗收錄呢?
選擇一個(gè)舊域名。為什么選擇搜狗老域名,因為老域名的頁(yè)面評分更高,網(wǎng)站容易被搜狗搜索到!
搜狗排名算法。是搜狗官方衡量網(wǎng)頁(yè)重要性的指標。它不僅考察網(wǎng)頁(yè)之間的鏈接關(guān)系,還考察鏈接質(zhì)量、鏈接之間的相關(guān)性等各種特征。由機器根據sogou Rank算法自動(dòng)計算,數值從0開(kāi)始,范圍從10級到10級。頁(yè)面排名越高,該頁(yè)面被搜索到的可能性就越大。搜狗的老域名有自己的評級,所以很快就被搜狗找回了,這也是為什么那么多人用老域名的原因!
網(wǎng)站源代碼程序選擇。網(wǎng)站源程序優(yōu)先選擇靜態(tài)網(wǎng)頁(yè),搜狗更偏愛(ài)靜態(tài)網(wǎng)頁(yè)!. 網(wǎng)站 程序具有清晰的導航和層次結構。網(wǎng)站重要的網(wǎng)頁(yè)應該從網(wǎng)站一級欄目位置開(kāi)始查找,確保每個(gè)網(wǎng)站頁(yè)面都可以通過(guò)文本鏈接被抓取。網(wǎng)站所在服務(wù)器不穩定。搜狗蜘蛛在抓取網(wǎng)站時(shí),會(huì )清除已經(jīng)被收錄的網(wǎng)站頁(yè)面。
網(wǎng)站內容。網(wǎng)站無(wú)論內容是原創(chuàng )還是偽原創(chuàng ),只要搜狗搜索引擎認為是原創(chuàng )文章文章即可!
今天關(guān)于搜狗推送工具的分享就到這里了。下次我會(huì )分享更多實(shí)用的SEO知識。我希望這個(gè) 文章 可以幫助您完成網(wǎng)站建設之旅。下次見(jiàn)!喜歡這個(gè)文章的朋友不妨點(diǎn)三下??! 查看全部
官方數據:如何運用大數據,實(shí)現輿情監測?
隨著(zhù)移動(dòng)互聯(lián)網(wǎng)的快速發(fā)展,人類(lèi)已經(jīng)進(jìn)入了大數據時(shí)代。我們每天都在不知不覺(jué)中接觸到無(wú)數或真或假的信息,這讓我們無(wú)法辨別真假,有時(shí)也很容易受到輿論的影響?,F在政府、機構和企業(yè)都開(kāi)始關(guān)注輿論,知道負面輿論帶來(lái)的危害是巨大的。但在當今信息量巨大、傳播迅速的大數據時(shí)代,簡(jiǎn)單的操作已經(jīng)不能滿(mǎn)足網(wǎng)絡(luò )輿情的爆發(fā),那么如何利用大數據實(shí)施輿情監測呢?
1、如何利用大數據實(shí)施輿情監測?
1.將大數據與日常輿情管理緊密結合,提高網(wǎng)絡(luò )輿情整體管控水平。需要利用大數據突破傳統輿情管理的狹窄視野,建立網(wǎng)絡(luò )輿情大數據監測系統,采集網(wǎng)站等各網(wǎng)絡(luò )平臺的實(shí)時(shí)數據、博客、微博、微信、論壇等,全面分析輿情傳播動(dòng)態(tài)。
2.將大數據與輿論引導緊密結合,提高號召力和說(shuō)服力。大數據時(shí)代的輿論引導,一方面要“跟數”,通過(guò)對網(wǎng)絡(luò )數據的分析,把握網(wǎng)民的輿論傾向,了解網(wǎng)民的喜??好和特點(diǎn)。另一方面,我們要“用數據說(shuō)話(huà)”。數據最有說(shuō)服力。在充分采集相關(guān)數據的基礎上,運用圖表等數據可視化技術(shù),全面呈現事件的來(lái)龍去脈,讓網(wǎng)民不僅了解事件的真相,更了解事件的背景和來(lái)龍去脈。事發(fā),把握網(wǎng)友情緒。的角度來(lái)處理問(wèn)題。
3.將大數據與網(wǎng)上政府信息公開(kāi)緊密結合,提升政府公信力。目前,美國政府建立了統一的開(kāi)放數據門(mén)戶(hù)網(wǎng)站,并為社會(huì )各界提供接口,開(kāi)發(fā)應用程序以使用各部門(mén)的數據。一種新的政府信息公開(kāi)方式。要在保障數據安全的基礎上,探索建立我國大數據政務(wù)公開(kāi)制度,引導社會(huì )力量參與公共數據的挖掘和利用,實(shí)現數據價(jià)值最大化。

2. 下面舉例說(shuō)明如何實(shí)現基于網(wǎng)絡(luò )大數據的輿情監測
本文以2019年9月9日“港榮蒸糕丙二醇超標”輿論事件為例。通過(guò)對賽事新聞、博客、微博、微信、論壇等互聯(lián)網(wǎng)數據的持續監測和采集,多維度、全方位展現信息變化,以及輿情的具體實(shí)施過(guò)程開(kāi)展基于網(wǎng)絡(luò )大數據的監測。討論。
1、輿情發(fā)展趨勢監測分析
發(fā)展趨勢監測是從網(wǎng)絡(luò )數據來(lái)源、事件輿情數量和時(shí)間三個(gè)維度進(jìn)行趨勢分析。該分析結果可以直觀(guān)地展示各大網(wǎng)絡(luò )媒體的輿情傳播情況。
如圖1所示,輿情信息在2019年9月9日達到最大值。2019年9月8日00:00至2019年9月10日14:00期間,采集共23169條在網(wǎng)絡(luò )上收到的輿情信息中,微博平臺的傳播量最大,相關(guān)信息最多達4320條。新浪微博和微信成為此次事件的主要媒體。
2. 輿情和情緒趨勢監測分析
輿情情緒趨勢分析是通過(guò)對與輿情相關(guān)的網(wǎng)絡(luò )文本進(jìn)行情緒分析,全面了解公眾對輿論的態(tài)度。如圖2所示,在輿情事件的發(fā)展過(guò)程中,敏感信息占整個(gè)輿情的62.67%。

3、傳播途徑監測分析
傳播渠道分析是對輿情傳播方向、數量和范圍的直觀(guān)分析。對傳播渠道的監測和分析,可以幫助管理者更直觀(guān)地了解整個(gè)輿情事件的傳播路徑和事態(tài)的演變過(guò)程,尤其是輿論從哪里產(chǎn)生,從哪里發(fā)展。有跡可循,如圖3所示,層數越多,傳播范圍越廣。
4. 輿情媒體數量監測分析
輿情媒體數量監測分析是對主要參與輿論的媒體發(fā)布的輿情數量進(jìn)行監測分析。如圖4所示,在網(wǎng)絡(luò )媒體、論壇、微博、微信等媒體報道的采集的23169條網(wǎng)絡(luò )文本中,微博文本占比92.38%,占所有媒體文本的92.38%。最高。造成這樣結果的主要原因是活動(dòng)本身是在微博平臺發(fā)起的,而微博平臺有非常方便的媒體轉發(fā)功能。此外,大數據平臺擁有微博數據全量授權,讓數據挖掘更加全面準確。
網(wǎng)絡(luò )逐漸成為公眾參與輿論的第一渠道。在萬(wàn)物互聯(lián)的數據時(shí)代,加強網(wǎng)絡(luò )輿情監測和引導,對于維護國家穩定、促進(jìn)企業(yè)可持續發(fā)展具有重要的現實(shí)意義。此次香港榮正品牌被曝丙二醇超標,同樣是no zuo no die。想要不被卷入輿論的漩渦,除了使用大數據輿情監測系統等監測軟件為自己保駕護航外,還需要保證自己產(chǎn)品和服務(wù)的質(zhì)量。
解決方案:搜狗推送工具之搜狗百萬(wàn)蜘蛛實(shí)現
最近有很多站長(cháng)問(wèn)我搜狗推送工具好用嗎?可以分批推送嗎?送貨方式有哪些?搜狗 收錄 是怎么做到的?搜狗潘收錄應該做什么?搜狗的百萬(wàn)蜘蛛是如何實(shí)現的?今天,筆者就對這些問(wèn)題進(jìn)行統一的解答。
首先,搜狗推送工具肯定好用。搜狗官方是這么說(shuō)的:“為了鼓勵搜狗蜘蛛更快地發(fā)現你的站點(diǎn),你也可以通過(guò)網(wǎng)站收錄接口提交頁(yè)面申請收錄。提交后,搜狗搜索引擎會(huì )按照標準,為了提高處理效率,請不要重復提交同一個(gè)鏈接。沒(méi)用的,為什么要開(kāi)這樣的提交入口,一定有用,不然豈不是浪費資源?
搜狗提供了幾種提交方式?為了驗證站點(diǎn)推送,每個(gè)子域綁定的配額增加200,1000個(gè)子域相當于每天20萬(wàn)個(gè)推送配額。站后推送 2、非鑒權提交。單賬號單域名每天推送200條。如果需要大量推送,則需要大量的賬號。3.站點(diǎn)地圖推送。只有網(wǎng)站有這個(gè)站點(diǎn)地圖權限部分的權限,90%的網(wǎng)站沒(méi)有這個(gè)權限。

為了我們網(wǎng)站能夠盡快被搜狗蜘蛛和搜狗收錄找到,我們不得不不斷地向搜狗站長(cháng)平臺提交鏈接,讓蜘蛛來(lái)抓。為了提高效率,我們使用了搜狗的active批量推送工具,可以讓網(wǎng)站的所有鏈接在沒(méi)有vps的情況下自動(dòng)批量推送,工具自動(dòng)編碼。每天可提交數萬(wàn)個(gè)URL,支持24小時(shí)掛機,無(wú)人值守,長(cháng)期穩定。
怎樣才能用搜狗推送工具做好搜狗收錄呢?
選擇一個(gè)舊域名。為什么選擇搜狗老域名,因為老域名的頁(yè)面評分更高,網(wǎng)站容易被搜狗搜索到!
搜狗排名算法。是搜狗官方衡量網(wǎng)頁(yè)重要性的指標。它不僅考察網(wǎng)頁(yè)之間的鏈接關(guān)系,還考察鏈接質(zhì)量、鏈接之間的相關(guān)性等各種特征。由機器根據sogou Rank算法自動(dòng)計算,數值從0開(kāi)始,范圍從10級到10級。頁(yè)面排名越高,該頁(yè)面被搜索到的可能性就越大。搜狗的老域名有自己的評級,所以很快就被搜狗找回了,這也是為什么那么多人用老域名的原因!

網(wǎng)站源代碼程序選擇。網(wǎng)站源程序優(yōu)先選擇靜態(tài)網(wǎng)頁(yè),搜狗更偏愛(ài)靜態(tài)網(wǎng)頁(yè)!. 網(wǎng)站 程序具有清晰的導航和層次結構。網(wǎng)站重要的網(wǎng)頁(yè)應該從網(wǎng)站一級欄目位置開(kāi)始查找,確保每個(gè)網(wǎng)站頁(yè)面都可以通過(guò)文本鏈接被抓取。網(wǎng)站所在服務(wù)器不穩定。搜狗蜘蛛在抓取網(wǎng)站時(shí),會(huì )清除已經(jīng)被收錄的網(wǎng)站頁(yè)面。
網(wǎng)站內容。網(wǎng)站無(wú)論內容是原創(chuàng )還是偽原創(chuàng ),只要搜狗搜索引擎認為是原創(chuàng )文章文章即可!
今天關(guān)于搜狗推送工具的分享就到這里了。下次我會(huì )分享更多實(shí)用的SEO知識。我希望這個(gè) 文章 可以幫助您完成網(wǎng)站建設之旅。下次見(jiàn)!喜歡這個(gè)文章的朋友不妨點(diǎn)三下??!
匯總:大數據實(shí)時(shí)計算流程介紹
采集交流 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 114 次瀏覽 ? 2022-12-16 03:36
實(shí)時(shí)計算是一種常見(jiàn)的大數據計算場(chǎng)景。業(yè)務(wù)部門(mén)需要實(shí)時(shí)反饋產(chǎn)品的點(diǎn)擊、瀏覽、采集、購買(mǎi)、評價(jià)等數據,時(shí)延要求一般在秒級甚至毫秒級。批計算引擎通常需要幾分鐘或幾小時(shí)才能返回結果,顯然不能滿(mǎn)足這種場(chǎng)景的計算需求?;趯?shí)時(shí)計算的需求,流式計算引擎應運而生。目前應用廣泛的流式計算引擎主要有Spark、Storm和Flink。
一個(gè)典型的實(shí)時(shí)計算流程如下圖所示。首先通過(guò)Flume傳遞實(shí)時(shí)采集數據,然后通過(guò)消息隊列緩存采集數據。之后使用流式計算引擎進(jìn)行計算,最后將計算結果存儲在高速查詢(xún)引擎中,以便日后高效利用數據,支持報表開(kāi)發(fā)、多維分析或數據挖掘,等等
典型的實(shí)時(shí)計算流程
1、實(shí)時(shí)計算和離線(xiàn)計算如何高效共存
一些企業(yè)迫切需要實(shí)時(shí)計算和離線(xiàn)計算并存。大部分報表和任務(wù)還是基于離線(xiàn)計算,實(shí)時(shí)性要求高的應用需要使用實(shí)時(shí)計算引擎。
最直觀(guān)的想法就是為離線(xiàn)計算和實(shí)時(shí)計算場(chǎng)景搭建計算平臺,讓兩個(gè)平臺共存。這就是通常所說(shuō)的Lambda架構的處理方式,如下圖(1)所示。
搭建離線(xiàn)計算和實(shí)時(shí)計算場(chǎng)景的計算平臺
如果企業(yè)維護兩個(gè)獨立的計算平臺,成本高,運維困難,兩個(gè)平臺的數據準確性和一致性也難以保證。如何高效解決兩個(gè)計算引擎共存的問(wèn)題
Kappa的流批一體化架構和處理方式可以有效解決兩者高效共存的問(wèn)題,其架構圖如上圖(2)所示。Kappa架構的核心組件是消息隊列、數據倉庫、流批一體化計算引擎和高效查詢(xún)引擎。目前最流行的流批一體計算引擎是Flink。
2、實(shí)時(shí)數據倉庫
實(shí)時(shí)數倉與離線(xiàn)數倉最大的區別在于,通過(guò)使用消息隊列、流批一體計算引擎、查詢(xún)引擎等工具,整個(gè)平臺的計算和查詢(xún)效率更高,可以滿(mǎn)足業(yè)務(wù)的實(shí)時(shí)需求。因此,實(shí)時(shí)數據倉庫需要更高的計算能力。如果短期內數據量突然增加,那么就要考慮實(shí)時(shí)數倉的性能和穩定性。相比之下,離線(xiàn)數倉對數據量的增加不那么敏感,性能更穩定。另外,從分層建模的角度來(lái)看,實(shí)時(shí)數倉的層次不宜過(guò)多,否則會(huì )增加響應延遲。
分層框架和技術(shù)選擇
1. ODS層
源數據從數據源中提取出來(lái),存儲在Kafka中,構成實(shí)時(shí)數倉的ODS層。
2.DWD層
通過(guò)在Kafka中實(shí)時(shí)訂閱流式業(yè)務(wù)數據,利用Flink計算引擎進(jìn)行ETL、清洗、聚合、多表關(guān)聯(lián)等操作,獲取實(shí)時(shí)明細數據并存儲在Kafka中。
3.DWS層
DWS層是通過(guò)Flink計算引擎對DWD層的詳細數據進(jìn)行聚合匯總得到的?;跇I(yè)務(wù)差異化的需要,DWS層分為輕匯總層和高匯總層。輕匯總層的主要目的是支撐APP層的應用需求。高層匯總層的主要目的是滿(mǎn)足業(yè)務(wù)對統計數據的高效查詢(xún)需求,如實(shí)時(shí)大屏、數據產(chǎn)品等。
4.APP層
基于業(yè)務(wù)的差異化需求,輕匯總層會(huì )使用不同的存儲介質(zhì)。比如OLAP需求一般存儲在ClickHouse或者Kylin中。查詢(xún)需求一般存儲在Elasticsearch、HBase或MongoDB中。高層匯總層的數據量一般較小。為了滿(mǎn)足高效的查詢(xún)需求,數據一般存儲在高速查詢(xún)介質(zhì)中,如MySQL、HBase等。如果數據量較小,可以將數據存儲在內存數據庫Redis中,進(jìn)一步提高查詢(xún)效率。
APP層為數據應用層,基于以下各層數據開(kāi)發(fā)各種應用,如BI、多維分析、及時(shí)查詢(xún)、數據檢索、定價(jià)、反欺詐等。
5.DIM層
DIM層的主要存儲引擎有MySQL、Redis、HBase。在數據量比較少的情況下,可以使用內存數據庫,效率更高。HBase可以有效支持Append操作,查詢(xún)結果秒級返回。對于維度可變的場(chǎng)景,可以有限的使用HBase存儲。
解決方案:我的新網(wǎng)站正式上線(xiàn)啦,提供各種采集地理數據以及可視化工具
我的網(wǎng)站BLT-LEAD已經(jīng)正式上線(xiàn),提供了包括POI數據采集、人流數據采集、數據可視化、坐標轉換、揀選等一系列地圖工具,地址:,并且很多功能正在開(kāi)發(fā)中,歡迎使用!另外,如果您需要采集人流數據、全國POI數據、共享單車(chē)等數據,以及網(wǎng)站、小程序開(kāi)發(fā),歡迎與我聯(lián)系,歡迎長(cháng)期合作!以下是部分數據采集結果圖:
查看全部
匯總:大數據實(shí)時(shí)計算流程介紹
實(shí)時(shí)計算是一種常見(jiàn)的大數據計算場(chǎng)景。業(yè)務(wù)部門(mén)需要實(shí)時(shí)反饋產(chǎn)品的點(diǎn)擊、瀏覽、采集、購買(mǎi)、評價(jià)等數據,時(shí)延要求一般在秒級甚至毫秒級。批計算引擎通常需要幾分鐘或幾小時(shí)才能返回結果,顯然不能滿(mǎn)足這種場(chǎng)景的計算需求?;趯?shí)時(shí)計算的需求,流式計算引擎應運而生。目前應用廣泛的流式計算引擎主要有Spark、Storm和Flink。
一個(gè)典型的實(shí)時(shí)計算流程如下圖所示。首先通過(guò)Flume傳遞實(shí)時(shí)采集數據,然后通過(guò)消息隊列緩存采集數據。之后使用流式計算引擎進(jìn)行計算,最后將計算結果存儲在高速查詢(xún)引擎中,以便日后高效利用數據,支持報表開(kāi)發(fā)、多維分析或數據挖掘,等等
典型的實(shí)時(shí)計算流程
1、實(shí)時(shí)計算和離線(xiàn)計算如何高效共存
一些企業(yè)迫切需要實(shí)時(shí)計算和離線(xiàn)計算并存。大部分報表和任務(wù)還是基于離線(xiàn)計算,實(shí)時(shí)性要求高的應用需要使用實(shí)時(shí)計算引擎。
最直觀(guān)的想法就是為離線(xiàn)計算和實(shí)時(shí)計算場(chǎng)景搭建計算平臺,讓兩個(gè)平臺共存。這就是通常所說(shuō)的Lambda架構的處理方式,如下圖(1)所示。

搭建離線(xiàn)計算和實(shí)時(shí)計算場(chǎng)景的計算平臺
如果企業(yè)維護兩個(gè)獨立的計算平臺,成本高,運維困難,兩個(gè)平臺的數據準確性和一致性也難以保證。如何高效解決兩個(gè)計算引擎共存的問(wèn)題
Kappa的流批一體化架構和處理方式可以有效解決兩者高效共存的問(wèn)題,其架構圖如上圖(2)所示。Kappa架構的核心組件是消息隊列、數據倉庫、流批一體化計算引擎和高效查詢(xún)引擎。目前最流行的流批一體計算引擎是Flink。
2、實(shí)時(shí)數據倉庫
實(shí)時(shí)數倉與離線(xiàn)數倉最大的區別在于,通過(guò)使用消息隊列、流批一體計算引擎、查詢(xún)引擎等工具,整個(gè)平臺的計算和查詢(xún)效率更高,可以滿(mǎn)足業(yè)務(wù)的實(shí)時(shí)需求。因此,實(shí)時(shí)數據倉庫需要更高的計算能力。如果短期內數據量突然增加,那么就要考慮實(shí)時(shí)數倉的性能和穩定性。相比之下,離線(xiàn)數倉對數據量的增加不那么敏感,性能更穩定。另外,從分層建模的角度來(lái)看,實(shí)時(shí)數倉的層次不宜過(guò)多,否則會(huì )增加響應延遲。
分層框架和技術(shù)選擇
1. ODS層
源數據從數據源中提取出來(lái),存儲在Kafka中,構成實(shí)時(shí)數倉的ODS層。

2.DWD層
通過(guò)在Kafka中實(shí)時(shí)訂閱流式業(yè)務(wù)數據,利用Flink計算引擎進(jìn)行ETL、清洗、聚合、多表關(guān)聯(lián)等操作,獲取實(shí)時(shí)明細數據并存儲在Kafka中。
3.DWS層
DWS層是通過(guò)Flink計算引擎對DWD層的詳細數據進(jìn)行聚合匯總得到的?;跇I(yè)務(wù)差異化的需要,DWS層分為輕匯總層和高匯總層。輕匯總層的主要目的是支撐APP層的應用需求。高層匯總層的主要目的是滿(mǎn)足業(yè)務(wù)對統計數據的高效查詢(xún)需求,如實(shí)時(shí)大屏、數據產(chǎn)品等。
4.APP層
基于業(yè)務(wù)的差異化需求,輕匯總層會(huì )使用不同的存儲介質(zhì)。比如OLAP需求一般存儲在ClickHouse或者Kylin中。查詢(xún)需求一般存儲在Elasticsearch、HBase或MongoDB中。高層匯總層的數據量一般較小。為了滿(mǎn)足高效的查詢(xún)需求,數據一般存儲在高速查詢(xún)介質(zhì)中,如MySQL、HBase等。如果數據量較小,可以將數據存儲在內存數據庫Redis中,進(jìn)一步提高查詢(xún)效率。
APP層為數據應用層,基于以下各層數據開(kāi)發(fā)各種應用,如BI、多維分析、及時(shí)查詢(xún)、數據檢索、定價(jià)、反欺詐等。
5.DIM層
DIM層的主要存儲引擎有MySQL、Redis、HBase。在數據量比較少的情況下,可以使用內存數據庫,效率更高。HBase可以有效支持Append操作,查詢(xún)結果秒級返回。對于維度可變的場(chǎng)景,可以有限的使用HBase存儲。
解決方案:我的新網(wǎng)站正式上線(xiàn)啦,提供各種采集地理數據以及可視化工具
我的網(wǎng)站BLT-LEAD已經(jīng)正式上線(xiàn),提供了包括POI數據采集、人流數據采集、數據可視化、坐標轉換、揀選等一系列地圖工具,地址:,并且很多功能正在開(kāi)發(fā)中,歡迎使用!另外,如果您需要采集人流數據、全國POI數據、共享單車(chē)等數據,以及網(wǎng)站、小程序開(kāi)發(fā),歡迎與我聯(lián)系,歡迎長(cháng)期合作!以下是部分數據采集結果圖:


操作方法:你會(huì )使用python爬蟲(chóng)抓取彈幕嗎?python爬蟲(chóng)如何爬取實(shí)時(shí)彈幕?
采集交流 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 158 次瀏覽 ? 2022-12-15 02:57
現在的爬蟲(chóng)可以做很多事情,比如數據采集、信息挖掘、電影評分、個(gè)人數據、實(shí)時(shí)彈幕等等,只要你熟練,你喜歡什么就爬什么,當然它必須是合法的?,F在學(xué)習爬蟲(chóng)的人越來(lái)越多。一是互聯(lián)網(wǎng)對信息和數據的需求越來(lái)越大。第二點(diǎn),python是一門(mén)簡(jiǎn)單而強大的編程語(yǔ)言,大部分爬蟲(chóng)都是從它學(xué)來(lái)的。一起來(lái)學(xué)習《能用python爬蟲(chóng)抓取彈幕嗎?python爬蟲(chóng)如何抓取實(shí)時(shí)彈幕?》。
python爬蟲(chóng)抓取彈幕的方法和步驟分為三個(gè)部分,下面通過(guò)實(shí)例給大家講解。
1.請求彈幕
在看視頻的時(shí)候,我們首先需要獲取它的url來(lái)爬取彈幕。對于網(wǎng)站來(lái)說(shuō),彈幕的位置幾乎都是固定格式的。比如一個(gè)URL中會(huì )有一個(gè)“cid”
1、首先打開(kāi)網(wǎng)站中的視頻,按F12,或者右擊,然后點(diǎn)擊“檢查”。在最右邊的操作框中,先將菜單欄切換到“網(wǎng)絡(luò )”,在搜索框中填寫(xiě)“cid”進(jìn)行搜索。
2.篩選所有信息,點(diǎn)擊“Payload”,找到我們要的“cid”
3、這樣我們就可以得到一個(gè)網(wǎng)站中的cid。
4、使用request庫向網(wǎng)站發(fā)起請求,使用urllib庫獲取網(wǎng)站的頁(yè)面。代碼示例如下:
url?=?"http://comment.bilibili.com/499893135.xml"
“499893135”就是我們剛剛獲取的cid值。
<p>
發(fā)送請求,在發(fā)送請求的時(shí)候還可以對瀏覽器進(jìn)行偽裝操作,我這里沒(méi)有使用。
req?=?requests.get(url?=?url)
獲取內容響應的內容
html_byte?=?req.content
將byte轉為str
html_str?=?str(html_byte,"utf-8")</p>
2.彈幕分析
我們得到的數據一般都是html格式的?,F在我們需要的是對這些html格式進(jìn)行處理,得到我們想要的信息。這時(shí)候,我們就需要用到一個(gè)BeautifulSoup庫。代碼如下:
soup?=?BeautifulSoup(html,'html.parser')
?results?=?soup.find_all('d')
把標簽里的文本提取出來(lái)
contents?=?[x.text?for?x?in?results]
<p>
存為字典
?dic?={"contents"?:?contents}</p>
在代碼中,我們會(huì )先對這個(gè)html進(jìn)行操作,使用soup.find_all得到一個(gè)label,然后提取label,最后以字典的形式存儲。
3.店鋪彈幕
我們可以用一個(gè)excel表來(lái)存儲從網(wǎng)站獲取的彈幕信息,這里我們需要用到兩個(gè)庫來(lái)對表進(jìn)行處理。
Xlwt 庫用于處理表格
熊貓圖書(shū)館
從我們剛剛存儲的字典中創(chuàng )建一個(gè)dataFrame,這里是使用pandas庫對表格數據進(jìn)行操作,代碼如下:
#created 一個(gè)收錄字典的電子表格
df?=?pd.DataFrame(dic)
df["contents"].to_excel('htx.xlsx')
這篇文章你會(huì )用python爬蟲(chóng)來(lái)抓彈幕嗎?python爬蟲(chóng)如何爬取實(shí)時(shí)彈幕?文章的內容就介紹到這里,希望對大家有所幫助。
事實(shí):百度蜘蛛網(wǎng)站抓取診斷失敗的原因有哪些?
對于SEO人員來(lái)說(shuō),經(jīng)常使用百度官方的工具來(lái)審核站點(diǎn),查看網(wǎng)站的各項指標是否符合預期。其中,“抓取診斷”是站長(cháng)經(jīng)常使用的工具。很多站長(cháng)表示,在使用網(wǎng)站“爬取診斷”時(shí),經(jīng)常會(huì )出現診斷失敗的提示,請問(wèn)這是什么問(wèn)題呢?
網(wǎng)站抓取診斷概述
百度爬蟲(chóng)診斷工具的功能主要是從百度蜘蛛的角度理解網(wǎng)站內容。它反饋的結果代表了蜘蛛對站點(diǎn)內容的理解。通常網(wǎng)站爬取診斷失敗,這與百度的Spider爬取有直接關(guān)系。
網(wǎng)站抓取診斷失敗的原因是什么?
1. 禁止robots.txt
如果你在robots.txt中阻止百度抓取網(wǎng)站某個(gè)目錄,當你在該目錄下生成內容時(shí),百度將很難抓取該目錄下的內容,抓取診斷也會(huì )出現Failed提示。
2. 網(wǎng)站訪(fǎng)問(wèn)速度
很多站長(cháng)說(shuō)在本地測試時(shí),我的網(wǎng)站返回HTTP狀態(tài)碼200,但是爬蟲(chóng)診斷一直顯示在爬蟲(chóng)中,沒(méi)有反饋結果。
由于服務(wù)器線(xiàn)路不同,百度蜘蛛的爬取速度可能會(huì )延遲較長(cháng)時(shí)間,從而導致明明可以訪(fǎng)問(wèn),但爬取診斷失敗的問(wèn)題。
如果遇到這個(gè)問(wèn)題,需要定期監控服務(wù)器各部分的訪(fǎng)問(wèn)速度,優(yōu)化網(wǎng)站的打開(kāi)速度。
3.CDN緩存更新
我們知道更新 CDN 緩存需要時(shí)間。雖然您在管理平臺后臺有實(shí)時(shí)在線(xiàn)更新,但由于不同服務(wù)商技術(shù)的不對稱(chēng),往往會(huì )造成一定時(shí)間的延遲。
這將不可避免地導致網(wǎng)站爬取失敗。
4.抓取診斷有跳轉
如果更新網(wǎng)站修改舊內容,使用301或302重定向,由于配置錯誤,也會(huì )出現重定向過(guò)多,同樣會(huì )導致百度抓取失敗。
5.DNS緩存
由于DNS緩存的存在,當你在本地查詢(xún)URL時(shí),是可以正常訪(fǎng)問(wèn)的,但是當你排除了上述一般問(wèn)題后,爬取診斷仍然提示失敗,這時(shí)需要更新本地DNS緩存,或者使用代理IP查看 網(wǎng)站 訪(fǎng)問(wèn)非常順暢。
網(wǎng)站 抓取診斷常見(jiàn)問(wèn)題解答:
關(guān)于百度抓取診斷工具,搜索引擎優(yōu)化顧問(wèn)問(wèn)得最多的問(wèn)題是:百度抓取診斷對收錄有幫助嗎?
從目前眾多SEO人員的反饋結果來(lái)看,沒(méi)有合理的數據支持證明爬蟲(chóng)診斷工具對百度收錄有利,但或許對百度快照更新有一定的影響。
星資源網(wǎng)總結:網(wǎng)站“搶診”失敗的原因有很多。除了參考官方的提示外,還需要一一排除。以上內容僅供參考。 查看全部
操作方法:你會(huì )使用python爬蟲(chóng)抓取彈幕嗎?python爬蟲(chóng)如何爬取實(shí)時(shí)彈幕?
現在的爬蟲(chóng)可以做很多事情,比如數據采集、信息挖掘、電影評分、個(gè)人數據、實(shí)時(shí)彈幕等等,只要你熟練,你喜歡什么就爬什么,當然它必須是合法的?,F在學(xué)習爬蟲(chóng)的人越來(lái)越多。一是互聯(lián)網(wǎng)對信息和數據的需求越來(lái)越大。第二點(diǎn),python是一門(mén)簡(jiǎn)單而強大的編程語(yǔ)言,大部分爬蟲(chóng)都是從它學(xué)來(lái)的。一起來(lái)學(xué)習《能用python爬蟲(chóng)抓取彈幕嗎?python爬蟲(chóng)如何抓取實(shí)時(shí)彈幕?》。
python爬蟲(chóng)抓取彈幕的方法和步驟分為三個(gè)部分,下面通過(guò)實(shí)例給大家講解。
1.請求彈幕
在看視頻的時(shí)候,我們首先需要獲取它的url來(lái)爬取彈幕。對于網(wǎng)站來(lái)說(shuō),彈幕的位置幾乎都是固定格式的。比如一個(gè)URL中會(huì )有一個(gè)“cid”
1、首先打開(kāi)網(wǎng)站中的視頻,按F12,或者右擊,然后點(diǎn)擊“檢查”。在最右邊的操作框中,先將菜單欄切換到“網(wǎng)絡(luò )”,在搜索框中填寫(xiě)“cid”進(jìn)行搜索。
2.篩選所有信息,點(diǎn)擊“Payload”,找到我們要的“cid”
3、這樣我們就可以得到一個(gè)網(wǎng)站中的cid。
4、使用request庫向網(wǎng)站發(fā)起請求,使用urllib庫獲取網(wǎng)站的頁(yè)面。代碼示例如下:
url?=?"http://comment.bilibili.com/499893135.xml"
“499893135”就是我們剛剛獲取的cid值。
<p>

發(fā)送請求,在發(fā)送請求的時(shí)候還可以對瀏覽器進(jìn)行偽裝操作,我這里沒(méi)有使用。
req?=?requests.get(url?=?url)
獲取內容響應的內容
html_byte?=?req.content
將byte轉為str
html_str?=?str(html_byte,"utf-8")</p>
2.彈幕分析
我們得到的數據一般都是html格式的?,F在我們需要的是對這些html格式進(jìn)行處理,得到我們想要的信息。這時(shí)候,我們就需要用到一個(gè)BeautifulSoup庫。代碼如下:
soup?=?BeautifulSoup(html,'html.parser')
?results?=?soup.find_all('d')
把標簽里的文本提取出來(lái)
contents?=?[x.text?for?x?in?results]
<p>

存為字典
?dic?={"contents"?:?contents}</p>
在代碼中,我們會(huì )先對這個(gè)html進(jìn)行操作,使用soup.find_all得到一個(gè)label,然后提取label,最后以字典的形式存儲。
3.店鋪彈幕
我們可以用一個(gè)excel表來(lái)存儲從網(wǎng)站獲取的彈幕信息,這里我們需要用到兩個(gè)庫來(lái)對表進(jìn)行處理。
Xlwt 庫用于處理表格
熊貓圖書(shū)館
從我們剛剛存儲的字典中創(chuàng )建一個(gè)dataFrame,這里是使用pandas庫對表格數據進(jìn)行操作,代碼如下:
#created 一個(gè)收錄字典的電子表格
df?=?pd.DataFrame(dic)
df["contents"].to_excel('htx.xlsx')
這篇文章你會(huì )用python爬蟲(chóng)來(lái)抓彈幕嗎?python爬蟲(chóng)如何爬取實(shí)時(shí)彈幕?文章的內容就介紹到這里,希望對大家有所幫助。
事實(shí):百度蜘蛛網(wǎng)站抓取診斷失敗的原因有哪些?
對于SEO人員來(lái)說(shuō),經(jīng)常使用百度官方的工具來(lái)審核站點(diǎn),查看網(wǎng)站的各項指標是否符合預期。其中,“抓取診斷”是站長(cháng)經(jīng)常使用的工具。很多站長(cháng)表示,在使用網(wǎng)站“爬取診斷”時(shí),經(jīng)常會(huì )出現診斷失敗的提示,請問(wèn)這是什么問(wèn)題呢?
網(wǎng)站抓取診斷概述
百度爬蟲(chóng)診斷工具的功能主要是從百度蜘蛛的角度理解網(wǎng)站內容。它反饋的結果代表了蜘蛛對站點(diǎn)內容的理解。通常網(wǎng)站爬取診斷失敗,這與百度的Spider爬取有直接關(guān)系。
網(wǎng)站抓取診斷失敗的原因是什么?
1. 禁止robots.txt
如果你在robots.txt中阻止百度抓取網(wǎng)站某個(gè)目錄,當你在該目錄下生成內容時(shí),百度將很難抓取該目錄下的內容,抓取診斷也會(huì )出現Failed提示。

2. 網(wǎng)站訪(fǎng)問(wèn)速度
很多站長(cháng)說(shuō)在本地測試時(shí),我的網(wǎng)站返回HTTP狀態(tài)碼200,但是爬蟲(chóng)診斷一直顯示在爬蟲(chóng)中,沒(méi)有反饋結果。
由于服務(wù)器線(xiàn)路不同,百度蜘蛛的爬取速度可能會(huì )延遲較長(cháng)時(shí)間,從而導致明明可以訪(fǎng)問(wèn),但爬取診斷失敗的問(wèn)題。
如果遇到這個(gè)問(wèn)題,需要定期監控服務(wù)器各部分的訪(fǎng)問(wèn)速度,優(yōu)化網(wǎng)站的打開(kāi)速度。
3.CDN緩存更新
我們知道更新 CDN 緩存需要時(shí)間。雖然您在管理平臺后臺有實(shí)時(shí)在線(xiàn)更新,但由于不同服務(wù)商技術(shù)的不對稱(chēng),往往會(huì )造成一定時(shí)間的延遲。
這將不可避免地導致網(wǎng)站爬取失敗。
4.抓取診斷有跳轉

如果更新網(wǎng)站修改舊內容,使用301或302重定向,由于配置錯誤,也會(huì )出現重定向過(guò)多,同樣會(huì )導致百度抓取失敗。
5.DNS緩存
由于DNS緩存的存在,當你在本地查詢(xún)URL時(shí),是可以正常訪(fǎng)問(wèn)的,但是當你排除了上述一般問(wèn)題后,爬取診斷仍然提示失敗,這時(shí)需要更新本地DNS緩存,或者使用代理IP查看 網(wǎng)站 訪(fǎng)問(wèn)非常順暢。
網(wǎng)站 抓取診斷常見(jiàn)問(wèn)題解答:
關(guān)于百度抓取診斷工具,搜索引擎優(yōu)化顧問(wèn)問(wèn)得最多的問(wèn)題是:百度抓取診斷對收錄有幫助嗎?
從目前眾多SEO人員的反饋結果來(lái)看,沒(méi)有合理的數據支持證明爬蟲(chóng)診斷工具對百度收錄有利,但或許對百度快照更新有一定的影響。
星資源網(wǎng)總結:網(wǎng)站“搶診”失敗的原因有很多。除了參考官方的提示外,還需要一一排除。以上內容僅供參考。
解決方案:谷歌有一個(gè)應用icrypt,免費的人物角色采集器
采集交流 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 219 次瀏覽 ? 2022-12-02 17:14
文章實(shí)時(shí)采集網(wǎng)絡(luò ),可以嘗試從事件日志獲取等應用領(lǐng)域。常見(jiàn)的msra有一款軟件能獲取各個(gè)公司的每日標注數據,包括各種行政區劃,城市,大類(lèi)。谷歌有一個(gè)應用icrypt,雖然這款應用只支持特定的手機的tangent(不知道以后會(huì )不會(huì )收費),但我覺(jué)得還不錯。
做游戲和動(dòng)畫(huà)還是推薦使用canvas
grid。各種mgui上的一個(gè)很重要的數據采集接口。
推薦看看這篇文章canvasbycollagenkeysfordatavisualizationandshaders
國內的leancloud。
二樓說(shuō)的可以,
推薦一個(gè)免費的網(wǎng)站keykit,支持各種格式的文件,而且簡(jiǎn)單易用,
免費的人物角色采集器
國內,
collagenkeys
這個(gè)真的很簡(jiǎn)單,推薦可以打開(kāi)大學(xué)計算機課件,不要打開(kāi),運行一次不行的話(huà),
推薦一個(gè)我能找到采集的工具python人物及車(chē)牌識別
推薦一個(gè)信息采集工具給大家~有需要可以購買(mǎi)試試。
全國海關(guān)公告,、web地址(以北京為例)、車(chē)牌號。不過(guò)好像沒(méi)中國移動(dòng)客戶(hù)端支持,找一個(gè)淘寶客戶(hù)端吧。
《河北鐵路通行管理局民用產(chǎn)品流通暨信息技術(shù)管理制度》 查看全部
解決方案:谷歌有一個(gè)應用icrypt,免費的人物角色采集器
文章實(shí)時(shí)采集網(wǎng)絡(luò ),可以嘗試從事件日志獲取等應用領(lǐng)域。常見(jiàn)的msra有一款軟件能獲取各個(gè)公司的每日標注數據,包括各種行政區劃,城市,大類(lèi)。谷歌有一個(gè)應用icrypt,雖然這款應用只支持特定的手機的tangent(不知道以后會(huì )不會(huì )收費),但我覺(jué)得還不錯。
做游戲和動(dòng)畫(huà)還是推薦使用canvas
grid。各種mgui上的一個(gè)很重要的數據采集接口。
推薦看看這篇文章canvasbycollagenkeysfordatavisualizationandshaders

國內的leancloud。
二樓說(shuō)的可以,
推薦一個(gè)免費的網(wǎng)站keykit,支持各種格式的文件,而且簡(jiǎn)單易用,
免費的人物角色采集器
國內,

collagenkeys
這個(gè)真的很簡(jiǎn)單,推薦可以打開(kāi)大學(xué)計算機課件,不要打開(kāi),運行一次不行的話(huà),
推薦一個(gè)我能找到采集的工具python人物及車(chē)牌識別
推薦一個(gè)信息采集工具給大家~有需要可以購買(mǎi)試試。
全國海關(guān)公告,、web地址(以北京為例)、車(chē)牌號。不過(guò)好像沒(méi)中國移動(dòng)客戶(hù)端支持,找一個(gè)淘寶客戶(hù)端吧。
《河北鐵路通行管理局民用產(chǎn)品流通暨信息技術(shù)管理制度》
官方發(fā)布:爬蟲(chóng)采集違法(6日更新/今日圖文)2022已更新
采集交流 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 139 次瀏覽 ? 2022-12-01 17:40
爬蟲(chóng)應用
但是我們的 PtCMS 采集站點(diǎn)應該盡可能對爬蟲(chóng)友好。按照SEO標準,我們需要構建一個(gè)扁平化、清晰的網(wǎng)站結構,盡量為爬蟲(chóng)構建一個(gè)良好的爬行結構。帶你搜集全資料,超詳解北京審判工程合同法男女可否共同值班~又一高清視頻正在播出,即將上線(xiàn)在線(xiàn)的。影片內容簡(jiǎn)介: 帶你搜集全程資料。
一個(gè)爬蟲(chóng)從一期版主那里采集
的 嘿嘿嘿 2020.7.30 之前一期版主的文字和圖片起名比較規律,所以采用的方法是想看這本書(shū)就用爬蟲(chóng)來(lái)采集
。該網(wǎng)站最近已更新。本文分享給大家的是使用Python制作爬蟲(chóng)采集代碼。你需要在法庭上有個(gè)家嗎?簽名方法很實(shí)用,雖然還是有點(diǎn)瑕疵,一起改吧。
框架 本文針對基于爬蟲(chóng)框架的推薦平臺的具體功能模塊,根據系統建設的實(shí)際情況,確定了最技術(shù)方案:系統結構:B/S架構;編程語(yǔ)言:Ja?;谝陨蠁?wèn)題,本推薦系統的構建主要分為三個(gè)部分:推薦網(wǎng)站前端系統、運維管理后臺系統、實(shí)時(shí)數據采集爬蟲(chóng)。
# 2.讓張某獲取html數據,慶安調用提取文章內容保存。response = requests.get(url + src, headers=headers) 得到最終的URL后,逐層進(jìn)行。本文介紹如何使用采集器的智能模式,避免在樂(lè )聞網(wǎng)采集數據。采集工具介紹: 后采集器是一款基于人工智能技術(shù)的網(wǎng)頁(yè)采集器。
使用Python實(shí)現筆趣閣爬蟲(chóng),以后再也不用擔心了。BV1r7411m7AE 未經(jīng)作者授權,禁止轉載Python爬蟲(chóng)基礎案例。整站采集你學(xué)會(huì )了嗎?
爬行違法嗎?
被告兩年前租用國外服務(wù)器,自行創(chuàng )建了釘釘網(wǎng)。2017年至2018年6月,某某未經(jīng)版權方許可的情況 上海玄聽(tīng)娛樂(lè )信息技術(shù)有限公司 本文介紹使用優(yōu)采云
采集
快樂(lè )書(shū)客的方法(取次元以大學(xué)為例)。采集
網(wǎng)站:以上只是次元學(xué)院的一個(gè)例子。
匯總:V8 中的垃圾收集(GC),圖文指南
原標題:Garbage 采集
in V8, an illustrated guide 原文鏈接:@_lrlna/garbage-采集
-in-v8-an-illustrated-guide-d24a952ee3b8
本指南與我迄今為止編寫(xiě)的其他指南的不同之處在于我添加了一些草圖。我概述了垃圾采集
(GC) 的整個(gè)概念以及它是如何在 javascript 中處理的,更準確地說(shuō)是在運行 javascript 的引擎中。順便說(shuō)一下,本指南是針對初學(xué)者的,不涵蓋 V8 內存管理和 V8 內部結構的各個(gè)方面。我添加了一些可以幫助您深入挖掘的資源。本指南重點(diǎn)關(guān)注?javascript?,對于某些語(yǔ)言,垃圾回收是完全不同的,例如C語(yǔ)言。
好的,讓我們開(kāi)始吧。
什么是 v8?
V8,是一個(gè) JavaScript 運行時(shí)引擎,不要與你最喜歡的番茄汁混淆,它編譯并執行你喜歡的 javascript。V8 有一個(gè)分代垃圾采集
器,我會(huì )在后面解釋。它與 Chrome 一起使用,而 SpiderMonkey 是 Mozilla 的引擎,而 Chakra 是微軟的?;旧袭斶\行 javascript 時(shí),你需要一個(gè)引擎來(lái)處理它,而 V8 是你的選擇之一,無(wú)論是在瀏覽器中還是在 node.js 環(huán)境中。(PS V8 是 ?開(kāi)源 ?。)
什么是垃圾采集
?
垃圾采集
的要點(diǎn)是通過(guò)使用特定的程序來(lái)管理內存使用。C 等語(yǔ)言通??梢栽诔绦騼戎苯硬僮鲀却?,并在程序的上下文中分配和釋放對象。另一方面,ECMAScript 缺少訪(fǎng)問(wèn)內存管理的特定接口(是的,這意味著(zhù)沒(méi)有 API)。這基本上意味著(zhù)程序中的所有內存管理權限都轉移給了V8。
由于我們無(wú)法訪(fǎng)問(wèn)無(wú)限量的內存,因此垃圾采集
器的工作是遍歷內存中分配的對象以確定它們是死的還是活的。存活的對象留在內存中,死亡的對象被刪除,內存分配回堆。
什么是堆?堆是一個(gè)非結構化區域,堆中的對象占用分配的內存。這種分配是動(dòng)態(tài)的,因為對象的大小/生命周期/數量是未知的,所以它需要在運行時(shí)分配和釋放。
如果我們看一下并發(fā)模型,堆直接與調用堆棧一起工作,因為堆棧中的對象需要分配內存。它看起來(lái)像這樣:
死或生?
如何檢查對象的生死是通過(guò)客戶(hù)端計算機或程序代碼是否可以到達對象。您能想到的最容易訪(fǎng)問(wèn)的對象可能是那些定義在根范圍內的對象。
一些 C++ 綁定(或客戶(hù)端的 Web API)也是根的一部分,因此您可以通過(guò) setInterval 等直接訪(fǎng)問(wèn)它們。
Reachability也可以這樣理解:另一個(gè)對象或者root是否可以獲取,如果可以,則保留該對象所需的內存。
那么如何實(shí)現垃圾回收呢?(告訴我告訴我?。?br /> 當創(chuàng )建一個(gè)新對象或一個(gè)新的“指針”時(shí),V8 在堆上分配內存。(javascript 并沒(méi)有真正的指針,所以“指針”在技術(shù)上只是復制對原創(chuàng )
對象的引用)。堆中不同類(lèi)型的對象占用不同的空間,其組織方式如下:
出于垃圾回收的目的,V8 將堆分為兩部分:年輕區和老區。當你執行需要 V8 分配內存的操作時(shí),V8 會(huì )在新生區域分配空間。當您不斷向堆中添加內容時(shí),您最終會(huì )耗盡內存,因此 V8 將不得不運行 GC 來(lái)清理它。新創(chuàng )建的對象被快速分配并在對象死亡時(shí)被清理(更短和更快的采集
)。一旦對象“幸存”了一些(確切地說(shuō)是 2 個(gè)周期)采集
掃描周期,它們就會(huì )被提升到陳舊空間,在那里它們在一個(gè)單獨的周期中被垃圾采集
。
較舊的對象是那些在多次垃圾采集
掃描中幸存下來(lái)的對象,這意味著(zhù)它們仍被其他對象引用并且仍然需要占用該內存。他們通常不指代較新的對象,而是指較舊的對象。大循環(huán)很少發(fā)生。一個(gè)大循環(huán)通常發(fā)生在足夠多的對象被移動(dòng)到陳舊區域之后。
來(lái)源.js
本指南交叉發(fā)布自 lrlna 在 github 上的 sketkin 指南 ?。 查看全部
官方發(fā)布:爬蟲(chóng)采集違法(6日更新/今日圖文)2022已更新
爬蟲(chóng)應用
但是我們的 PtCMS 采集站點(diǎn)應該盡可能對爬蟲(chóng)友好。按照SEO標準,我們需要構建一個(gè)扁平化、清晰的網(wǎng)站結構,盡量為爬蟲(chóng)構建一個(gè)良好的爬行結構。帶你搜集全資料,超詳解北京審判工程合同法男女可否共同值班~又一高清視頻正在播出,即將上線(xiàn)在線(xiàn)的。影片內容簡(jiǎn)介: 帶你搜集全程資料。

一個(gè)爬蟲(chóng)從一期版主那里采集
的 嘿嘿嘿 2020.7.30 之前一期版主的文字和圖片起名比較規律,所以采用的方法是想看這本書(shū)就用爬蟲(chóng)來(lái)采集
。該網(wǎng)站最近已更新。本文分享給大家的是使用Python制作爬蟲(chóng)采集代碼。你需要在法庭上有個(gè)家嗎?簽名方法很實(shí)用,雖然還是有點(diǎn)瑕疵,一起改吧。
框架 本文針對基于爬蟲(chóng)框架的推薦平臺的具體功能模塊,根據系統建設的實(shí)際情況,確定了最技術(shù)方案:系統結構:B/S架構;編程語(yǔ)言:Ja?;谝陨蠁?wèn)題,本推薦系統的構建主要分為三個(gè)部分:推薦網(wǎng)站前端系統、運維管理后臺系統、實(shí)時(shí)數據采集爬蟲(chóng)。
# 2.讓張某獲取html數據,慶安調用提取文章內容保存。response = requests.get(url + src, headers=headers) 得到最終的URL后,逐層進(jìn)行。本文介紹如何使用采集器的智能模式,避免在樂(lè )聞網(wǎng)采集數據。采集工具介紹: 后采集器是一款基于人工智能技術(shù)的網(wǎng)頁(yè)采集器。

使用Python實(shí)現筆趣閣爬蟲(chóng),以后再也不用擔心了。BV1r7411m7AE 未經(jīng)作者授權,禁止轉載Python爬蟲(chóng)基礎案例。整站采集你學(xué)會(huì )了嗎?
爬行違法嗎?
被告兩年前租用國外服務(wù)器,自行創(chuàng )建了釘釘網(wǎng)。2017年至2018年6月,某某未經(jīng)版權方許可的情況 上海玄聽(tīng)娛樂(lè )信息技術(shù)有限公司 本文介紹使用優(yōu)采云
采集
快樂(lè )書(shū)客的方法(取次元以大學(xué)為例)。采集
網(wǎng)站:以上只是次元學(xué)院的一個(gè)例子。
匯總:V8 中的垃圾收集(GC),圖文指南
原標題:Garbage 采集
in V8, an illustrated guide 原文鏈接:@_lrlna/garbage-采集
-in-v8-an-illustrated-guide-d24a952ee3b8
本指南與我迄今為止編寫(xiě)的其他指南的不同之處在于我添加了一些草圖。我概述了垃圾采集
(GC) 的整個(gè)概念以及它是如何在 javascript 中處理的,更準確地說(shuō)是在運行 javascript 的引擎中。順便說(shuō)一下,本指南是針對初學(xué)者的,不涵蓋 V8 內存管理和 V8 內部結構的各個(gè)方面。我添加了一些可以幫助您深入挖掘的資源。本指南重點(diǎn)關(guān)注?javascript?,對于某些語(yǔ)言,垃圾回收是完全不同的,例如C語(yǔ)言。
好的,讓我們開(kāi)始吧。
什么是 v8?
V8,是一個(gè) JavaScript 運行時(shí)引擎,不要與你最喜歡的番茄汁混淆,它編譯并執行你喜歡的 javascript。V8 有一個(gè)分代垃圾采集
器,我會(huì )在后面解釋。它與 Chrome 一起使用,而 SpiderMonkey 是 Mozilla 的引擎,而 Chakra 是微軟的?;旧袭斶\行 javascript 時(shí),你需要一個(gè)引擎來(lái)處理它,而 V8 是你的選擇之一,無(wú)論是在瀏覽器中還是在 node.js 環(huán)境中。(PS V8 是 ?開(kāi)源 ?。)
什么是垃圾采集
?
垃圾采集
的要點(diǎn)是通過(guò)使用特定的程序來(lái)管理內存使用。C 等語(yǔ)言通??梢栽诔绦騼戎苯硬僮鲀却?,并在程序的上下文中分配和釋放對象。另一方面,ECMAScript 缺少訪(fǎng)問(wèn)內存管理的特定接口(是的,這意味著(zhù)沒(méi)有 API)。這基本上意味著(zhù)程序中的所有內存管理權限都轉移給了V8。

由于我們無(wú)法訪(fǎng)問(wèn)無(wú)限量的內存,因此垃圾采集
器的工作是遍歷內存中分配的對象以確定它們是死的還是活的。存活的對象留在內存中,死亡的對象被刪除,內存分配回堆。
什么是堆?堆是一個(gè)非結構化區域,堆中的對象占用分配的內存。這種分配是動(dòng)態(tài)的,因為對象的大小/生命周期/數量是未知的,所以它需要在運行時(shí)分配和釋放。
如果我們看一下并發(fā)模型,堆直接與調用堆棧一起工作,因為堆棧中的對象需要分配內存。它看起來(lái)像這樣:
死或生?
如何檢查對象的生死是通過(guò)客戶(hù)端計算機或程序代碼是否可以到達對象。您能想到的最容易訪(fǎng)問(wèn)的對象可能是那些定義在根范圍內的對象。
一些 C++ 綁定(或客戶(hù)端的 Web API)也是根的一部分,因此您可以通過(guò) setInterval 等直接訪(fǎng)問(wèn)它們。
Reachability也可以這樣理解:另一個(gè)對象或者root是否可以獲取,如果可以,則保留該對象所需的內存。

那么如何實(shí)現垃圾回收呢?(告訴我告訴我?。?br /> 當創(chuàng )建一個(gè)新對象或一個(gè)新的“指針”時(shí),V8 在堆上分配內存。(javascript 并沒(méi)有真正的指針,所以“指針”在技術(shù)上只是復制對原創(chuàng )
對象的引用)。堆中不同類(lèi)型的對象占用不同的空間,其組織方式如下:
出于垃圾回收的目的,V8 將堆分為兩部分:年輕區和老區。當你執行需要 V8 分配內存的操作時(shí),V8 會(huì )在新生區域分配空間。當您不斷向堆中添加內容時(shí),您最終會(huì )耗盡內存,因此 V8 將不得不運行 GC 來(lái)清理它。新創(chuàng )建的對象被快速分配并在對象死亡時(shí)被清理(更短和更快的采集
)。一旦對象“幸存”了一些(確切地說(shuō)是 2 個(gè)周期)采集
掃描周期,它們就會(huì )被提升到陳舊空間,在那里它們在一個(gè)單獨的周期中被垃圾采集
。
較舊的對象是那些在多次垃圾采集
掃描中幸存下來(lái)的對象,這意味著(zhù)它們仍被其他對象引用并且仍然需要占用該內存。他們通常不指代較新的對象,而是指較舊的對象。大循環(huán)很少發(fā)生。一個(gè)大循環(huán)通常發(fā)生在足夠多的對象被移動(dòng)到陳舊區域之后。
來(lái)源.js
本指南交叉發(fā)布自 lrlna 在 github 上的 sketkin 指南 ?。
優(yōu)采云的強大功能有哪些?不妨前往www.ucaiyun
采集交流 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 78 次瀏覽 ? 2023-01-14 18:29
優(yōu)采云的文章實(shí)時(shí)采集功能不僅能夠幫助用戶(hù)節省時(shí)間和精力,同時(shí)還可以有效地幫助用戶(hù)進(jìn)行SEO優(yōu)化。它可以讓用戶(hù)根據關(guān)鍵詞和關(guān)鍵詞組對文章進(jìn)行分類(lèi),使得文章內容與關(guān)鍵詞相關(guān)性更強,有助于網(wǎng)站在搜索引擎中獲得更好的排名。
此外,優(yōu)采云還可以讓用戶(hù)根據特定的關(guān)鍵詞自動(dòng)生成新聞內容,不僅能夠大大減少人工制作內容的工作量,還可以節省人工制作內容所耗費的時(shí)間。此外,優(yōu)采云還可以根據用戶(hù)所輸入的內容,自動(dòng)生成相應的新聞標題和圖片。
最后,優(yōu)采云還可以幫助用戶(hù)快速地將新聞內容上傳到各大平臺上去。用戶(hù)只需要將新聞內容上傳到優(yōu)采云中,就能夠快速地將內容同步到各大平臺上去。這樣一來(lái),用戶(hù)就不必為了將新聞內容發(fā)布到各大平臺耗費大量的時(shí)間和精力了。
總之,優(yōu)采云是一款強大的文章實(shí)時(shí)采集軟件,能夠有效地幫助用戶(hù)快速、準確地從多個(gè)網(wǎng)站上獲取信息,并根據特定的關(guān)鍵詞進(jìn)行SEO優(yōu)化、生成相應的標題和圖片、將新聞內容上傳到各大平臺。如果你也想體驗一下優(yōu)采云的強大功能,不妨前往www.bjpromise.cn注冊使用一下吧。 查看全部
文章實(shí)時(shí)采集是當今網(wǎng)絡(luò )營(yíng)銷(xiāo)活動(dòng)中非常重要的一環(huán),它能夠有效提升網(wǎng)站的曝光度,進(jìn)而帶來(lái)更多的流量。優(yōu)采云是一款非常出色的文章實(shí)時(shí)采集軟件,可以幫助用戶(hù)快速地從多個(gè)網(wǎng)站上抓取信息,并將其匯總到網(wǎng)站中。

優(yōu)采云的文章實(shí)時(shí)采集功能不僅能夠幫助用戶(hù)節省時(shí)間和精力,同時(shí)還可以有效地幫助用戶(hù)進(jìn)行SEO優(yōu)化。它可以讓用戶(hù)根據關(guān)鍵詞和關(guān)鍵詞組對文章進(jìn)行分類(lèi),使得文章內容與關(guān)鍵詞相關(guān)性更強,有助于網(wǎng)站在搜索引擎中獲得更好的排名。

此外,優(yōu)采云還可以讓用戶(hù)根據特定的關(guān)鍵詞自動(dòng)生成新聞內容,不僅能夠大大減少人工制作內容的工作量,還可以節省人工制作內容所耗費的時(shí)間。此外,優(yōu)采云還可以根據用戶(hù)所輸入的內容,自動(dòng)生成相應的新聞標題和圖片。

最后,優(yōu)采云還可以幫助用戶(hù)快速地將新聞內容上傳到各大平臺上去。用戶(hù)只需要將新聞內容上傳到優(yōu)采云中,就能夠快速地將內容同步到各大平臺上去。這樣一來(lái),用戶(hù)就不必為了將新聞內容發(fā)布到各大平臺耗費大量的時(shí)間和精力了。
總之,優(yōu)采云是一款強大的文章實(shí)時(shí)采集軟件,能夠有效地幫助用戶(hù)快速、準確地從多個(gè)網(wǎng)站上獲取信息,并根據特定的關(guān)鍵詞進(jìn)行SEO優(yōu)化、生成相應的標題和圖片、將新聞內容上傳到各大平臺。如果你也想體驗一下優(yōu)采云的強大功能,不妨前往www.bjpromise.cn注冊使用一下吧。
優(yōu)采云是一個(gè)強大而易用的實(shí)時(shí)文章采集工具
采集交流 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 190 次瀏覽 ? 2023-01-14 12:32
優(yōu)采云是一個(gè)專(zhuān)業(yè)的文章實(shí)時(shí)采集工具,可以幫助編輯更快地收集到最新的新聞、資訊和信息,從而及時(shí)發(fā)布最新的文章。優(yōu)采云不僅支持實(shí)時(shí)采集,還包含了多種功能,如SEO優(yōu)化、數據分析和內容分發(fā)等,這些功能都能幫助編輯有效地處理和發(fā)布內容。
優(yōu)采云的優(yōu)勢在于:首先,它可以幫助編輯快速準確地獲得所需信息;其次,它具有SEO優(yōu)化功能,能夠幫助文章在搜索引擎中展示出來(lái);再者,它還能夠幫助用戶(hù)進(jìn)行數據分析和內容分發(fā)工作。此外,優(yōu)采云還有一個(gè)強大的團隊,隨時(shí)提供用戶(hù)服務(wù)和技術(shù)支持。
此外,優(yōu)采云還能夠根據用戶(hù)的需要進(jìn)行擴展或升級。對于小型團隊來(lái)說(shuō),使用優(yōu)采云就好像是雇傭一位專(zhuān)業(yè)的新聞偵察員一樣方便。如此一來(lái),就不需要專(zhuān)門(mén)從事內容采集工作的人員來(lái)手工錄入信息了。
總之,優(yōu)采云是一個(gè)強大而易用的實(shí)時(shí)文章采集工具。通過(guò)使用優(yōu)采云,不僅能夠快速準確地獲得所需信息,而且還能幫助用戶(hù)進(jìn)行SEO優(yōu)化、數據分析和內容分發(fā)工作。想要詳情了解優(yōu)采云的相關(guān)信息、特性、價(jià)格、應用場(chǎng)合等方面的信息,請前往www.bjpromise.cn 。 查看全部
文章實(shí)時(shí)采集是現在網(wǎng)絡(luò )編輯寫(xiě)作的必備技能。它可以讓編輯更快地收集到實(shí)時(shí)的新聞、資訊和信息,從而及時(shí)發(fā)布最新的文章。隨著(zhù)互聯(lián)網(wǎng)的發(fā)展,文章實(shí)時(shí)采集也變得越來(lái)越重要。
優(yōu)采云是一個(gè)專(zhuān)業(yè)的文章實(shí)時(shí)采集工具,可以幫助編輯更快地收集到最新的新聞、資訊和信息,從而及時(shí)發(fā)布最新的文章。優(yōu)采云不僅支持實(shí)時(shí)采集,還包含了多種功能,如SEO優(yōu)化、數據分析和內容分發(fā)等,這些功能都能幫助編輯有效地處理和發(fā)布內容。

優(yōu)采云的優(yōu)勢在于:首先,它可以幫助編輯快速準確地獲得所需信息;其次,它具有SEO優(yōu)化功能,能夠幫助文章在搜索引擎中展示出來(lái);再者,它還能夠幫助用戶(hù)進(jìn)行數據分析和內容分發(fā)工作。此外,優(yōu)采云還有一個(gè)強大的團隊,隨時(shí)提供用戶(hù)服務(wù)和技術(shù)支持。

此外,優(yōu)采云還能夠根據用戶(hù)的需要進(jìn)行擴展或升級。對于小型團隊來(lái)說(shuō),使用優(yōu)采云就好像是雇傭一位專(zhuān)業(yè)的新聞偵察員一樣方便。如此一來(lái),就不需要專(zhuān)門(mén)從事內容采集工作的人員來(lái)手工錄入信息了。

總之,優(yōu)采云是一個(gè)強大而易用的實(shí)時(shí)文章采集工具。通過(guò)使用優(yōu)采云,不僅能夠快速準確地獲得所需信息,而且還能幫助用戶(hù)進(jìn)行SEO優(yōu)化、數據分析和內容分發(fā)工作。想要詳情了解優(yōu)采云的相關(guān)信息、特性、價(jià)格、應用場(chǎng)合等方面的信息,請前往www.bjpromise.cn 。
優(yōu)采云這樣的文章實(shí)時(shí)采集解決方案可以幫助用戶(hù)快速采集內容
采集交流 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 131 次瀏覽 ? 2023-01-13 21:30
文章實(shí)時(shí)采集有助于網(wǎng)站在搜索引擎上獲得更好的排名,因為搜索引擎會(huì )對網(wǎng)站上的內容進(jìn)行審核,如果內容是原創(chuàng )的,就會(huì )對網(wǎng)站進(jìn)行獎勵。而如果內容是從其他網(wǎng)站復制而來(lái),就不會(huì )有任何獎勵。
因此,文章實(shí)時(shí)采集是一項非常有用的工具,但是也要注意避免一些問(wèn)題。例如,不能直接復制某些文章而不注明出處,這樣做會(huì )影響原作者的版權。此外,應該避免采集過(guò)于頻繁,這樣會(huì )造成用戶(hù)體驗不好。
幸運的是,有一些解決方案可以幫助用戶(hù)在文章實(shí)時(shí)采集時(shí)更加高效、安全。例如優(yōu)采云這樣的軟件可以幫助用戶(hù)快速、合法地將文章內容從其他網(wǎng)站復制到自己的網(wǎng)站上。優(yōu)采云不僅能幫助用戶(hù)快速采集內容,還能幫助用戶(hù)做好SEO優(yōu)化工作,使得新聞內容在各大搜索引擎中得到最大化展示。此外,優(yōu)采云也為用戶(hù)提供了友好、易用的界面來(lái)幫助用戶(hù)快速找到合適的內容。
總之,使用優(yōu)采云這樣的文章實(shí)時(shí)采集解決方案可以幫助用戶(hù)快速、合法地將新聞信息從其他網(wǎng)站上復制到自己的網(wǎng)站上,吸引更多流量、增加SEO優(yōu)化效果。想要詳情了解優(yōu)采云的相關(guān)信息可以前往官網(wǎng)www.bjpromise.cn,也可以咨詢(xún)在線(xiàn)客服人員。 查看全部
隨著(zhù)信息技術(shù)的發(fā)展,文章實(shí)時(shí)采集已成為一項重要的網(wǎng)絡(luò )營(yíng)銷(xiāo)方式。文章實(shí)時(shí)采集是將網(wǎng)上其他網(wǎng)站上的文章內容復制并轉發(fā)到自己的網(wǎng)站上,以便獲得更多的流量,吸引更多的用戶(hù)。

文章實(shí)時(shí)采集有助于網(wǎng)站在搜索引擎上獲得更好的排名,因為搜索引擎會(huì )對網(wǎng)站上的內容進(jìn)行審核,如果內容是原創(chuàng )的,就會(huì )對網(wǎng)站進(jìn)行獎勵。而如果內容是從其他網(wǎng)站復制而來(lái),就不會(huì )有任何獎勵。

因此,文章實(shí)時(shí)采集是一項非常有用的工具,但是也要注意避免一些問(wèn)題。例如,不能直接復制某些文章而不注明出處,這樣做會(huì )影響原作者的版權。此外,應該避免采集過(guò)于頻繁,這樣會(huì )造成用戶(hù)體驗不好。

幸運的是,有一些解決方案可以幫助用戶(hù)在文章實(shí)時(shí)采集時(shí)更加高效、安全。例如優(yōu)采云這樣的軟件可以幫助用戶(hù)快速、合法地將文章內容從其他網(wǎng)站復制到自己的網(wǎng)站上。優(yōu)采云不僅能幫助用戶(hù)快速采集內容,還能幫助用戶(hù)做好SEO優(yōu)化工作,使得新聞內容在各大搜索引擎中得到最大化展示。此外,優(yōu)采云也為用戶(hù)提供了友好、易用的界面來(lái)幫助用戶(hù)快速找到合適的內容。
總之,使用優(yōu)采云這樣的文章實(shí)時(shí)采集解決方案可以幫助用戶(hù)快速、合法地將新聞信息從其他網(wǎng)站上復制到自己的網(wǎng)站上,吸引更多流量、增加SEO優(yōu)化效果。想要詳情了解優(yōu)采云的相關(guān)信息可以前往官網(wǎng)www.bjpromise.cn,也可以咨詢(xún)在線(xiàn)客服人員。
優(yōu)采云使用SEO監測工具來(lái)監測SEO優(yōu)化水平?
采集交流 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 81 次瀏覽 ? 2023-01-13 17:35
隨著(zhù)互聯(lián)網(wǎng)的發(fā)展,文章實(shí)時(shí)采集已成為企業(yè)數據處理中不可或缺的一部分。首先,文章實(shí)時(shí)采集可以幫助企業(yè)快速獲取市場(chǎng)信息,從而及時(shí)掌握市場(chǎng)動(dòng)態(tài),并能夠根據市場(chǎng)行情及時(shí)調整產(chǎn)品戰略和市場(chǎng)定位。其次,文章實(shí)時(shí)采集也有助于企業(yè)提升SEO優(yōu)化水平,以便在搜索引擎中獲得最佳位置。
作為一家專(zhuān)業(yè)的文章實(shí)時(shí)采集服務(wù)商,優(yōu)采云將不斷創(chuàng )新、不斷進(jìn)步、不斷開(kāi)拓,針對不同企業(yè)的需求,開(kāi)發(fā)出多元化、高效、易用的文章實(shí)時(shí)采集解決方案。優(yōu)采云使用先進(jìn)的人工智能和機器學(xué)習技術(shù)來(lái)對海量信息進(jìn)行分類(lèi)、識別、存儲和分析,并根據用戶(hù)需要進(jìn)行相應的處理。此外,優(yōu)采云還將根據用戶(hù)需要對信息進(jìn)行初步處理、去噪、去重、去除廣告內容以及關(guān)鍵詞標注等工作。
此外,優(yōu)采云還將不斷引入先進(jìn)的SEO優(yōu)化工具來(lái)幫助用戶(hù)快速獲得權威性?xún)热莶⑻嵘齋EO優(yōu)化水平。例如:使用語(yǔ)義分析工具來(lái)解決內容相關(guān)性問(wèn)題;使用關(guān)鍵詞分析工具來(lái)幫助用戶(hù)快速找出相應的核心詞;使用圖片分割工具來(lái)有效地將圖片內容與文字內容相結合;使用圖片校正工具來(lái)保證圖片尺寸合規;使用SEO優(yōu)化工具來(lái)幫助用戶(hù)快速找出有效核心詞;使用SEO監測工具來(lái)監測SEO效果。
優(yōu)采云是一家專(zhuān)注于新聞信息處理的高科技IT服務(wù)商,地址位于中國上海浦東新區張揚路888號國航大廈1801-1802。如有任何問(wèn)題或者想要了解優(yōu)采云的服務(wù)內容,都可以通過(guò)www.bjpromise.cn 網(wǎng)站進(jìn)行咨詢(xún)。 查看全部
文章實(shí)時(shí)采集是一種自動(dòng)化的網(wǎng)絡(luò )數據抓取技術(shù),它利用特定的網(wǎng)絡(luò )爬蟲(chóng)和內容處理軟件,對互聯(lián)網(wǎng)上的信息進(jìn)行實(shí)時(shí)采集,從而大大提升了企業(yè)數據處理能力和效率。

隨著(zhù)互聯(lián)網(wǎng)的發(fā)展,文章實(shí)時(shí)采集已成為企業(yè)數據處理中不可或缺的一部分。首先,文章實(shí)時(shí)采集可以幫助企業(yè)快速獲取市場(chǎng)信息,從而及時(shí)掌握市場(chǎng)動(dòng)態(tài),并能夠根據市場(chǎng)行情及時(shí)調整產(chǎn)品戰略和市場(chǎng)定位。其次,文章實(shí)時(shí)采集也有助于企業(yè)提升SEO優(yōu)化水平,以便在搜索引擎中獲得最佳位置。

作為一家專(zhuān)業(yè)的文章實(shí)時(shí)采集服務(wù)商,優(yōu)采云將不斷創(chuàng )新、不斷進(jìn)步、不斷開(kāi)拓,針對不同企業(yè)的需求,開(kāi)發(fā)出多元化、高效、易用的文章實(shí)時(shí)采集解決方案。優(yōu)采云使用先進(jìn)的人工智能和機器學(xué)習技術(shù)來(lái)對海量信息進(jìn)行分類(lèi)、識別、存儲和分析,并根據用戶(hù)需要進(jìn)行相應的處理。此外,優(yōu)采云還將根據用戶(hù)需要對信息進(jìn)行初步處理、去噪、去重、去除廣告內容以及關(guān)鍵詞標注等工作。

此外,優(yōu)采云還將不斷引入先進(jìn)的SEO優(yōu)化工具來(lái)幫助用戶(hù)快速獲得權威性?xún)热莶⑻嵘齋EO優(yōu)化水平。例如:使用語(yǔ)義分析工具來(lái)解決內容相關(guān)性問(wèn)題;使用關(guān)鍵詞分析工具來(lái)幫助用戶(hù)快速找出相應的核心詞;使用圖片分割工具來(lái)有效地將圖片內容與文字內容相結合;使用圖片校正工具來(lái)保證圖片尺寸合規;使用SEO優(yōu)化工具來(lái)幫助用戶(hù)快速找出有效核心詞;使用SEO監測工具來(lái)監測SEO效果。
優(yōu)采云是一家專(zhuān)注于新聞信息處理的高科技IT服務(wù)商,地址位于中國上海浦東新區張揚路888號國航大廈1801-1802。如有任何問(wèn)題或者想要了解優(yōu)采云的服務(wù)內容,都可以通過(guò)www.bjpromise.cn 網(wǎng)站進(jìn)行咨詢(xún)。
優(yōu)采云軟件為用戶(hù)提供文章實(shí)時(shí)采集服務(wù)(圖)
采集交流 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 132 次瀏覽 ? 2023-01-12 21:48
優(yōu)采云軟件可以在線(xiàn)搜索、實(shí)時(shí)抓取各類(lèi)新聞、博客、微博和論壇中的最新內容,并把這些信息轉化為文字、圖片或視頻,方便用戶(hù)及時(shí)了解最新動(dòng)態(tài)。同時(shí),優(yōu)采云還支持多樣化的搜索引擎,如Google、Bing、Yahoo等,用戶(hù)可以根據關(guān)鍵詞快速找到所需內容。
此外,優(yōu)采云還為用戶(hù)提供SEO優(yōu)化功能,能夠有效地幫助用戶(hù)將實(shí)時(shí)抓取的內容進(jìn)行SEO優(yōu)化處理,使之在搜索引擎中顯得更加突出。通過(guò)SEO優(yōu)化后的內容,用戶(hù)可以得到更好的搜索引擎流量,從而獲得更多的瀏覽量和關(guān)注度。
另外,優(yōu)采云還具有數據分析功能,能夠根據用戶(hù)所需要的信息進(jìn)行數據分類(lèi),并對數據進(jìn)行分類(lèi)和分析處理。這樣一來(lái),用戶(hù)就可以方便快速地對新聞、博客、微博和論壇中相關(guān)信息進(jìn)行歸類(lèi)與分類(lèi)處理,并對數據形成思想和思考觀(guān)點(diǎn)。
總而言之,優(yōu)采云是一個(gè)強大的文章實(shí)時(shí)采集工具,能夠有效地幫助用戶(hù)實(shí)時(shí)抓取內容、SEO優(yōu)化內容和進(jìn)行數據分類(lèi)分析。如想要詳細了解優(yōu)采云的相關(guān)信息并想要使用該軟件來(lái)幫助你開(kāi)展相關(guān)工作,請訪(fǎng)問(wèn)官網(wǎng)www.bjpromise.cn 了解詳情。 查看全部
文章實(shí)時(shí)采集是一項重要的任務(wù),尤其是對于網(wǎng)絡(luò )傳播的媒體來(lái)說(shuō),更是日常工作必不可少的重要內容。優(yōu)采云是一款強大的文章實(shí)時(shí)采集軟件,能夠有效地為用戶(hù)提供文章實(shí)時(shí)采集服務(wù)。

優(yōu)采云軟件可以在線(xiàn)搜索、實(shí)時(shí)抓取各類(lèi)新聞、博客、微博和論壇中的最新內容,并把這些信息轉化為文字、圖片或視頻,方便用戶(hù)及時(shí)了解最新動(dòng)態(tài)。同時(shí),優(yōu)采云還支持多樣化的搜索引擎,如Google、Bing、Yahoo等,用戶(hù)可以根據關(guān)鍵詞快速找到所需內容。

此外,優(yōu)采云還為用戶(hù)提供SEO優(yōu)化功能,能夠有效地幫助用戶(hù)將實(shí)時(shí)抓取的內容進(jìn)行SEO優(yōu)化處理,使之在搜索引擎中顯得更加突出。通過(guò)SEO優(yōu)化后的內容,用戶(hù)可以得到更好的搜索引擎流量,從而獲得更多的瀏覽量和關(guān)注度。

另外,優(yōu)采云還具有數據分析功能,能夠根據用戶(hù)所需要的信息進(jìn)行數據分類(lèi),并對數據進(jìn)行分類(lèi)和分析處理。這樣一來(lái),用戶(hù)就可以方便快速地對新聞、博客、微博和論壇中相關(guān)信息進(jìn)行歸類(lèi)與分類(lèi)處理,并對數據形成思想和思考觀(guān)點(diǎn)。
總而言之,優(yōu)采云是一個(gè)強大的文章實(shí)時(shí)采集工具,能夠有效地幫助用戶(hù)實(shí)時(shí)抓取內容、SEO優(yōu)化內容和進(jìn)行數據分類(lèi)分析。如想要詳細了解優(yōu)采云的相關(guān)信息并想要使用該軟件來(lái)幫助你開(kāi)展相關(guān)工作,請訪(fǎng)問(wèn)官網(wǎng)www.bjpromise.cn 了解詳情。
優(yōu)采云SEO優(yōu)化,一鍵發(fā)布,數據分析(圖)
采集交流 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 87 次瀏覽 ? 2023-01-12 16:17
優(yōu)采云是一款多功能的文章實(shí)時(shí)采集軟件,可以讓用戶(hù)快速準確地實(shí)時(shí)收集各種信息。首先,優(yōu)采云可以幫助用戶(hù)快速地獲取最新的新聞、博客文章和其他信息,使用戶(hù)能夠更快地獲得最新的信息。其次,優(yōu)采云可以進(jìn)行SEO優(yōu)化,為用戶(hù)創(chuàng )建高質(zhì)量的內容,使其能夠更好地排名和被搜索引擎找到。此外,優(yōu)采云還可以幫助用戶(hù)篩選出高質(zhì)量的內容,并支持多個(gè)網(wǎng)站同時(shí)采集數據,使得整個(gè)數據的采集工作變得簡(jiǎn)單快速。
此外,優(yōu)采云還有一個(gè)獨特的特性就是“一鍵發(fā)布”功能。該功能可以幫助用戶(hù)將所有采集到的內容一鍵發(fā)布到各大平臺上(如微博、QQ空間、Facebook等),省去手動(dòng)發(fā)布內容的步驟。此外,優(yōu)采云還有一個(gè)強大的數據分析功能,用戶(hù)可以根據不同情況對已經(jīng)采集到的數據進(jìn)行分析和監測(如話(huà)題/欄目/作者/回復數/瀏覽人數/時(shí)效性等)。
總之,優(yōu)采云是一個(gè)功能強大、易用性強的文章實(shí)時(shí)采集軟件.其強大的功能不僅方便用戶(hù)快速、準確地獲取信息,還能幫助用戶(hù)進(jìn)行SEO優(yōu)化,一鍵發(fā)布,數據分析,帶來(lái)了前所未有的體驗.如想要使用優(yōu)采云,只要去它的官網(wǎng)www.bjpromise.cn就可以進(jìn)行注冊和使用. 查看全部
文章實(shí)時(shí)采集是近年來(lái)越來(lái)越流行的一種網(wǎng)絡(luò )采集方式,它可以將來(lái)自不同源的新聞、博客文章和其他信息匯總到一個(gè)地方,便于用戶(hù)的閱讀。優(yōu)采云是一款功能強大的文章實(shí)時(shí)采集軟件,可以幫助用戶(hù)快速、有效地獲取最新的新聞、博客文章和其他信息,并進(jìn)行SEO優(yōu)化,有效解決信息采集難題。

優(yōu)采云是一款多功能的文章實(shí)時(shí)采集軟件,可以讓用戶(hù)快速準確地實(shí)時(shí)收集各種信息。首先,優(yōu)采云可以幫助用戶(hù)快速地獲取最新的新聞、博客文章和其他信息,使用戶(hù)能夠更快地獲得最新的信息。其次,優(yōu)采云可以進(jìn)行SEO優(yōu)化,為用戶(hù)創(chuàng )建高質(zhì)量的內容,使其能夠更好地排名和被搜索引擎找到。此外,優(yōu)采云還可以幫助用戶(hù)篩選出高質(zhì)量的內容,并支持多個(gè)網(wǎng)站同時(shí)采集數據,使得整個(gè)數據的采集工作變得簡(jiǎn)單快速。

此外,優(yōu)采云還有一個(gè)獨特的特性就是“一鍵發(fā)布”功能。該功能可以幫助用戶(hù)將所有采集到的內容一鍵發(fā)布到各大平臺上(如微博、QQ空間、Facebook等),省去手動(dòng)發(fā)布內容的步驟。此外,優(yōu)采云還有一個(gè)強大的數據分析功能,用戶(hù)可以根據不同情況對已經(jīng)采集到的數據進(jìn)行分析和監測(如話(huà)題/欄目/作者/回復數/瀏覽人數/時(shí)效性等)。

總之,優(yōu)采云是一個(gè)功能強大、易用性強的文章實(shí)時(shí)采集軟件.其強大的功能不僅方便用戶(hù)快速、準確地獲取信息,還能幫助用戶(hù)進(jìn)行SEO優(yōu)化,一鍵發(fā)布,數據分析,帶來(lái)了前所未有的體驗.如想要使用優(yōu)采云,只要去它的官網(wǎng)www.bjpromise.cn就可以進(jìn)行注冊和使用.
優(yōu)采云是一款相當出色的文章實(shí)時(shí)采集軟件
采集交流 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 103 次瀏覽 ? 2023-01-12 15:15
優(yōu)采云是一款專(zhuān)業(yè)的文章實(shí)時(shí)采集軟件,它利用SEO優(yōu)化技術(shù)對內容進(jìn)行處理,使得采集到的內容更加有價(jià)值、有效。同時(shí),該軟件支持多種格式的內容采集,包括圖片、音頻、視頻、新聞等,只要用戶(hù)將關(guān)注的關(guān)鍵詞輸入到優(yōu)采云中,就能夠快速地將所需內容進(jìn)行采集。
此外,優(yōu)采云還有一個(gè)獨特的特性——“一鍵發(fā)布”功能。用戶(hù)在選中所需要的內容后,就可以使用“一鍵發(fā)布”功能快速將內容發(fā)布到對應平臺上去,如博客、微信、微博等。用戶(hù)只需要將所要發(fā)布平臺的信息輸入進(jìn)去就行了,不必耗費大量時(shí)間去手動(dòng)上傳圖片或文字。
此外,優(yōu)采云還有一個(gè)獨特的特性——“一鍵生成”功能。通過(guò)該功能,用戶(hù)可以快速地將所選中的內容生成html格式代碼,然后將代碼復制到對應平臺即可。
總之,優(yōu)采云是一款出色的文章實(shí)時(shí)采集軟件。該軟件擁有SEO優(yōu)化功能、多樣格式內容采集功能、一鍵發(fā)布功能和一鍵生成功能四大特性。如果你想快速地將新聞和信息采集到你的博客上去,不妨試試優(yōu)采云吧!它的官網(wǎng)是www.bjpromise.cn。 查看全部
文章實(shí)時(shí)采集是一項新興的網(wǎng)絡(luò )技術(shù),它可以幫助網(wǎng)站主或博客主快速采集關(guān)于自己感興趣的內容,以便及時(shí)地將新鮮內容發(fā)布到網(wǎng)站上。近年來(lái),隨著(zhù)互聯(lián)網(wǎng)技術(shù)的發(fā)展,文章實(shí)時(shí)采集技術(shù)也不斷取得進(jìn)步,各種類(lèi)型的采集軟件也相繼推出,其中優(yōu)采云是一款相當出色的文章實(shí)時(shí)采集軟件。

優(yōu)采云是一款專(zhuān)業(yè)的文章實(shí)時(shí)采集軟件,它利用SEO優(yōu)化技術(shù)對內容進(jìn)行處理,使得采集到的內容更加有價(jià)值、有效。同時(shí),該軟件支持多種格式的內容采集,包括圖片、音頻、視頻、新聞等,只要用戶(hù)將關(guān)注的關(guān)鍵詞輸入到優(yōu)采云中,就能夠快速地將所需內容進(jìn)行采集。

此外,優(yōu)采云還有一個(gè)獨特的特性——“一鍵發(fā)布”功能。用戶(hù)在選中所需要的內容后,就可以使用“一鍵發(fā)布”功能快速將內容發(fā)布到對應平臺上去,如博客、微信、微博等。用戶(hù)只需要將所要發(fā)布平臺的信息輸入進(jìn)去就行了,不必耗費大量時(shí)間去手動(dòng)上傳圖片或文字。

此外,優(yōu)采云還有一個(gè)獨特的特性——“一鍵生成”功能。通過(guò)該功能,用戶(hù)可以快速地將所選中的內容生成html格式代碼,然后將代碼復制到對應平臺即可。
總之,優(yōu)采云是一款出色的文章實(shí)時(shí)采集軟件。該軟件擁有SEO優(yōu)化功能、多樣格式內容采集功能、一鍵發(fā)布功能和一鍵生成功能四大特性。如果你想快速地將新聞和信息采集到你的博客上去,不妨試試優(yōu)采云吧!它的官網(wǎng)是www.bjpromise.cn。
優(yōu)采云采集器讓文章實(shí)時(shí)采集工具更方便(圖)
采集交流 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 123 次瀏覽 ? 2022-12-28 01:15
隨著(zhù)當今互聯(lián)網(wǎng)的發(fā)展,實(shí)時(shí)采集的需求越來(lái)越大,也有越來(lái)越多的產(chǎn)品出現在市場(chǎng)上,但是如何選擇合適的產(chǎn)品并不容易。這里建議大家可以考慮一下優(yōu)采云采集器,這是一款由北京優(yōu)勝采集技術(shù)有限公司開(kāi)發(fā)的新一代文章實(shí)時(shí)采集工具。
優(yōu)采云采集器特別注重用戶(hù)體驗,擁有強大的數據采集能力、數據分析功能、文章質(zhì)量評分機制以及個(gè)性化創(chuàng )作導航等多項功能,可以幫助用戶(hù)快速準確地將所需信息從海量文章中進(jìn)行篩選、整理和歸類(lèi)。
此外,優(yōu)采云采集器還擁有獨特而強大的“AI+語(yǔ)義標注”功能,針對不同話(huà)題可以快速準確地將相關(guān)內容進(jìn)行標注,讓信息歸類(lèi)變得十分便利。此外,還有針對性強、使用方便、準確性高的新聞實(shí)時(shí)推送列表,可以幫助用戶(hù)快速定位到所需內容。
優(yōu)采云采集器還支持多平臺使用,包括PC端、APP端和微信小程序端。不同平臺上都具有相同的功能:快速、便捷地將所需信息從海量文章中進(jìn)行歸類(lèi)整理。
使用優(yōu)采云采集器所得到的文章也是十分優(yōu)質(zhì)的。優(yōu)采云采集器不但具有強大的信息裁剪功能,而且還具備專(zhuān)業(yè)化評分機制:根據文章內容、時(shí)效性、版權歸屬保障以及去水印處理等四個(gè)方面對文章進(jìn)行評判。此外,還具有一套實(shí)時(shí)檢測保障新聞?wù)鎸?shí)性的版權保障體系。
總而言之,優(yōu)采云采集器是一個(gè)十分出色的文章實(shí)時(shí)采集工具:既方便易用、準確性高、耗時(shí)少、內容優(yōu)質(zhì);同時(shí)也可以幫助用戶(hù)快速整理新聞內容并檢測真實(shí)性。想要嘗試使用優(yōu)采云采集器的話(huà)就快去www.bjpromise.cn上去看看吧~ 查看全部
文章實(shí)時(shí)采集,是現在網(wǎng)絡(luò )語(yǔ)境下許多用戶(hù)最想要擁有的功能。此類(lèi)功能可以幫助用戶(hù)快速、高效地把相關(guān)信息采集歸類(lèi),從而提升用戶(hù)的工作效率,也會(huì )為用戶(hù)的工作帶來(lái)很大的便利。
隨著(zhù)當今互聯(lián)網(wǎng)的發(fā)展,實(shí)時(shí)采集的需求越來(lái)越大,也有越來(lái)越多的產(chǎn)品出現在市場(chǎng)上,但是如何選擇合適的產(chǎn)品并不容易。這里建議大家可以考慮一下優(yōu)采云采集器,這是一款由北京優(yōu)勝采集技術(shù)有限公司開(kāi)發(fā)的新一代文章實(shí)時(shí)采集工具。

優(yōu)采云采集器特別注重用戶(hù)體驗,擁有強大的數據采集能力、數據分析功能、文章質(zhì)量評分機制以及個(gè)性化創(chuàng )作導航等多項功能,可以幫助用戶(hù)快速準確地將所需信息從海量文章中進(jìn)行篩選、整理和歸類(lèi)。
此外,優(yōu)采云采集器還擁有獨特而強大的“AI+語(yǔ)義標注”功能,針對不同話(huà)題可以快速準確地將相關(guān)內容進(jìn)行標注,讓信息歸類(lèi)變得十分便利。此外,還有針對性強、使用方便、準確性高的新聞實(shí)時(shí)推送列表,可以幫助用戶(hù)快速定位到所需內容。

優(yōu)采云采集器還支持多平臺使用,包括PC端、APP端和微信小程序端。不同平臺上都具有相同的功能:快速、便捷地將所需信息從海量文章中進(jìn)行歸類(lèi)整理。
使用優(yōu)采云采集器所得到的文章也是十分優(yōu)質(zhì)的。優(yōu)采云采集器不但具有強大的信息裁剪功能,而且還具備專(zhuān)業(yè)化評分機制:根據文章內容、時(shí)效性、版權歸屬保障以及去水印處理等四個(gè)方面對文章進(jìn)行評判。此外,還具有一套實(shí)時(shí)檢測保障新聞?wù)鎸?shí)性的版權保障體系。
總而言之,優(yōu)采云采集器是一個(gè)十分出色的文章實(shí)時(shí)采集工具:既方便易用、準確性高、耗時(shí)少、內容優(yōu)質(zhì);同時(shí)也可以幫助用戶(hù)快速整理新聞內容并檢測真實(shí)性。想要嘗試使用優(yōu)采云采集器的話(huà)就快去www.bjpromise.cn上去看看吧~
文章實(shí)時(shí)采集:優(yōu)采云采集器讓你擁有自動(dòng)化爬取網(wǎng)頁(yè)的能力
采集交流 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 87 次瀏覽 ? 2022-12-27 22:30
近幾年,由于互聯(lián)網(wǎng)的發(fā)展,在線(xiàn)內容的更新速度越來(lái)越快,從而對我們的日常工作帶來(lái)了一定的挑戰。抓取、整理、歸類(lèi)和分析在線(xiàn)信息變得愈發(fā)重要,而文章實(shí)時(shí)采集正是我們實(shí)現這一目標的有效手段之一。
眾所周知,文章實(shí)時(shí)采集是將大量網(wǎng)頁(yè)上的內容通過(guò)特定的方式,以較快的速度、較好的效果從原始網(wǎng)站抓取下來(lái),并存儲到本地數據庫中。這就為我們帶來(lái)了便利,因為不需要人工去整理大量信息,也不會(huì )浪費太多時(shí)間去尋找想要的內容。
如今,優(yōu)采云采集器引入了先進(jìn)的文章實(shí)時(shí)采集服務(wù),令人眼前一亮。該服務(wù)能夠讓用戶(hù)在不需要復雜代碼、開(kāi)發(fā)者協(xié)助或者是特殊工具情況下,就能夠方便地從各大熱門(mén)網(wǎng)站上獲取到最新、最相關(guān)的信息。
優(yōu)采云采集器使用方便易行,用戶(hù)只需要根據自己的需要對優(yōu)采云采集器進(jìn)行一番配置即可。優(yōu)采云采集器還能夠根據用戶(hù)定義的關(guān)鍵字去匹配想要獲取的內容,并支持多頁(yè)面歸總功能。而且該服務(wù)也能夠保證數據準確性和真實(shí)性,從而避免出現信息不準確、甚至是被劫持之后顯示有誤導性?xún)热莸那闆r。
隨著(zhù)人工智能、大數據和物聯(lián)網(wǎng)的不斷發(fā)展壯大,對信息快速準確地進(jìn)行分析、整理和歸總變得愈發(fā)重要。 查看全部
文章實(shí)時(shí)采集:優(yōu)采云采集器讓你擁有自動(dòng)化爬取網(wǎng)頁(yè)的能力
近幾年,由于互聯(lián)網(wǎng)的發(fā)展,在線(xiàn)內容的更新速度越來(lái)越快,從而對我們的日常工作帶來(lái)了一定的挑戰。抓取、整理、歸類(lèi)和分析在線(xiàn)信息變得愈發(fā)重要,而文章實(shí)時(shí)采集正是我們實(shí)現這一目標的有效手段之一。

眾所周知,文章實(shí)時(shí)采集是將大量網(wǎng)頁(yè)上的內容通過(guò)特定的方式,以較快的速度、較好的效果從原始網(wǎng)站抓取下來(lái),并存儲到本地數據庫中。這就為我們帶來(lái)了便利,因為不需要人工去整理大量信息,也不會(huì )浪費太多時(shí)間去尋找想要的內容。
如今,優(yōu)采云采集器引入了先進(jìn)的文章實(shí)時(shí)采集服務(wù),令人眼前一亮。該服務(wù)能夠讓用戶(hù)在不需要復雜代碼、開(kāi)發(fā)者協(xié)助或者是特殊工具情況下,就能夠方便地從各大熱門(mén)網(wǎng)站上獲取到最新、最相關(guān)的信息。

優(yōu)采云采集器使用方便易行,用戶(hù)只需要根據自己的需要對優(yōu)采云采集器進(jìn)行一番配置即可。優(yōu)采云采集器還能夠根據用戶(hù)定義的關(guān)鍵字去匹配想要獲取的內容,并支持多頁(yè)面歸總功能。而且該服務(wù)也能夠保證數據準確性和真實(shí)性,從而避免出現信息不準確、甚至是被劫持之后顯示有誤導性?xún)热莸那闆r。
隨著(zhù)人工智能、大數據和物聯(lián)網(wǎng)的不斷發(fā)展壯大,對信息快速準確地進(jìn)行分析、整理和歸總變得愈發(fā)重要。
優(yōu)采云采集器就是你所需要的工具
采集交流 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 115 次瀏覽 ? 2022-12-27 17:26
優(yōu)采云采集器,是一款功能強大的實(shí)時(shí)采集工具,可以為用戶(hù)提供最新、最準確的信息。在優(yōu)采云采集器中,用戶(hù)可以輕松地實(shí)時(shí)采集各種Web信息,從而獲得最新、最準確的內容。
優(yōu)采云采集器還具備強大的數據處理能力,可以根據用戶(hù)的需求快速將原始數據進(jìn)行分析、清理、壓縮、加工等處理。此外,還可以根據不同的需求提供不同格式的數據導出:HTML、XML、JSON等。
此外,優(yōu)采云采集器還具備多個(gè)賬號同時(shí)使用功能,讓用戶(hù)可以快速地進(jìn)行信息分享和協(xié)作。此外,還有一鍵式監測功能,可以讓用戶(hù)快速監測到最新發(fā)布的文章內容,從而節省大量時(shí)間。
總之,優(yōu)采云采集器是一個(gè)非常好用的實(shí)時(shí)信息采集工具。它不僅可以快速準確地定位所需要的內容,而且還具備強大的數據處理能力和多個(gè)賬號合作功能;此外還具有監測功能,能節省大量時(shí)間。如果你想要快速準確地獲取最新信息并整理成你想要的格式,那么優(yōu)采云采集器就是你所需要的工具(www.ucaiyun. 查看全部
文章實(shí)時(shí)采集,是現今網(wǎng)上信息采集的一種重要方式。隨著(zhù)新聞、博客、論壇、期刊等各種文章的不斷發(fā)布,如何快速準確地定位到想要的內容,已成為很多人面臨的一個(gè)共同問(wèn)題。優(yōu)采云采集器(www.bjpromise.cn)正是為解決這個(gè)問(wèn)題而誕生的。
優(yōu)采云采集器,是一款功能強大的實(shí)時(shí)采集工具,可以為用戶(hù)提供最新、最準確的信息。在優(yōu)采云采集器中,用戶(hù)可以輕松地實(shí)時(shí)采集各種Web信息,從而獲得最新、最準確的內容。

優(yōu)采云采集器還具備強大的數據處理能力,可以根據用戶(hù)的需求快速將原始數據進(jìn)行分析、清理、壓縮、加工等處理。此外,還可以根據不同的需求提供不同格式的數據導出:HTML、XML、JSON等。

此外,優(yōu)采云采集器還具備多個(gè)賬號同時(shí)使用功能,讓用戶(hù)可以快速地進(jìn)行信息分享和協(xié)作。此外,還有一鍵式監測功能,可以讓用戶(hù)快速監測到最新發(fā)布的文章內容,從而節省大量時(shí)間。
總之,優(yōu)采云采集器是一個(gè)非常好用的實(shí)時(shí)信息采集工具。它不僅可以快速準確地定位所需要的內容,而且還具備強大的數據處理能力和多個(gè)賬號合作功能;此外還具有監測功能,能節省大量時(shí)間。如果你想要快速準確地獲取最新信息并整理成你想要的格式,那么優(yōu)采云采集器就是你所需要的工具(www.ucaiyun.
解決方案:文章實(shí)時(shí)采集:優(yōu)采云采集器幫你輕松解決
采集交流 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 105 次瀏覽 ? 2022-12-27 16:22
文章實(shí)時(shí)采集:優(yōu)采云采集器幫你輕松解決
新聞信息、產(chǎn)品介紹、技術(shù)文檔等,都是日常生活或工作中常見(jiàn)的內容。隨著(zhù)網(wǎng)絡(luò )的發(fā)展,很多信息可以在網(wǎng)上獲取,但很多人發(fā)現,如果要從大量的文章中獲取有用的信息,這是一項非常耗時(shí)且不能保證準確性的工作。
針對這種情況,優(yōu)采云采集器應運而生。優(yōu)采云采集器是一款強大的數據采集工具,可以幫助用戶(hù)快速準確地從海量文章中獲取有用的信息,減少了手動(dòng)搜索的工作量。
優(yōu)采云采集器具有多功能。它不僅可以快速準確地從海量文章中獲取有用的信息,而且可以實(shí)時(shí)監測新聞、公告、博客、平臺等多個(gè)板塊的數據變化情況,并能夠根據用戶(hù)需要實(shí)時(shí)將數據導出。此外,優(yōu)采云采集器還能為用戶(hù)節省大量學(xué)習成本,使得不同行業(yè)的用戶(hù)都能輕松使用。
此外,優(yōu)采云采集器還為用戶(hù)提供了先進(jìn)的數據分析功能。優(yōu)采云采集器可以幫助用戶(hù)快速分析數據特征并將分析結果形象化呈現出來(lái)。此外,優(yōu)采云采集器還能根據特征列表快速找到新聞相關(guān)評論并分析評論情感,為市場(chǎng)行為判斷、輿情判斷、競爭數據追蹤、電子商務(wù)銷(xiāo)售判斷等方面的決策奠定基礎。
總而言之,優(yōu)采云采集器是一站式數字化整合解決方案供應商,能幫助用戶(hù)快速準確地從海量文章中獲取有用信息、實(shí)時(shí)監測數據變化情況、先進(jìn)的數據分析功能并將分析結果形象化呈現出來(lái)。如果你還在為通過(guò)海量數據快速獲取有用信息而煩惱,就到www.bjpromise.cn上注冊使用優(yōu)采云采集器,幫你快速有效解決這一問(wèn)題吧! 查看全部
解決方案:文章實(shí)時(shí)采集:優(yōu)采云采集器幫你輕松解決
文章實(shí)時(shí)采集:優(yōu)采云采集器幫你輕松解決

新聞信息、產(chǎn)品介紹、技術(shù)文檔等,都是日常生活或工作中常見(jiàn)的內容。隨著(zhù)網(wǎng)絡(luò )的發(fā)展,很多信息可以在網(wǎng)上獲取,但很多人發(fā)現,如果要從大量的文章中獲取有用的信息,這是一項非常耗時(shí)且不能保證準確性的工作。
針對這種情況,優(yōu)采云采集器應運而生。優(yōu)采云采集器是一款強大的數據采集工具,可以幫助用戶(hù)快速準確地從海量文章中獲取有用的信息,減少了手動(dòng)搜索的工作量。

優(yōu)采云采集器具有多功能。它不僅可以快速準確地從海量文章中獲取有用的信息,而且可以實(shí)時(shí)監測新聞、公告、博客、平臺等多個(gè)板塊的數據變化情況,并能夠根據用戶(hù)需要實(shí)時(shí)將數據導出。此外,優(yōu)采云采集器還能為用戶(hù)節省大量學(xué)習成本,使得不同行業(yè)的用戶(hù)都能輕松使用。
此外,優(yōu)采云采集器還為用戶(hù)提供了先進(jìn)的數據分析功能。優(yōu)采云采集器可以幫助用戶(hù)快速分析數據特征并將分析結果形象化呈現出來(lái)。此外,優(yōu)采云采集器還能根據特征列表快速找到新聞相關(guān)評論并分析評論情感,為市場(chǎng)行為判斷、輿情判斷、競爭數據追蹤、電子商務(wù)銷(xiāo)售判斷等方面的決策奠定基礎。
總而言之,優(yōu)采云采集器是一站式數字化整合解決方案供應商,能幫助用戶(hù)快速準確地從海量文章中獲取有用信息、實(shí)時(shí)監測數據變化情況、先進(jìn)的數據分析功能并將分析結果形象化呈現出來(lái)。如果你還在為通過(guò)海量數據快速獲取有用信息而煩惱,就到www.bjpromise.cn上注冊使用優(yōu)采云采集器,幫你快速有效解決這一問(wèn)題吧!
秘密:優(yōu)采云采集器讓內容工作者松了一口氣!
采集交流 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 338 次瀏覽 ? 2022-12-27 01:15
文章實(shí)時(shí)采集一直是內容工作者的頭疼問(wèn)題,每天從網(wǎng)上搜集、整理有價(jià)值的內容,既耗費大量時(shí)間又枯燥乏味,這是一個(gè)永無(wú)止境的過(guò)程。但隨著(zhù)互聯(lián)網(wǎng)技術(shù)的不斷發(fā)展,如今出現了文章實(shí)時(shí)采集這一利器,讓眾多內容工作者松了一口氣。
文章實(shí)時(shí)采集是指能夠根據用戶(hù)設定的關(guān)鍵詞或分類(lèi)獲取最新的信息、新聞及帖子,并將其帶回用戶(hù)。在實(shí)時(shí)采集中,用戶(hù)可以選擇各種數據來(lái)源、制定數據采集頻率、保存原始內容、展示數據的方式,以及其他各種功能。一般使用語(yǔ)言為php+mysql+ajax+js+css,也有使用python開(kāi)發(fā)的。
優(yōu)采云采集器就是其中之一。優(yōu)采云采集器是國內專(zhuān)業(yè)新聞采集工具,可以快速實(shí)時(shí)抓取各大媒體平臺上的新聞、博客、微博、微信等海量數據;同時(shí)支持遠程API對外服務(wù);獨特的“根據URL準確匹配”功能可以解決URL地址多樣化帶來(lái)的正則表達式匹配困難;不僅能快速準確采集海量數據,而且能夠保證數據真實(shí)性。
此外,優(yōu)采云采集器還具有擴展性強、易部署部分特性。優(yōu) 查看全部
秘密:優(yōu)采云采集器讓內容工作者松了一口氣!
文章實(shí)時(shí)采集一直是內容工作者的頭疼問(wèn)題,每天從網(wǎng)上搜集、整理有價(jià)值的內容,既耗費大量時(shí)間又枯燥乏味,這是一個(gè)永無(wú)止境的過(guò)程。但隨著(zhù)互聯(lián)網(wǎng)技術(shù)的不斷發(fā)展,如今出現了文章實(shí)時(shí)采集這一利器,讓眾多內容工作者松了一口氣。

文章實(shí)時(shí)采集是指能夠根據用戶(hù)設定的關(guān)鍵詞或分類(lèi)獲取最新的信息、新聞及帖子,并將其帶回用戶(hù)。在實(shí)時(shí)采集中,用戶(hù)可以選擇各種數據來(lái)源、制定數據采集頻率、保存原始內容、展示數據的方式,以及其他各種功能。一般使用語(yǔ)言為php+mysql+ajax+js+css,也有使用python開(kāi)發(fā)的。

優(yōu)采云采集器就是其中之一。優(yōu)采云采集器是國內專(zhuān)業(yè)新聞采集工具,可以快速實(shí)時(shí)抓取各大媒體平臺上的新聞、博客、微博、微信等海量數據;同時(shí)支持遠程API對外服務(wù);獨特的“根據URL準確匹配”功能可以解決URL地址多樣化帶來(lái)的正則表達式匹配困難;不僅能快速準確采集海量數據,而且能夠保證數據真實(shí)性。
此外,優(yōu)采云采集器還具有擴展性強、易部署部分特性。優(yōu)
解決方案:優(yōu)采云采集器:幫助用戶(hù)快速有效地對數千條
采集交流 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 149 次瀏覽 ? 2022-12-26 17:29
文章實(shí)時(shí)采集是一種便捷的內容采集方式,它讓人們可以輕松地采集網(wǎng)上的文章、圖片、視頻等多媒體信息。隨著(zhù)互聯(lián)網(wǎng)時(shí)代的發(fā)展,文章實(shí)時(shí)采集技術(shù)也不斷改進(jìn),為用戶(hù)提供了更加便捷的采集服務(wù)。
優(yōu)采云采集器(YouCai Collector)是一款專(zhuān)業(yè)的文章實(shí)時(shí)采集工具,它可以幫助用戶(hù)快速有效地實(shí)現文章實(shí)時(shí)采集。該軟件擁有強大的爬蟲(chóng)能力,能夠快速精準地搜索并抓取用戶(hù)所需要的內容,同時(shí)具備強大的過(guò)濾功能,可以根據用戶(hù)的需要進(jìn)行內容過(guò)濾,從而減少用戶(hù)手動(dòng)篩選內容的工作量。
此外,YouCai Collector還支持各種多媒體信息的采集和下載,包括圖片、新聞、視頻、博客、微博等。它可以幫助用戶(hù)快速有效地對數千條不同內容進(jìn)行歸類(lèi)和分類(lèi);而且可以將所有內容直接導出到Excel表格中。此外,YouCai Collector還具備很多其他獨特的功能:
一、語(yǔ)義分析功能 – YouCai Collector可以幫助用戶(hù)分析出不同文章之間的語(yǔ)義差異;
二、AI 智能判斷 – YouCai Collector可以根據用戶(hù)所需要的內容對信息進(jìn)行 AI 智能判斷;
三、情感分析 – 可以對不同內容進(jìn)行情感分析;
四、數字化 – 可以將原始信息數字化并存儲在數據庫中。
YouCai Collector 的優(yōu)勢在于可以大大減少人員測試所需要花費的時(shí)間和精力。此外,YouCai Collector 還具有易用性強、界面友好、使用方便、適應性強等優(yōu)勢。YouCai Collector 能夠大大減少人工測試所耗費的時(shí)間和精力。
總之,YouCai Collector 是一款強大而易用的文章實(shí)時(shí)采集工具。該工具具有強大的爬蟲(chóng)能力和AI 智能判斷能力 ,能夠幫助用戶(hù)快速有效地實(shí)現信息采集與運用。如今,YouCai Collector 已成為市場(chǎng)上最流行的文章實(shí)時(shí)采集工具之一。 查看全部
解決方案:優(yōu)采云采集器:幫助用戶(hù)快速有效地對數千條
文章實(shí)時(shí)采集是一種便捷的內容采集方式,它讓人們可以輕松地采集網(wǎng)上的文章、圖片、視頻等多媒體信息。隨著(zhù)互聯(lián)網(wǎng)時(shí)代的發(fā)展,文章實(shí)時(shí)采集技術(shù)也不斷改進(jìn),為用戶(hù)提供了更加便捷的采集服務(wù)。
優(yōu)采云采集器(YouCai Collector)是一款專(zhuān)業(yè)的文章實(shí)時(shí)采集工具,它可以幫助用戶(hù)快速有效地實(shí)現文章實(shí)時(shí)采集。該軟件擁有強大的爬蟲(chóng)能力,能夠快速精準地搜索并抓取用戶(hù)所需要的內容,同時(shí)具備強大的過(guò)濾功能,可以根據用戶(hù)的需要進(jìn)行內容過(guò)濾,從而減少用戶(hù)手動(dòng)篩選內容的工作量。

此外,YouCai Collector還支持各種多媒體信息的采集和下載,包括圖片、新聞、視頻、博客、微博等。它可以幫助用戶(hù)快速有效地對數千條不同內容進(jìn)行歸類(lèi)和分類(lèi);而且可以將所有內容直接導出到Excel表格中。此外,YouCai Collector還具備很多其他獨特的功能:
一、語(yǔ)義分析功能 – YouCai Collector可以幫助用戶(hù)分析出不同文章之間的語(yǔ)義差異;
二、AI 智能判斷 – YouCai Collector可以根據用戶(hù)所需要的內容對信息進(jìn)行 AI 智能判斷;

三、情感分析 – 可以對不同內容進(jìn)行情感分析;
四、數字化 – 可以將原始信息數字化并存儲在數據庫中。
YouCai Collector 的優(yōu)勢在于可以大大減少人員測試所需要花費的時(shí)間和精力。此外,YouCai Collector 還具有易用性強、界面友好、使用方便、適應性強等優(yōu)勢。YouCai Collector 能夠大大減少人工測試所耗費的時(shí)間和精力。
總之,YouCai Collector 是一款強大而易用的文章實(shí)時(shí)采集工具。該工具具有強大的爬蟲(chóng)能力和AI 智能判斷能力 ,能夠幫助用戶(hù)快速有效地實(shí)現信息采集與運用。如今,YouCai Collector 已成為市場(chǎng)上最流行的文章實(shí)時(shí)采集工具之一。
解決方案:【實(shí)時(shí)數倉】DWD層需求分析及實(shí)現思路、idea環(huán)境搭建、實(shí)現DWD層處理用戶(hù)行
采集交流 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 119 次瀏覽 ? 2022-12-20 05:12
文章目錄
一、DWD層需求分析及實(shí)現思路 1、分層需求分析
構建實(shí)時(shí)數倉的目的主要是增加數據計算的復用性。 每增加一個(gè)新的統計要求,不是從原來(lái)的數據計算,而是從半成品繼續加工。
這里從kafka的ods層讀取用戶(hù)行為日志和業(yè)務(wù)數據,簡(jiǎn)單處理后,作為dwd層回寫(xiě)給kafka。
2 各層功能分層數據描述 生成計算工具 存儲介質(zhì)
消耗臭氧層物質(zhì)
原創(chuàng )數據、日志和業(yè)務(wù)數據
日志服務(wù)器,麥克斯韋
卡夫卡
DWD
流式處理是以數據對象為單位進(jìn)行的,例如訂單、頁(yè)面訪(fǎng)問(wèn)量等。
弗林克
卡夫卡
DWM
對于一些數據對象的進(jìn)一步處理,比如獨立訪(fǎng)問(wèn),跳出行為。 還是詳細的數據。
弗林克
卡夫卡
暗淡
維度數據
弗林克
數據庫
DWS
將多個(gè)事實(shí)數據按照一個(gè)維度topic輕聚合,形成一個(gè)topic wide table。
弗林克
點(diǎn)擊之家
存托憑證
根據可視化的需要,對Clickhouse中的數據進(jìn)行過(guò)濾聚合。
Clickhouse SQL
可視化
3 DWD層功能詳解(一)用戶(hù)行為日志數據
根據不同類(lèi)別的日志進(jìn)行拆分。
前端埋點(diǎn)的所有數據都放在Kafka中的ods_base_log主題中,比如啟動(dòng)日志、頁(yè)面訪(fǎng)問(wèn)日志、曝光日志等,雖然日志都是一樣的,但是分為不同的類(lèi)型。 以后做數據統計的時(shí)候,不方便從這個(gè)題目中獲取所有的數據。 因此,需要從ods_base_log主題中提取數據,根據日志類(lèi)型將不同類(lèi)型的數據放入不同的主題中,并進(jìn)行分流操作,比如將啟動(dòng)日志放入啟動(dòng)主題中,將曝光登錄曝光主題。 日志被放入日志主題中。
(2) 業(yè)務(wù)數據
根據業(yè)務(wù)數據類(lèi)型(維度或事實(shí))進(jìn)行拆分。
MySQL存儲的業(yè)務(wù)數據中有很多表。 這些表分為兩種,一種是事實(shí)表,一種是維表。 采集數據時(shí),只要業(yè)務(wù)數據發(fā)生變化,就會(huì )通過(guò)maxwell采集到Kafka的ods_base_db_m主題中,不區分事實(shí)和維度。 如果是factual data,想放在kafka不同的單獨topic中,比如order topic,order detail topic,payment topic等。對于維度數據,不適合放在kafka中存儲。 Kafka不適合長(cháng)期存儲,默認存儲7天。 海量數據的分析計算也不適合存儲在MySQL中,因為在分析計算的過(guò)程中需要不斷的進(jìn)行查詢(xún)操作,給業(yè)務(wù)數據庫帶來(lái)了很大的壓力,而MySQL對于大量數據的查詢(xún)性能較差。
使用維度數據時(shí),需要根據維度id查詢(xún)具體數據。 KV型數據庫更適合存儲維度數據,根據K獲取V效率更高。 KV數據庫有Redis和Hbase,Redis長(cháng)期存儲壓力比較大。 最終選擇Hbase存儲維度數據。
4 DWD層數據準備實(shí)現思路2環(huán)境搭建1創(chuàng )建maven項目
創(chuàng )建一個(gè)maven項目,gmall2022-realtime。
2 修改配置文件 (1) 添加依賴(lài)
1.8
${java.version}
${java.version}
1.12.0
2.12
3.1.3
org.apache.flink
flink-java
${flink.version}
org.apache.flink
flink-streaming-java_${scala.version}
${flink.version}
org.apache.flink
flink-connector-kafka_${scala.version}
${flink.version}
org.apache.flink
flink-clients_${scala.version}
${flink.version}
org.apache.flink
flink-cep_${scala.version}
${flink.version}
org.apache.flink
flink-json
${flink.version}
com.alibaba
fastjson
1.2.68
<p>
org.apache.hadoop
hadoop-client
${hadoop.version}
org.slf4j
slf4j-api
1.7.25
org.slf4j
slf4j-log4j12
1.7.25
org.apache.logging.log4j
log4j-to-slf4j
2.14.0
org.apache.maven.plugins
maven-assembly-plugin
3.0.0
jar-with-dependencies
make-assembly
package
single
</p>
(2) 添加配置文件
在resources目錄下創(chuàng )建log4j.properties配置文件
log4j.rootLogger=error,stdout
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.target=System.out
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d %p [%c] - %m%n
3 創(chuàng )建如下包結構
目錄角色
應用程序
生成各層數據的Flink任務(wù)
豆子
數據對象
常見(jiàn)的
公共常量
效用
工具
3 準備用戶(hù)行為日志——DWD層
之前采集的日志數據已經(jīng)保存在Kafka中。 作為日志數據的ODS層,Kafka從ODS層讀取的日志數據分為三類(lèi),頁(yè)面日志、啟動(dòng)日志、暴露日志。 這三類(lèi)數據雖然都是用戶(hù)行為數據,但是它們的數據結構完全不同,所以需要拆分處理。 將拆分后的日志寫(xiě)回Kafka的不同主題作為日志DWD層。
頁(yè)面日志輸出到主流,啟動(dòng)日志輸出到啟動(dòng)端輸出流,曝光日志輸出到曝光端輸出流。
1個(gè)主要任務(wù)
整體流程如下:
2 分區、分組和分流
三者的關(guān)系和區別如下:
3 代碼實(shí)現(1)接收Kafka數據,轉換為封裝和操作Kafka的工具類(lèi),并提供獲取kafka消費者的方法(閱讀)
/**
* 操作kafka工具類(lèi)
*/
public class MyKafkaUtil {
private static final String KAFKA_SERVER = "hadoop101:9092,hadoop102:9092,hadoop103:9092";
// 獲取kafka的消費者
public static FlinkKafkaConsumer getKafkaSource(String topic,String groupId){
Properties props = new Properties();
props.setProperty(ConsumerConfig.BOOTSTRAP_SERVERS_CONFIG,KAFKA_SERVER);
// 定義消費者組
props.setProperty(ConsumerConfig.GROUP_ID_CONFIG,groupId);
<p>
return new FlinkKafkaConsumer(topic,new SimpleStringSchema(),props);
}
}
</p>
b Flink調用工具類(lèi)主程序讀取數據
/**
* 對日志數據進(jìn)行分流操作
* 啟動(dòng)、曝光、頁(yè)面
* 啟動(dòng)日志放到啟動(dòng)側輸出流中
* 曝光日志放到曝光側輸出流中
* 頁(yè)面日志放到主流中
* 將不同流的數據寫(xiě)回到kafka的dwd主題中
*/
public class BaseLogApp {
public static void main(String[] args) throws Exception{
// TODO 1 基本環(huán)境準備
// 流處理環(huán)境
StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment();
// 設置并行度
env.setParallelism(4);
// TODO 2 檢查點(diǎn)相關(guān)設置
// 開(kāi)啟檢查點(diǎn)
// 每5S中開(kāi)啟一次檢查點(diǎn),檢查點(diǎn)模式為EXACTLY_ONCE
env.enableCheckpointing(5000L, CheckpointingMode.EXACTLY_ONCE);
// 設置檢查點(diǎn)超時(shí)時(shí)間
env.getCheckpointConfig().setCheckpointTimeout(60000L);
// 設置重啟策略
// 重啟三次,每次間隔3s鐘
env.setRestartStrategy(RestartStrategies.fixedDelayRestart(3,3000L));
// 設置job取消后,檢查點(diǎn)是否保留
env.getCheckpointConfig().enableExternalizedCheckpoints(CheckpointConfig.ExternalizedCheckpointCleanup.RETAIN_ON_CANCELLATION);
// 設置狀態(tài)后端 -- 基于內存 or 文件系統 or RocksDB
// 內存:狀態(tài)存在TaskManager內存中,檢查點(diǎn)存在JobManager內存中
// 文件系統:狀態(tài)存在TaskManager內存中,檢查點(diǎn)存在指定的文件系統路徑中
// RocksDB:看做和Redis類(lèi)似的數據庫,狀態(tài)存在TaskManager內存中,檢查點(diǎn)存在JobManager內存和本地磁盤(pán)上
// hadoop中nm的地址
env.setStateBackend(new FsStateBackend("hdfs://hadoop101:8020/ck/gmall"));
// 指定操作HDFS的用戶(hù)
System.setProperty("HADOOP_USER_NAME","hzy");
// TODO 3 從kafka讀取數據
// 聲明消費的主題和消費者組
String topic = "ods_base_log";
String groupId = "base_log_app_group";
// 獲取kafka消費者
FlinkKafkaConsumer kafkaSource = MyKafkaUtil.getKafkaSource(topic, groupId);
// 讀取數據,封裝為流
DataStreamSource kafkaDS = env.addSource(kafkaSource);
// TODO 4 對讀取的數據進(jìn)行結構的轉換 jsonStr -> jsonObj
// // 匿名內部類(lèi)實(shí)現
// SingleOutputStreamOperator jsonObjDS = kafkaDS.map(
// new MapFunction() {
// @Override
// public JSONObject map(String jsonStr) throws Exception {
// return JSON.parseObject(jsonStr);
// }
// }
// );
// // lambda表達式實(shí)現
// kafkaDS.map(
// jsonStr -> JSON.parse(jsonStr)
// );
// 方法的默認調用,注意導入的是alibaba JSON包
SingleOutputStreamOperator jsonObjDS = kafkaDS.map(JSON::parseObject);
jsonObjDS.print(">>>");
// TODO 5 修復新老訪(fǎng)客狀態(tài)
// TODO 6 按照日志類(lèi)型對日志進(jìn)行分流
// TODO 7 將不同流的數據寫(xiě)到kafka的dwd不同主題中
env.execute();
}
}
測試
# 啟動(dòng)zookeeper
# 啟動(dòng)kafka
# 啟動(dòng)采集服務(wù)
logger.sh start
# 啟動(dòng)nm以將檢查點(diǎn)保存到hdfs上
start-dfs.sh
# 等待安全模式關(guān)閉,啟動(dòng)主程序,如果出現權限問(wèn)題,可以將權限放開(kāi)
hdfs dfs -chmod -R 777 /
# 或者增加以下代碼到主程序中
System.setProperty("HADOOP_USER_NAME","hzy");
# 程序運行起來(lái)后,啟動(dòng)模擬生成日志數據jar包,在主程序中可以接收到數據
解決方案:抖音品質(zhì)建設 - iOS啟動(dòng)優(yōu)化《實(shí)戰篇》
前言
啟動(dòng)是App給用戶(hù)的第一印象。 啟動(dòng)越慢,用戶(hù)流失的概率就越高。 良好的啟動(dòng)速度是用戶(hù)體驗不可或缺的一部分。 啟動(dòng)優(yōu)化涉及的知識點(diǎn)非常多,知識點(diǎn)范圍很廣。 文章難以面面俱到,分為原理和實(shí)戰兩部分。 本文為實(shí)戰文章。
原理:抖音品質(zhì)建設——iOS啟動(dòng)優(yōu)化《原理》
如何做啟動(dòng)優(yōu)化?
在文章正式內容開(kāi)始之前,大家可以想一想,如果自己來(lái)做啟動(dòng)優(yōu)化,會(huì )怎么進(jìn)行呢?
這其實(shí)是一個(gè)比較大的問(wèn)題。 遇到類(lèi)似情況,我們可以把大問(wèn)題分解成幾個(gè)小問(wèn)題:
對應本文的三個(gè)模塊:監控、工具和最佳實(shí)踐。
監控啟動(dòng)埋點(diǎn)
既然要監控,那就需要在代碼中能夠獲取到啟動(dòng)時(shí)間。 每個(gè)人都采用相同的起點(diǎn)作為起點(diǎn):創(chuàng )建進(jìn)程的時(shí)間。
起始點(diǎn)對應于用戶(hù)感知到的Launch Image消失的第一幀。 抖音采用的方案如下:
蘋(píng)果官方的統計方式是第一種CA::Transaction::commit,但是對應的實(shí)現是在系統框架內,抖音的方式非常接近這一點(diǎn)。
分階段
排查線(xiàn)上問(wèn)題,只有一個(gè)耗時(shí)的埋點(diǎn)入手顯然是不夠的。 可與單點(diǎn)埋點(diǎn)分階段組合使用。 以下是抖音目前的監控方案:
+load 和 initializer 的調用順序與鏈接順序有關(guān)。 鏈接順序默認是按照CocoaPod Pod名稱(chēng)升序排列的,所以選擇AAA開(kāi)頭的名稱(chēng)可以讓某個(gè)+load和initializer先執行。
無(wú)入侵監控
公司的APM團隊提供了一個(gè)非侵入式的啟動(dòng)監控方案,將啟動(dòng)過(guò)程拆分為幾個(gè)與業(yè)務(wù)無(wú)關(guān)的相對粗粒度的階段:進(jìn)程創(chuàng )建、最早+load、didFinishLuanching啟動(dòng)和第一個(gè)屏幕的第一次繪制完成。
前三個(gè)時(shí)間點(diǎn)的無(wú)創(chuàng )采集比較簡(jiǎn)單
我們希望將首屏渲染完成時(shí)間與MetricKit對齊,即獲取調用CA::Transaction::commit()方法的時(shí)間。
通過(guò)Runloop源碼分析和離線(xiàn)調試,我們發(fā)現CA::Transaction::commit()、CFRunLoopPerformBlock、kCFRunLoopBeforeTimers這三個(gè)時(shí)序的順序如下:
可以通過(guò)在didFinishLaunch中向Runloop注冊block或者BeforeTimerObserver來(lái)獲取上圖中兩個(gè)時(shí)間點(diǎn)的回調,代碼如下:
//注冊block
CFRunLoopRef?mainRunloop?=?[[NSRunLoop?mainRunLoop]?getCFRunLoop];
CFRunLoopPerformBlock(mainRunloop,NSDefaultRunLoopMode,^(){
????NSTimeInterval?stamp?=?[[NSDate?date]?timeIntervalSince1970];
????NSLog(@"runloop?block?launch?end:%f",stamp);
});
//注冊kCFRunLoopBeforeTimers回調
CFRunLoopRef?mainRunloop?=?[[NSRunLoop?mainRunLoop]?getCFRunLoop];
CFRunLoopActivity?activities?=?kCFRunLoopAllActivities;
CFRunLoopObserverRef?observer?=?CFRunLoopObserverCreateWithHandler(kCFAllocatorDefault,?activities,?YES,?0,?^(CFRunLoopObserverRef?observer,?CFRunLoopActivity?activity)?{
????if?(activity?==?kCFRunLoopBeforeTimers)?{
????????NSTimeInterval?stamp?=?[[NSDate?date]?timeIntervalSince1970];
????????NSLog(@"runloop?beforetimers?launch?end:%f",stamp);
????????CFRunLoopRemoveObserver(mainRunloop,?observer,?kCFRunLoopCommonModes);
????}
});
CFRunLoopAddObserver(mainRunloop,?observer,?kCFRunLoopCommonModes);
經(jīng)過(guò)實(shí)際測試,我們最終選擇的非侵入式首屏渲染方案是:
對于iOS13(含)及以上系統,在runloop中注冊一個(gè)kCFRunLoopBeforeTimers的回調,獲取App首屏渲染完成,更準確。 iOS13以下系統使用CFRunLoopPerformBlock方法注入block以更準確的定時(shí)獲取App首屏渲染。監控周期
App的生命周期可以分為研發(fā)、灰度、上線(xiàn)三個(gè)階段。 不同階段監測的目的和方法不同。
發(fā)展階段
研發(fā)階段監控的主要目的是防止劣化。 相應的,也會(huì )有離線(xiàn)自動(dòng)監控。 通過(guò)實(shí)際啟動(dòng)性能測試,盡快發(fā)現問(wèn)題并解決問(wèn)題。 抖音離線(xiàn)自動(dòng)監控抖音如下:
由定時(shí)任務(wù)觸發(fā),先以發(fā)布方式打包,然后運行自動(dòng)化測試。 測試完成后會(huì )上報測試結果,方便通過(guò)看板跟蹤整體變化趨勢。
如果發(fā)現有降級,會(huì )先發(fā)出告警信息,然后通過(guò)二分查找找到對應的降級MR,然后自動(dòng)運行火焰圖和儀表輔助定位問(wèn)題。
那么如何保證檢測結果穩定可靠呢?
答案是控制變量:
在實(shí)踐中,我們發(fā)現iPhone 8的穩定性最好,其次是iPhone X,iPhone 6的穩定性很差。
除了自動(dòng)化測試之外,還可以在研發(fā)過(guò)程中增加一些訪(fǎng)問(wèn)權限,以防止啟動(dòng)降級。 這些訪(fǎng)問(wèn)包括
不建議做細粒度的Code Review,除非你對相關(guān)業(yè)務(wù)有很好的了解,否則一般肉眼是看不出來(lái)有沒(méi)有變質(zhì)的。
在線(xiàn)和灰度
灰度和線(xiàn)上策略類(lèi)似,主要看行情數據和配置報警。 市場(chǎng)監控和警報與公司的基礎設施有很大關(guān)系。 如果沒(méi)有對應的基礎設施Xcode MetricKit本身也可以看到啟動(dòng)時(shí)間:打開(kāi)Xcode -> Window -> Origanizer -> Launch Time
行情數據本身就是統計性的,會(huì )存在一些統計規律:
基于這些背景,我們一般會(huì )控制變量:去掉地區、機型、版本,有時(shí)甚至會(huì )根據時(shí)間看啟動(dòng)時(shí)間的趨勢。
工具
完成監控后,我們需要找到一些可以?xún)?yōu)化的點(diǎn),需要借助工具。 主要包括儀器和自主開(kāi)發(fā)兩大類(lèi)。
時(shí)間分析器
Time Profiler是一款在日常性能分析中被廣泛使用的工具。 它通常會(huì )選擇一個(gè)時(shí)間段,然后匯總分析調用棧的耗時(shí)。 但是Time Profiler其實(shí)只適合做粗粒度的分析。 你為什么這么說(shuō)? 讓我們來(lái)看看它是如何工作的:
默認情況下,Time Profiler 會(huì )每隔 1ms 采樣一次,只采集運行線(xiàn)程的調用堆棧,最后進(jìn)行統計匯總。 比如下圖中的5個(gè)樣本中,沒(méi)有對method3進(jìn)行采樣,所以最后聚合的stack中是看不到method3的。 所以在Time Profiler中看到的時(shí)間并不是代碼的實(shí)際執行時(shí)間,而是stack在采樣統計中出現的時(shí)間。
Time Profiler 支持一些額外的配置。 如果計算時(shí)間和實(shí)際時(shí)間相差較大,可以嘗試啟用:
系統跟蹤
既然Time Profiler支持粗粒度的分析,那么有沒(méi)有什么細粒度的分析工具呢? 答案是系統跟蹤。
由于我們要細化分析,所以需要標記一小段時(shí)間,可以用Point of interest標記。 此外,系統跟蹤對于分析虛擬內存和線(xiàn)程狀態(tài)很有用:
os_路標
os_signpost 是 iOS 12 推出的用于在儀器中標記時(shí)間段的 API。 性能非常高,可以認為對啟動(dòng)沒(méi)有影響。 結合開(kāi)頭提到的階段性監控,我們可以在Instrument中將啟動(dòng)劃分為多個(gè)階段,結合其他模板具體問(wèn)題具體分析:
os_signpost結合swizzle可以產(chǎn)生意想不到的效果,比如hook所有的load方法分析對應的耗時(shí),hook UIImage對應的方法統計啟動(dòng)路徑上使用的圖片的加載耗時(shí)。
其他樂(lè )器模板
除了這些,還有幾個(gè)比較常用的模板:
火焰圖
火焰圖對于分析與時(shí)間相關(guān)的性能瓶頸非常有用,可以直接畫(huà)出耗時(shí)的業(yè)務(wù)代碼。 另外,可以自動(dòng)生成火焰圖,然后diff,可以用于自動(dòng)歸因。
火焰圖有兩種常見(jiàn)的實(shí)現方式
本質(zhì)上就是在方法的開(kāi)頭和結尾加兩個(gè)點(diǎn)就可以知道方法的耗時(shí),然后轉換成Chrome標準的json格式進(jìn)行分析。 注意,即使使用mmap寫(xiě)文件,還是會(huì )出現一些錯誤,所以發(fā)現的問(wèn)題不一定是問(wèn)題,需要二次確認。
最佳實(shí)踐總體思路
優(yōu)化的整體思路其實(shí)就是四個(gè)步驟:
刪除啟動(dòng)項,最直接的方法。 如果你不能刪除它,請嘗試延遲它。 延遲包括首次訪(fǎng)問(wèn)和啟動(dòng)后找合適的時(shí)間預熱。 如果不能延遲,可以試試并發(fā)。 如果不會(huì )多核多線(xiàn)程,可以試試。 讓代碼執行得更快
本節將以Main函數為分界線(xiàn),看Main函數前后的優(yōu)化方案; 然后介紹如何優(yōu)化Page In; 最后講解一些非常規的優(yōu)化方案,對架構的要求比較高。
主要之前
Main函數之前的啟動(dòng)過(guò)程如下:
動(dòng)態(tài)庫
減少動(dòng)態(tài)庫的數量可以減少在啟動(dòng)關(guān)閉時(shí)創(chuàng )建和加載動(dòng)態(tài)庫所花費的時(shí)間。 官方建議動(dòng)態(tài)庫數量小于6個(gè)。
推薦的方式是將動(dòng)態(tài)庫轉換為靜態(tài)庫,因為這樣可以額外減少包的大小。 另一種方式是合并動(dòng)態(tài)庫,但是在實(shí)踐中可操作性不是很高。 最后要提的是,不要鏈接那些你不使用的庫(包括系統),因為它會(huì )減慢閉包的創(chuàng )建速度。
離線(xiàn)代碼
離線(xiàn)代碼可以減少 Rebase & Bind & Runtime 初始化的耗時(shí)。 那么如何找到不用的代碼,然后下線(xiàn)呢? 分為靜態(tài)掃描和在線(xiàn)統計。
最簡(jiǎn)單的靜態(tài)掃描是基于A(yíng)ppCode,但是項目大后AppCode的索引速度很慢。 另一種靜態(tài)掃描是基于 Mach-O 的:
如果你把兩者區別一下就知道那些classes/sel沒(méi)有用到,但是objc是支持運行時(shí)調用的,刪除前需要確認兩次。
統計無(wú)用代碼的另一種方法是使用在線(xiàn)數據統計。 主流的解決方案有以下三種:
前兩種是ROI較高的解決方案,大部分時(shí)候Class級別的滲透率就足夠了。
+加載遷移
除了方法本身耗時(shí),+load也會(huì )造成大量的Page In,+load的存在也會(huì )影響App的穩定性,因為無(wú)法捕捉到crash。
比如很多DI容器需要給類(lèi)綁定協(xié)議,所以需要在啟動(dòng)的時(shí)候提前注冊(+load):
+?(void)load
{
????[DICenter?bindClass:IMPClass?toProtocol:@protocol(SomeProcotol)]
}
本質(zhì)上只要知道protocol和class的對應關(guān)系,使用clang屬性,這個(gè)過(guò)程就可以遷移到編譯期:
typedef?struct{
????const?char?*?cls;
????const?char?*?protocol;
}_di_pair;
#if?DEBUG
#define?DI_SERVICE(PROTOCOL_NAME,CLASS_NAME)\
__used?static?Class?_DI_VALID_METHOD(void){\
????return?[CLASS_NAME?class];\
}\
__attribute((used,?section(_DI_SEGMENT?","?_DI_SECTION?)))?static?_di_pair?_DI_UNIQUE_VAR?=?\
{\
_TO_STRING(CLASS_NAME),\
_TO_STRING(PROTOCOL_NAME),\
};\
#else
__attribute((used,?section(_DI_SEGMENT?","?_DI_SECTION?)))?static?_di_pair?_DI_UNIQUE_VAR?=?\
{\
_TO_STRING(CLASS_NAME),\
_TO_STRING(PROTOCOL_NAME),\
};\
#endif
原理很簡(jiǎn)單:宏提供接口,編譯時(shí)將類(lèi)名和協(xié)議名寫(xiě)入二進(jìn)制的指定段,運行時(shí)讀出關(guān)系就知道協(xié)議綁定在哪個(gè)類(lèi)上。
有同學(xué)會(huì )注意到有一個(gè)無(wú)用的方法_DI_VALID_METHOD,它只存在于debug模式下,目的是為了讓編譯器保證類(lèi)型安全。
靜態(tài)初始化遷移
靜態(tài)初始化,和+load方法一樣,也會(huì )造成大量的Page In,通常來(lái)自C++代碼,比如網(wǎng)絡(luò )或者特效庫。 另外,一些靜態(tài)初始化是通過(guò)頭文件引入的,可以通過(guò)預處理來(lái)確認。
幾種典型的遷移思路:
//Bad
namespace?{
????static?const?std::string?bucket[]?=?{"apples",?"pears",?"meerkats"};
}
const?std::string?GetBucketThing(int?i)?{
?????return?bucket[i];
}
//Good
std::string?GetBucketThing(int?i)?{
??static?const?std::string?bucket[]?=?{"apples",?"pears",?"meerkats"};
??return?bucket[i];
}
Main 之后的啟動(dòng)器
啟動(dòng)需要框架來(lái)控制,抖音采用輕量級的中心化方案:
啟動(dòng)任務(wù)的執行過(guò)程如下:
為什么需要啟動(dòng)器?
三方SDK
一些第三方SDK啟動(dòng)時(shí)間比較長(cháng),比如Fabric,抖音下線(xiàn)后抖音的啟動(dòng)速度快了70ms左右。
除了下線(xiàn),很多SDK都可以延遲,比如分享、登錄等。另外,在接入SDK之前,可以先評估一下對啟動(dòng)性能的影響。 如果影響較大,可以反饋給SDK提供商修改,尤其是付費SDK。 他們其實(shí)很愿意配合,做一些修改。
高頻法
有些方法單獨耗時(shí)不高,但在啟動(dòng)路徑上會(huì )被多次調用,累計起來(lái)耗時(shí)不低。 比如讀取Info.plist中的配置:
+?(NSString?*)plistChannel
{
????return?[[[NSBundle?mainBundle]?infoDictionary]?objectForKey:@"CHANNEL_NAME"];
}
修改的方式很簡(jiǎn)單,加一層內存緩存即可。 這種問(wèn)題在TimeProfiler中選擇時(shí)間段的時(shí)候經(jīng)??梢钥吹?。
鎖
鎖之所以影響啟動(dòng)時(shí)間,是因為有時(shí)候子線(xiàn)程先持有鎖,主線(xiàn)程需要等待子線(xiàn)程鎖釋放。 還要警惕系統會(huì )有很多隱藏的全局鎖,比如dyld和Runtime。 例如:
下圖是UIImage imageNamed造成的主線(xiàn)程阻塞:
從右邊的??梢钥闯?,imageNamed觸發(fā)dlopen,dlopen等待dyld的全局鎖。 通過(guò)System Trace的Thread State Event,可以找到線(xiàn)程被阻塞的下一個(gè)事件。 此事件表明該線(xiàn)程可以再次運行,因為其他線(xiàn)程已經(jīng)釋放了鎖:
接下來(lái)通過(guò)分析此時(shí)后臺線(xiàn)程在做什么,就會(huì )知道為什么會(huì )持有鎖,以及如何優(yōu)化。
線(xiàn)程數
線(xiàn)程的數量和優(yōu)先級都會(huì )影響啟動(dòng)時(shí)間。 您可以通過(guò)設置 QoS 來(lái)配置優(yōu)先級。 兩個(gè)高質(zhì)量的 QoS 是用戶(hù)交互的/發(fā)起的。 啟動(dòng)時(shí)需要主線(xiàn)程等待的子線(xiàn)程任務(wù)要設置為高質(zhì)量。
優(yōu)質(zhì)線(xiàn)程的數量不應超過(guò) CPU 內核的數量。 您可以通過(guò)System Trace 的System Load 來(lái)分析這種情況。
/GCD
dispatch_queue_attr_t?attr?=?dispatch_queue_attr_make_with_qos_class(DISPATCH_QUEUE_SERIAL,?QOS_CLASS_UTILITY,?-1);
dispatch_queue_t?queue?=?dispatch_queue_create("com.custom.utility.queue",?attr);
//NSOperationQueue
operationQueue.qualityOfService?=?NSQualityOfServiceUtility
線(xiàn)程數也會(huì )影響啟動(dòng)時(shí)間,但在iOS中全局控制線(xiàn)程并不容易。 比如二/三方庫的后臺線(xiàn)程不好控制,但是業(yè)務(wù)線(xiàn)程可以通過(guò)啟動(dòng)任務(wù)來(lái)控制。
線(xiàn)程多沒(méi)關(guān)系,只要同時(shí)執行的并發(fā)不多,可以通過(guò)System Trace查看上下文切換耗時(shí),確認線(xiàn)程數是否是啟動(dòng)瓶頸.
圖片
難免會(huì )用到很多圖片來(lái)啟動(dòng)。 有什么辦法可以?xún)?yōu)化圖片加載的耗時(shí)嗎?
使用 Asset 管理圖像,而不是直接將它們放在 bundle 中。 資產(chǎn)將在編譯期間進(jìn)行優(yōu)化,以加快加載速度。 另外在A(yíng)sset中加載圖片比Bundle更快,因為UIImage imageNamed需要遍歷Bundle來(lái)尋找圖片。 Asset中加載圖片的耗時(shí)主要在第一張圖片,因為需要建立索引,這部分耗時(shí)可以通過(guò)將啟動(dòng)的圖片放到一個(gè)小的Asset中來(lái)減少。
每次創(chuàng )建一個(gè)UIImage,都需要IO,在渲染第一幀的時(shí)候解碼。 所以這個(gè)耗時(shí)的部分可以通過(guò)在子線(xiàn)程之前預加載(創(chuàng )建UIImage)來(lái)優(yōu)化。
如下圖所示,圖像只會(huì )在后期的“RootWindow Creation”和“First Frame Rendering”中使用,所以可以在啟動(dòng)前期啟動(dòng)預加載的子線(xiàn)程來(lái)啟動(dòng)任務(wù)。
魚(yú)鉤
fishhook是一個(gè)用來(lái)hook C函數的庫,但是第一次調用這個(gè)庫比較耗時(shí),所以最好不要帶上線(xiàn)。 Fishhook如下圖遍歷Mach-O的多個(gè)段,找到函數指針和函數符號名的映射關(guān)系。 副作用是需要大量的Page Ins。 對于大型應用,在 iPhone X 上啟動(dòng)冷啟動(dòng)需要時(shí)間 200ms+。
如果一定要使用fishhook,請在子線(xiàn)程中調用,不要直接在_dyld_register_func_for_add_image中調用fishhook。 因為這個(gè)方法會(huì )持有一個(gè)dyld的全局互斥量,系統庫經(jīng)常在主線(xiàn)程啟動(dòng)時(shí)調用dlsym和dlopen,內部也需要這個(gè)鎖,導致上述子線(xiàn)程阻塞主線(xiàn)程。
第一幀渲染
不同的APP有不同的業(yè)務(wù)形態(tài),首幀渲染優(yōu)化方式也大不相同。 幾個(gè)常見(jiàn)的優(yōu)化點(diǎn):
其他提示
啟動(dòng)優(yōu)化有一些需要注意的tips:
不要刪除tmp/com.apple.dyld目錄,因為iOS 13+的啟動(dòng)閉包存放在該目錄下。 如果刪除了,下次啟動(dòng)時(shí)會(huì )重新創(chuàng )建。 創(chuàng )建閉包的過(guò)程非常緩慢。 接下來(lái)是IO優(yōu)化。 一種常見(jiàn)的方式是使用mmap來(lái)使IO更快,也可以在啟動(dòng)的早期預加載數據。
還有一些點(diǎn)在iPhone 6上耗時(shí)會(huì )明顯增加:
iPhone 6是一個(gè)分水嶺,性能會(huì )跌落懸崖,你可以在iPhone 6上降低部分用戶(hù)交互來(lái)?yè)Q取核心體驗(切記AB驗證)。
Page In耗時(shí)
啟動(dòng)路徑上會(huì )觸發(fā)大量Page Ins。 有沒(méi)有辦法優(yōu)化這部分耗時(shí)?
部分重命名
App Store 會(huì )對上傳的 App 的 TEXT 部分進(jìn)行加密,并在 Page In 發(fā)生時(shí)對其進(jìn)行解密。 解密過(guò)程非常耗時(shí)。 由于TEXT部分會(huì )被加密,直接的思路就是將TEXT部分的內容移動(dòng)到其他部分。 ld還有一個(gè)參數rename_section來(lái)支持重命名:
抖音更名方案:
"-Wl,-rename_section,__TEXT,__cstring,__RODATA,__cstring",
"-Wl,-rename_section,__TEXT,__const,__RODATA,__const",
"-Wl,-rename_section,__TEXT,__gcc_except_tab,__RODATA,__gcc_except_tab",
"-Wl,-rename_section,__TEXT,__objc_methname,__RODATA,__objc_methname",
"-Wl,-rename_section,__TEXT,__objc_classname,__RODATA,__objc_classname",
"-Wl,-rename_section,__TEXT,__objc_methtype,__RODATA,__objc_methtype"
這種優(yōu)化方式在iOS 13下是有效的,因為iOS 13優(yōu)化了解密過(guò)程,Page In在的時(shí)候不需要解密,這也是iOS 13啟動(dòng)速度更快的原因之一。
二元重排
由于在啟動(dòng)路徑上會(huì )觸發(fā)大量的Page Ins,請問(wèn)有什么辦法可以?xún)?yōu)化嗎?
啟動(dòng)具有局部性的特點(diǎn),即啟動(dòng)時(shí)只用到少量函數,而且這些函數分布比較分散,因此Page In讀取的數據利用率不高。 如果我們可以將用于啟動(dòng)的函數安排成連續的二進(jìn)制區間,那么我們就可以減少Page In的數量,從而優(yōu)化啟動(dòng)時(shí)間:
以下圖為例。 啟動(dòng)時(shí)使用方法一和方法三。 為了執行相應的代碼,需要兩次 Page Ins。 如果我們把方法一和方法三放在一起,那么只需要一次Page In,從而提高了啟動(dòng)速度。
鏈接器 ld 有一個(gè)參數 -order_file 支持根據符號排列二進(jìn)制文件。 啟動(dòng)時(shí)使用的主流符號有兩種獲取方式:
Facebook的LLVM function instrumentation是為order_file定制的,代碼也是他們?yōu)長(cháng)LVM開(kāi)發(fā)的,已經(jīng)合并到LLVM的主分支中。
Facebook的方案更精細,生成的order_file是最優(yōu)方案,但工作量巨大。 抖音的方案不需要源碼編譯,不需要修改現有的編譯環(huán)境和流程,侵入性最小。 缺點(diǎn)是只能覆蓋90%左右的符號。
- 灰度是任何優(yōu)化的好階段,因為很多新的優(yōu)化方案都存在不確定性,需要先在灰度上進(jìn)行驗證。
非常規方案動(dòng)態(tài)庫懶加載
一開(kāi)始我們提到可以通過(guò)刪除代碼來(lái)減少代碼量,那么有沒(méi)有什么辦法可以在不減少代碼總量的情況下減少啟動(dòng)時(shí)加載的代碼量呢?
什么是懶加載動(dòng)態(tài)庫? 普通的動(dòng)態(tài)庫直接或間接地由主二進(jìn)制文件鏈接,因此這些動(dòng)態(tài)庫將在啟動(dòng)時(shí)加載。 如果只是打包進(jìn)App,不參與鏈接,那么啟動(dòng)時(shí)不會(huì )自動(dòng)加載。 當運行時(shí)需要動(dòng)態(tài)庫中的內容時(shí),會(huì )手動(dòng)延遲加載。
動(dòng)態(tài)庫的延遲加載在編譯時(shí)和運行時(shí)都需要修改。 編譯時(shí)的架構:
像 A.framework 這樣的動(dòng)態(tài)庫是延遲加載的,因為它們不參與主二進(jìn)制文件的直接或間接鏈接。 動(dòng)態(tài)庫之間必然存在一些共同的依賴(lài)關(guān)系,將這些依賴(lài)關(guān)系打包成Shared.framework來(lái)解決公共依賴(lài)關(guān)系的問(wèn)題。
運行時(shí)由-[NSBundle load]加載,本質(zhì)上是調用底層的dlopen。 那么什么時(shí)候觸發(fā)手動(dòng)加載動(dòng)態(tài)庫呢?
動(dòng)態(tài)庫可以分為業(yè)務(wù)類(lèi)和函數類(lèi)兩種。 業(yè)務(wù)是UI的入口,動(dòng)態(tài)庫加載的邏輯可以匯聚到路由內部,讓外部實(shí)際上不知道動(dòng)態(tài)庫是懶加載的,可以更好的斷層——寬容。 函數庫(比如上圖中的QR.framework)會(huì )有點(diǎn)不同,因為沒(méi)有UI等入口,函數庫需要自己維護Wrapper:
動(dòng)態(tài)庫懶加載除了減少啟動(dòng)加載的代碼外,還可以防止業(yè)務(wù)長(cháng)時(shí)間添加代碼導致的啟動(dòng)降級,因為業(yè)務(wù)在第一次訪(fǎng)問(wèn)時(shí)就完成了初始化。
該解決方案還有其他優(yōu)點(diǎn)。 比如動(dòng)態(tài)庫轉換后本地編譯時(shí)間會(huì )大大減少,對其他性能指標也有好處。 缺點(diǎn)是會(huì )犧牲一定的包體積,但是懶加載的動(dòng)態(tài)庫可以通過(guò)分段壓縮等方式進(jìn)行優(yōu)化。 來(lái)平衡這部分損失。
后臺獲取
Background Fetch 可以定時(shí)在后臺啟動(dòng)應用,對時(shí)間敏感的應用(比如新聞)在后臺刷新數據,可以提高提要加載速度,提升用戶(hù)體驗。
那么,為什么這種“后臺?;睢睓C制能夠提高啟動(dòng)速度呢? 我們來(lái)看一個(gè)典型案例:
系統在后臺啟動(dòng)應用程序需要很長(cháng)時(shí)間。 因為內存等原因,后臺App被kill了。 此時(shí),用戶(hù)立即啟動(dòng)App。 那么這個(gè)啟動(dòng)就是熱啟動(dòng),因為緩存還在。 另一次系統在后臺啟動(dòng)應用程序。 這個(gè)時(shí)候用戶(hù)在A(yíng)pp在后臺的時(shí)候點(diǎn)擊App,那么這個(gè)啟動(dòng)就是后臺回到前臺,因為App還活著(zhù)
通過(guò)這兩個(gè)典型場(chǎng)景,我們可以看出為什么Background Fetch可以提高啟動(dòng)速度:
啟動(dòng)后臺有一些需要注意的地方,比如日?;顒?dòng),廣告,甚至AB組入口的邏輯都會(huì )受到影響,需要大量的適配。 經(jīng)常需要launcher來(lái)支持,因為didFinishLaunch中執行的task在后臺啟動(dòng)時(shí)需要延遲到第一次回到前臺才正常啟動(dòng)。
總結
最后,提取了我們認為在任何優(yōu)化中都很重要的幾點(diǎn):
加入我們
我們是負責抖音客戶(hù)端基礎能力研發(fā)和新技術(shù)探索的團隊。 我們深耕工程/業(yè)務(wù)架構、研發(fā)工具、編譯系統等,支持業(yè)務(wù)快速迭代,同時(shí)保證超大規模團隊的研發(fā)效率和工程質(zhì)量。 在性能/穩定性等方面不斷探索,力求為全球億萬(wàn)用戶(hù)提供最極致的基礎體驗。
如果你熱愛(ài)技術(shù),歡迎加入抖音基礎技術(shù)團隊,讓我們一起打造億級國民APP。 目前我們在上海、北京、杭州、深圳都有招聘需求。 內推可以聯(lián)系郵箱:,郵件標題:姓名-工作年限-抖音-基礎技術(shù)抖音 /Android。
歡迎關(guān)注“字節跳動(dòng)技術(shù)團隊”
簡(jiǎn)歷投遞聯(lián)系郵箱:“ ” 查看全部
解決方案:【實(shí)時(shí)數倉】DWD層需求分析及實(shí)現思路、idea環(huán)境搭建、實(shí)現DWD層處理用戶(hù)行
文章目錄
一、DWD層需求分析及實(shí)現思路 1、分層需求分析
構建實(shí)時(shí)數倉的目的主要是增加數據計算的復用性。 每增加一個(gè)新的統計要求,不是從原來(lái)的數據計算,而是從半成品繼續加工。
這里從kafka的ods層讀取用戶(hù)行為日志和業(yè)務(wù)數據,簡(jiǎn)單處理后,作為dwd層回寫(xiě)給kafka。
2 各層功能分層數據描述 生成計算工具 存儲介質(zhì)
消耗臭氧層物質(zhì)
原創(chuàng )數據、日志和業(yè)務(wù)數據
日志服務(wù)器,麥克斯韋
卡夫卡
DWD
流式處理是以數據對象為單位進(jìn)行的,例如訂單、頁(yè)面訪(fǎng)問(wèn)量等。
弗林克
卡夫卡
DWM
對于一些數據對象的進(jìn)一步處理,比如獨立訪(fǎng)問(wèn),跳出行為。 還是詳細的數據。
弗林克
卡夫卡
暗淡
維度數據
弗林克
數據庫
DWS
將多個(gè)事實(shí)數據按照一個(gè)維度topic輕聚合,形成一個(gè)topic wide table。
弗林克
點(diǎn)擊之家
存托憑證
根據可視化的需要,對Clickhouse中的數據進(jìn)行過(guò)濾聚合。
Clickhouse SQL
可視化
3 DWD層功能詳解(一)用戶(hù)行為日志數據
根據不同類(lèi)別的日志進(jìn)行拆分。
前端埋點(diǎn)的所有數據都放在Kafka中的ods_base_log主題中,比如啟動(dòng)日志、頁(yè)面訪(fǎng)問(wèn)日志、曝光日志等,雖然日志都是一樣的,但是分為不同的類(lèi)型。 以后做數據統計的時(shí)候,不方便從這個(gè)題目中獲取所有的數據。 因此,需要從ods_base_log主題中提取數據,根據日志類(lèi)型將不同類(lèi)型的數據放入不同的主題中,并進(jìn)行分流操作,比如將啟動(dòng)日志放入啟動(dòng)主題中,將曝光登錄曝光主題。 日志被放入日志主題中。
(2) 業(yè)務(wù)數據
根據業(yè)務(wù)數據類(lèi)型(維度或事實(shí))進(jìn)行拆分。
MySQL存儲的業(yè)務(wù)數據中有很多表。 這些表分為兩種,一種是事實(shí)表,一種是維表。 采集數據時(shí),只要業(yè)務(wù)數據發(fā)生變化,就會(huì )通過(guò)maxwell采集到Kafka的ods_base_db_m主題中,不區分事實(shí)和維度。 如果是factual data,想放在kafka不同的單獨topic中,比如order topic,order detail topic,payment topic等。對于維度數據,不適合放在kafka中存儲。 Kafka不適合長(cháng)期存儲,默認存儲7天。 海量數據的分析計算也不適合存儲在MySQL中,因為在分析計算的過(guò)程中需要不斷的進(jìn)行查詢(xún)操作,給業(yè)務(wù)數據庫帶來(lái)了很大的壓力,而MySQL對于大量數據的查詢(xún)性能較差。
使用維度數據時(shí),需要根據維度id查詢(xún)具體數據。 KV型數據庫更適合存儲維度數據,根據K獲取V效率更高。 KV數據庫有Redis和Hbase,Redis長(cháng)期存儲壓力比較大。 最終選擇Hbase存儲維度數據。
4 DWD層數據準備實(shí)現思路2環(huán)境搭建1創(chuàng )建maven項目
創(chuàng )建一個(gè)maven項目,gmall2022-realtime。
2 修改配置文件 (1) 添加依賴(lài)
1.8
${java.version}
${java.version}
1.12.0
2.12
3.1.3
org.apache.flink
flink-java
${flink.version}
org.apache.flink
flink-streaming-java_${scala.version}
${flink.version}
org.apache.flink
flink-connector-kafka_${scala.version}
${flink.version}
org.apache.flink
flink-clients_${scala.version}
${flink.version}
org.apache.flink
flink-cep_${scala.version}
${flink.version}
org.apache.flink
flink-json
${flink.version}
com.alibaba
fastjson
1.2.68
<p>

org.apache.hadoop
hadoop-client
${hadoop.version}
org.slf4j
slf4j-api
1.7.25
org.slf4j
slf4j-log4j12
1.7.25
org.apache.logging.log4j
log4j-to-slf4j
2.14.0
org.apache.maven.plugins
maven-assembly-plugin
3.0.0
jar-with-dependencies
make-assembly
package
single
</p>
(2) 添加配置文件
在resources目錄下創(chuàng )建log4j.properties配置文件
log4j.rootLogger=error,stdout
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.target=System.out
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d %p [%c] - %m%n
3 創(chuàng )建如下包結構
目錄角色
應用程序
生成各層數據的Flink任務(wù)
豆子
數據對象
常見(jiàn)的
公共常量
效用
工具
3 準備用戶(hù)行為日志——DWD層
之前采集的日志數據已經(jīng)保存在Kafka中。 作為日志數據的ODS層,Kafka從ODS層讀取的日志數據分為三類(lèi),頁(yè)面日志、啟動(dòng)日志、暴露日志。 這三類(lèi)數據雖然都是用戶(hù)行為數據,但是它們的數據結構完全不同,所以需要拆分處理。 將拆分后的日志寫(xiě)回Kafka的不同主題作為日志DWD層。
頁(yè)面日志輸出到主流,啟動(dòng)日志輸出到啟動(dòng)端輸出流,曝光日志輸出到曝光端輸出流。
1個(gè)主要任務(wù)
整體流程如下:
2 分區、分組和分流
三者的關(guān)系和區別如下:
3 代碼實(shí)現(1)接收Kafka數據,轉換為封裝和操作Kafka的工具類(lèi),并提供獲取kafka消費者的方法(閱讀)
/**
* 操作kafka工具類(lèi)
*/
public class MyKafkaUtil {
private static final String KAFKA_SERVER = "hadoop101:9092,hadoop102:9092,hadoop103:9092";
// 獲取kafka的消費者
public static FlinkKafkaConsumer getKafkaSource(String topic,String groupId){
Properties props = new Properties();
props.setProperty(ConsumerConfig.BOOTSTRAP_SERVERS_CONFIG,KAFKA_SERVER);
// 定義消費者組
props.setProperty(ConsumerConfig.GROUP_ID_CONFIG,groupId);
<p>

return new FlinkKafkaConsumer(topic,new SimpleStringSchema(),props);
}
}
</p>
b Flink調用工具類(lèi)主程序讀取數據
/**
* 對日志數據進(jìn)行分流操作
* 啟動(dòng)、曝光、頁(yè)面
* 啟動(dòng)日志放到啟動(dòng)側輸出流中
* 曝光日志放到曝光側輸出流中
* 頁(yè)面日志放到主流中
* 將不同流的數據寫(xiě)回到kafka的dwd主題中
*/
public class BaseLogApp {
public static void main(String[] args) throws Exception{
// TODO 1 基本環(huán)境準備
// 流處理環(huán)境
StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment();
// 設置并行度
env.setParallelism(4);
// TODO 2 檢查點(diǎn)相關(guān)設置
// 開(kāi)啟檢查點(diǎn)
// 每5S中開(kāi)啟一次檢查點(diǎn),檢查點(diǎn)模式為EXACTLY_ONCE
env.enableCheckpointing(5000L, CheckpointingMode.EXACTLY_ONCE);
// 設置檢查點(diǎn)超時(shí)時(shí)間
env.getCheckpointConfig().setCheckpointTimeout(60000L);
// 設置重啟策略
// 重啟三次,每次間隔3s鐘
env.setRestartStrategy(RestartStrategies.fixedDelayRestart(3,3000L));
// 設置job取消后,檢查點(diǎn)是否保留
env.getCheckpointConfig().enableExternalizedCheckpoints(CheckpointConfig.ExternalizedCheckpointCleanup.RETAIN_ON_CANCELLATION);
// 設置狀態(tài)后端 -- 基于內存 or 文件系統 or RocksDB
// 內存:狀態(tài)存在TaskManager內存中,檢查點(diǎn)存在JobManager內存中
// 文件系統:狀態(tài)存在TaskManager內存中,檢查點(diǎn)存在指定的文件系統路徑中
// RocksDB:看做和Redis類(lèi)似的數據庫,狀態(tài)存在TaskManager內存中,檢查點(diǎn)存在JobManager內存和本地磁盤(pán)上
// hadoop中nm的地址
env.setStateBackend(new FsStateBackend("hdfs://hadoop101:8020/ck/gmall"));
// 指定操作HDFS的用戶(hù)
System.setProperty("HADOOP_USER_NAME","hzy");
// TODO 3 從kafka讀取數據
// 聲明消費的主題和消費者組
String topic = "ods_base_log";
String groupId = "base_log_app_group";
// 獲取kafka消費者
FlinkKafkaConsumer kafkaSource = MyKafkaUtil.getKafkaSource(topic, groupId);
// 讀取數據,封裝為流
DataStreamSource kafkaDS = env.addSource(kafkaSource);
// TODO 4 對讀取的數據進(jìn)行結構的轉換 jsonStr -> jsonObj
// // 匿名內部類(lèi)實(shí)現
// SingleOutputStreamOperator jsonObjDS = kafkaDS.map(
// new MapFunction() {
// @Override
// public JSONObject map(String jsonStr) throws Exception {
// return JSON.parseObject(jsonStr);
// }
// }
// );
// // lambda表達式實(shí)現
// kafkaDS.map(
// jsonStr -> JSON.parse(jsonStr)
// );
// 方法的默認調用,注意導入的是alibaba JSON包
SingleOutputStreamOperator jsonObjDS = kafkaDS.map(JSON::parseObject);
jsonObjDS.print(">>>");
// TODO 5 修復新老訪(fǎng)客狀態(tài)
// TODO 6 按照日志類(lèi)型對日志進(jìn)行分流
// TODO 7 將不同流的數據寫(xiě)到kafka的dwd不同主題中
env.execute();
}
}
測試
# 啟動(dòng)zookeeper
# 啟動(dòng)kafka
# 啟動(dòng)采集服務(wù)
logger.sh start
# 啟動(dòng)nm以將檢查點(diǎn)保存到hdfs上
start-dfs.sh
# 等待安全模式關(guān)閉,啟動(dòng)主程序,如果出現權限問(wèn)題,可以將權限放開(kāi)
hdfs dfs -chmod -R 777 /
# 或者增加以下代碼到主程序中
System.setProperty("HADOOP_USER_NAME","hzy");
# 程序運行起來(lái)后,啟動(dòng)模擬生成日志數據jar包,在主程序中可以接收到數據
解決方案:抖音品質(zhì)建設 - iOS啟動(dòng)優(yōu)化《實(shí)戰篇》
前言
啟動(dòng)是App給用戶(hù)的第一印象。 啟動(dòng)越慢,用戶(hù)流失的概率就越高。 良好的啟動(dòng)速度是用戶(hù)體驗不可或缺的一部分。 啟動(dòng)優(yōu)化涉及的知識點(diǎn)非常多,知識點(diǎn)范圍很廣。 文章難以面面俱到,分為原理和實(shí)戰兩部分。 本文為實(shí)戰文章。
原理:抖音品質(zhì)建設——iOS啟動(dòng)優(yōu)化《原理》
如何做啟動(dòng)優(yōu)化?
在文章正式內容開(kāi)始之前,大家可以想一想,如果自己來(lái)做啟動(dòng)優(yōu)化,會(huì )怎么進(jìn)行呢?
這其實(shí)是一個(gè)比較大的問(wèn)題。 遇到類(lèi)似情況,我們可以把大問(wèn)題分解成幾個(gè)小問(wèn)題:
對應本文的三個(gè)模塊:監控、工具和最佳實(shí)踐。
監控啟動(dòng)埋點(diǎn)
既然要監控,那就需要在代碼中能夠獲取到啟動(dòng)時(shí)間。 每個(gè)人都采用相同的起點(diǎn)作為起點(diǎn):創(chuàng )建進(jìn)程的時(shí)間。
起始點(diǎn)對應于用戶(hù)感知到的Launch Image消失的第一幀。 抖音采用的方案如下:
蘋(píng)果官方的統計方式是第一種CA::Transaction::commit,但是對應的實(shí)現是在系統框架內,抖音的方式非常接近這一點(diǎn)。
分階段
排查線(xiàn)上問(wèn)題,只有一個(gè)耗時(shí)的埋點(diǎn)入手顯然是不夠的。 可與單點(diǎn)埋點(diǎn)分階段組合使用。 以下是抖音目前的監控方案:
+load 和 initializer 的調用順序與鏈接順序有關(guān)。 鏈接順序默認是按照CocoaPod Pod名稱(chēng)升序排列的,所以選擇AAA開(kāi)頭的名稱(chēng)可以讓某個(gè)+load和initializer先執行。
無(wú)入侵監控
公司的APM團隊提供了一個(gè)非侵入式的啟動(dòng)監控方案,將啟動(dòng)過(guò)程拆分為幾個(gè)與業(yè)務(wù)無(wú)關(guān)的相對粗粒度的階段:進(jìn)程創(chuàng )建、最早+load、didFinishLuanching啟動(dòng)和第一個(gè)屏幕的第一次繪制完成。
前三個(gè)時(shí)間點(diǎn)的無(wú)創(chuàng )采集比較簡(jiǎn)單
我們希望將首屏渲染完成時(shí)間與MetricKit對齊,即獲取調用CA::Transaction::commit()方法的時(shí)間。
通過(guò)Runloop源碼分析和離線(xiàn)調試,我們發(fā)現CA::Transaction::commit()、CFRunLoopPerformBlock、kCFRunLoopBeforeTimers這三個(gè)時(shí)序的順序如下:
可以通過(guò)在didFinishLaunch中向Runloop注冊block或者BeforeTimerObserver來(lái)獲取上圖中兩個(gè)時(shí)間點(diǎn)的回調,代碼如下:
//注冊block
CFRunLoopRef?mainRunloop?=?[[NSRunLoop?mainRunLoop]?getCFRunLoop];
CFRunLoopPerformBlock(mainRunloop,NSDefaultRunLoopMode,^(){
????NSTimeInterval?stamp?=?[[NSDate?date]?timeIntervalSince1970];
????NSLog(@"runloop?block?launch?end:%f",stamp);
});
//注冊kCFRunLoopBeforeTimers回調
CFRunLoopRef?mainRunloop?=?[[NSRunLoop?mainRunLoop]?getCFRunLoop];
CFRunLoopActivity?activities?=?kCFRunLoopAllActivities;
CFRunLoopObserverRef?observer?=?CFRunLoopObserverCreateWithHandler(kCFAllocatorDefault,?activities,?YES,?0,?^(CFRunLoopObserverRef?observer,?CFRunLoopActivity?activity)?{
????if?(activity?==?kCFRunLoopBeforeTimers)?{
????????NSTimeInterval?stamp?=?[[NSDate?date]?timeIntervalSince1970];
????????NSLog(@"runloop?beforetimers?launch?end:%f",stamp);
????????CFRunLoopRemoveObserver(mainRunloop,?observer,?kCFRunLoopCommonModes);
????}
});
CFRunLoopAddObserver(mainRunloop,?observer,?kCFRunLoopCommonModes);
經(jīng)過(guò)實(shí)際測試,我們最終選擇的非侵入式首屏渲染方案是:
對于iOS13(含)及以上系統,在runloop中注冊一個(gè)kCFRunLoopBeforeTimers的回調,獲取App首屏渲染完成,更準確。 iOS13以下系統使用CFRunLoopPerformBlock方法注入block以更準確的定時(shí)獲取App首屏渲染。監控周期
App的生命周期可以分為研發(fā)、灰度、上線(xiàn)三個(gè)階段。 不同階段監測的目的和方法不同。
發(fā)展階段
研發(fā)階段監控的主要目的是防止劣化。 相應的,也會(huì )有離線(xiàn)自動(dòng)監控。 通過(guò)實(shí)際啟動(dòng)性能測試,盡快發(fā)現問(wèn)題并解決問(wèn)題。 抖音離線(xiàn)自動(dòng)監控抖音如下:
由定時(shí)任務(wù)觸發(fā),先以發(fā)布方式打包,然后運行自動(dòng)化測試。 測試完成后會(huì )上報測試結果,方便通過(guò)看板跟蹤整體變化趨勢。
如果發(fā)現有降級,會(huì )先發(fā)出告警信息,然后通過(guò)二分查找找到對應的降級MR,然后自動(dòng)運行火焰圖和儀表輔助定位問(wèn)題。
那么如何保證檢測結果穩定可靠呢?
答案是控制變量:
在實(shí)踐中,我們發(fā)現iPhone 8的穩定性最好,其次是iPhone X,iPhone 6的穩定性很差。
除了自動(dòng)化測試之外,還可以在研發(fā)過(guò)程中增加一些訪(fǎng)問(wèn)權限,以防止啟動(dòng)降級。 這些訪(fǎng)問(wèn)包括
不建議做細粒度的Code Review,除非你對相關(guān)業(yè)務(wù)有很好的了解,否則一般肉眼是看不出來(lái)有沒(méi)有變質(zhì)的。
在線(xiàn)和灰度
灰度和線(xiàn)上策略類(lèi)似,主要看行情數據和配置報警。 市場(chǎng)監控和警報與公司的基礎設施有很大關(guān)系。 如果沒(méi)有對應的基礎設施Xcode MetricKit本身也可以看到啟動(dòng)時(shí)間:打開(kāi)Xcode -> Window -> Origanizer -> Launch Time
行情數據本身就是統計性的,會(huì )存在一些統計規律:
基于這些背景,我們一般會(huì )控制變量:去掉地區、機型、版本,有時(shí)甚至會(huì )根據時(shí)間看啟動(dòng)時(shí)間的趨勢。
工具
完成監控后,我們需要找到一些可以?xún)?yōu)化的點(diǎn),需要借助工具。 主要包括儀器和自主開(kāi)發(fā)兩大類(lèi)。
時(shí)間分析器
Time Profiler是一款在日常性能分析中被廣泛使用的工具。 它通常會(huì )選擇一個(gè)時(shí)間段,然后匯總分析調用棧的耗時(shí)。 但是Time Profiler其實(shí)只適合做粗粒度的分析。 你為什么這么說(shuō)? 讓我們來(lái)看看它是如何工作的:
默認情況下,Time Profiler 會(huì )每隔 1ms 采樣一次,只采集運行線(xiàn)程的調用堆棧,最后進(jìn)行統計匯總。 比如下圖中的5個(gè)樣本中,沒(méi)有對method3進(jìn)行采樣,所以最后聚合的stack中是看不到method3的。 所以在Time Profiler中看到的時(shí)間并不是代碼的實(shí)際執行時(shí)間,而是stack在采樣統計中出現的時(shí)間。
Time Profiler 支持一些額外的配置。 如果計算時(shí)間和實(shí)際時(shí)間相差較大,可以嘗試啟用:
系統跟蹤
既然Time Profiler支持粗粒度的分析,那么有沒(méi)有什么細粒度的分析工具呢? 答案是系統跟蹤。
由于我們要細化分析,所以需要標記一小段時(shí)間,可以用Point of interest標記。 此外,系統跟蹤對于分析虛擬內存和線(xiàn)程狀態(tài)很有用:
os_路標
os_signpost 是 iOS 12 推出的用于在儀器中標記時(shí)間段的 API。 性能非常高,可以認為對啟動(dòng)沒(méi)有影響。 結合開(kāi)頭提到的階段性監控,我們可以在Instrument中將啟動(dòng)劃分為多個(gè)階段,結合其他模板具體問(wèn)題具體分析:
os_signpost結合swizzle可以產(chǎn)生意想不到的效果,比如hook所有的load方法分析對應的耗時(shí),hook UIImage對應的方法統計啟動(dòng)路徑上使用的圖片的加載耗時(shí)。
其他樂(lè )器模板
除了這些,還有幾個(gè)比較常用的模板:
火焰圖
火焰圖對于分析與時(shí)間相關(guān)的性能瓶頸非常有用,可以直接畫(huà)出耗時(shí)的業(yè)務(wù)代碼。 另外,可以自動(dòng)生成火焰圖,然后diff,可以用于自動(dòng)歸因。
火焰圖有兩種常見(jiàn)的實(shí)現方式
本質(zhì)上就是在方法的開(kāi)頭和結尾加兩個(gè)點(diǎn)就可以知道方法的耗時(shí),然后轉換成Chrome標準的json格式進(jìn)行分析。 注意,即使使用mmap寫(xiě)文件,還是會(huì )出現一些錯誤,所以發(fā)現的問(wèn)題不一定是問(wèn)題,需要二次確認。
最佳實(shí)踐總體思路
優(yōu)化的整體思路其實(shí)就是四個(gè)步驟:

刪除啟動(dòng)項,最直接的方法。 如果你不能刪除它,請嘗試延遲它。 延遲包括首次訪(fǎng)問(wèn)和啟動(dòng)后找合適的時(shí)間預熱。 如果不能延遲,可以試試并發(fā)。 如果不會(huì )多核多線(xiàn)程,可以試試。 讓代碼執行得更快
本節將以Main函數為分界線(xiàn),看Main函數前后的優(yōu)化方案; 然后介紹如何優(yōu)化Page In; 最后講解一些非常規的優(yōu)化方案,對架構的要求比較高。
主要之前
Main函數之前的啟動(dòng)過(guò)程如下:
動(dòng)態(tài)庫
減少動(dòng)態(tài)庫的數量可以減少在啟動(dòng)關(guān)閉時(shí)創(chuàng )建和加載動(dòng)態(tài)庫所花費的時(shí)間。 官方建議動(dòng)態(tài)庫數量小于6個(gè)。
推薦的方式是將動(dòng)態(tài)庫轉換為靜態(tài)庫,因為這樣可以額外減少包的大小。 另一種方式是合并動(dòng)態(tài)庫,但是在實(shí)踐中可操作性不是很高。 最后要提的是,不要鏈接那些你不使用的庫(包括系統),因為它會(huì )減慢閉包的創(chuàng )建速度。
離線(xiàn)代碼
離線(xiàn)代碼可以減少 Rebase & Bind & Runtime 初始化的耗時(shí)。 那么如何找到不用的代碼,然后下線(xiàn)呢? 分為靜態(tài)掃描和在線(xiàn)統計。
最簡(jiǎn)單的靜態(tài)掃描是基于A(yíng)ppCode,但是項目大后AppCode的索引速度很慢。 另一種靜態(tài)掃描是基于 Mach-O 的:
如果你把兩者區別一下就知道那些classes/sel沒(méi)有用到,但是objc是支持運行時(shí)調用的,刪除前需要確認兩次。
統計無(wú)用代碼的另一種方法是使用在線(xiàn)數據統計。 主流的解決方案有以下三種:
前兩種是ROI較高的解決方案,大部分時(shí)候Class級別的滲透率就足夠了。
+加載遷移
除了方法本身耗時(shí),+load也會(huì )造成大量的Page In,+load的存在也會(huì )影響App的穩定性,因為無(wú)法捕捉到crash。
比如很多DI容器需要給類(lèi)綁定協(xié)議,所以需要在啟動(dòng)的時(shí)候提前注冊(+load):
+?(void)load
{
????[DICenter?bindClass:IMPClass?toProtocol:@protocol(SomeProcotol)]
}
本質(zhì)上只要知道protocol和class的對應關(guān)系,使用clang屬性,這個(gè)過(guò)程就可以遷移到編譯期:
typedef?struct{
????const?char?*?cls;
????const?char?*?protocol;
}_di_pair;
#if?DEBUG
#define?DI_SERVICE(PROTOCOL_NAME,CLASS_NAME)\
__used?static?Class?_DI_VALID_METHOD(void){\
????return?[CLASS_NAME?class];\
}\
__attribute((used,?section(_DI_SEGMENT?","?_DI_SECTION?)))?static?_di_pair?_DI_UNIQUE_VAR?=?\
{\
_TO_STRING(CLASS_NAME),\
_TO_STRING(PROTOCOL_NAME),\
};\
#else
__attribute((used,?section(_DI_SEGMENT?","?_DI_SECTION?)))?static?_di_pair?_DI_UNIQUE_VAR?=?\
{\
_TO_STRING(CLASS_NAME),\
_TO_STRING(PROTOCOL_NAME),\
};\
#endif
原理很簡(jiǎn)單:宏提供接口,編譯時(shí)將類(lèi)名和協(xié)議名寫(xiě)入二進(jìn)制的指定段,運行時(shí)讀出關(guān)系就知道協(xié)議綁定在哪個(gè)類(lèi)上。
有同學(xué)會(huì )注意到有一個(gè)無(wú)用的方法_DI_VALID_METHOD,它只存在于debug模式下,目的是為了讓編譯器保證類(lèi)型安全。
靜態(tài)初始化遷移
靜態(tài)初始化,和+load方法一樣,也會(huì )造成大量的Page In,通常來(lái)自C++代碼,比如網(wǎng)絡(luò )或者特效庫。 另外,一些靜態(tài)初始化是通過(guò)頭文件引入的,可以通過(guò)預處理來(lái)確認。
幾種典型的遷移思路:
//Bad
namespace?{
????static?const?std::string?bucket[]?=?{"apples",?"pears",?"meerkats"};
}
const?std::string?GetBucketThing(int?i)?{
?????return?bucket[i];
}
//Good
std::string?GetBucketThing(int?i)?{
??static?const?std::string?bucket[]?=?{"apples",?"pears",?"meerkats"};
??return?bucket[i];
}
Main 之后的啟動(dòng)器
啟動(dòng)需要框架來(lái)控制,抖音采用輕量級的中心化方案:
啟動(dòng)任務(wù)的執行過(guò)程如下:
為什么需要啟動(dòng)器?
三方SDK
一些第三方SDK啟動(dòng)時(shí)間比較長(cháng),比如Fabric,抖音下線(xiàn)后抖音的啟動(dòng)速度快了70ms左右。
除了下線(xiàn),很多SDK都可以延遲,比如分享、登錄等。另外,在接入SDK之前,可以先評估一下對啟動(dòng)性能的影響。 如果影響較大,可以反饋給SDK提供商修改,尤其是付費SDK。 他們其實(shí)很愿意配合,做一些修改。
高頻法
有些方法單獨耗時(shí)不高,但在啟動(dòng)路徑上會(huì )被多次調用,累計起來(lái)耗時(shí)不低。 比如讀取Info.plist中的配置:
+?(NSString?*)plistChannel
{
????return?[[[NSBundle?mainBundle]?infoDictionary]?objectForKey:@"CHANNEL_NAME"];
}
修改的方式很簡(jiǎn)單,加一層內存緩存即可。 這種問(wèn)題在TimeProfiler中選擇時(shí)間段的時(shí)候經(jīng)??梢钥吹?。
鎖
鎖之所以影響啟動(dòng)時(shí)間,是因為有時(shí)候子線(xiàn)程先持有鎖,主線(xiàn)程需要等待子線(xiàn)程鎖釋放。 還要警惕系統會(huì )有很多隱藏的全局鎖,比如dyld和Runtime。 例如:

下圖是UIImage imageNamed造成的主線(xiàn)程阻塞:
從右邊的??梢钥闯?,imageNamed觸發(fā)dlopen,dlopen等待dyld的全局鎖。 通過(guò)System Trace的Thread State Event,可以找到線(xiàn)程被阻塞的下一個(gè)事件。 此事件表明該線(xiàn)程可以再次運行,因為其他線(xiàn)程已經(jīng)釋放了鎖:
接下來(lái)通過(guò)分析此時(shí)后臺線(xiàn)程在做什么,就會(huì )知道為什么會(huì )持有鎖,以及如何優(yōu)化。
線(xiàn)程數
線(xiàn)程的數量和優(yōu)先級都會(huì )影響啟動(dòng)時(shí)間。 您可以通過(guò)設置 QoS 來(lái)配置優(yōu)先級。 兩個(gè)高質(zhì)量的 QoS 是用戶(hù)交互的/發(fā)起的。 啟動(dòng)時(shí)需要主線(xiàn)程等待的子線(xiàn)程任務(wù)要設置為高質(zhì)量。
優(yōu)質(zhì)線(xiàn)程的數量不應超過(guò) CPU 內核的數量。 您可以通過(guò)System Trace 的System Load 來(lái)分析這種情況。
/GCD
dispatch_queue_attr_t?attr?=?dispatch_queue_attr_make_with_qos_class(DISPATCH_QUEUE_SERIAL,?QOS_CLASS_UTILITY,?-1);
dispatch_queue_t?queue?=?dispatch_queue_create("com.custom.utility.queue",?attr);
//NSOperationQueue
operationQueue.qualityOfService?=?NSQualityOfServiceUtility
線(xiàn)程數也會(huì )影響啟動(dòng)時(shí)間,但在iOS中全局控制線(xiàn)程并不容易。 比如二/三方庫的后臺線(xiàn)程不好控制,但是業(yè)務(wù)線(xiàn)程可以通過(guò)啟動(dòng)任務(wù)來(lái)控制。
線(xiàn)程多沒(méi)關(guān)系,只要同時(shí)執行的并發(fā)不多,可以通過(guò)System Trace查看上下文切換耗時(shí),確認線(xiàn)程數是否是啟動(dòng)瓶頸.
圖片
難免會(huì )用到很多圖片來(lái)啟動(dòng)。 有什么辦法可以?xún)?yōu)化圖片加載的耗時(shí)嗎?
使用 Asset 管理圖像,而不是直接將它們放在 bundle 中。 資產(chǎn)將在編譯期間進(jìn)行優(yōu)化,以加快加載速度。 另外在A(yíng)sset中加載圖片比Bundle更快,因為UIImage imageNamed需要遍歷Bundle來(lái)尋找圖片。 Asset中加載圖片的耗時(shí)主要在第一張圖片,因為需要建立索引,這部分耗時(shí)可以通過(guò)將啟動(dòng)的圖片放到一個(gè)小的Asset中來(lái)減少。
每次創(chuàng )建一個(gè)UIImage,都需要IO,在渲染第一幀的時(shí)候解碼。 所以這個(gè)耗時(shí)的部分可以通過(guò)在子線(xiàn)程之前預加載(創(chuàng )建UIImage)來(lái)優(yōu)化。
如下圖所示,圖像只會(huì )在后期的“RootWindow Creation”和“First Frame Rendering”中使用,所以可以在啟動(dòng)前期啟動(dòng)預加載的子線(xiàn)程來(lái)啟動(dòng)任務(wù)。
魚(yú)鉤
fishhook是一個(gè)用來(lái)hook C函數的庫,但是第一次調用這個(gè)庫比較耗時(shí),所以最好不要帶上線(xiàn)。 Fishhook如下圖遍歷Mach-O的多個(gè)段,找到函數指針和函數符號名的映射關(guān)系。 副作用是需要大量的Page Ins。 對于大型應用,在 iPhone X 上啟動(dòng)冷啟動(dòng)需要時(shí)間 200ms+。
如果一定要使用fishhook,請在子線(xiàn)程中調用,不要直接在_dyld_register_func_for_add_image中調用fishhook。 因為這個(gè)方法會(huì )持有一個(gè)dyld的全局互斥量,系統庫經(jīng)常在主線(xiàn)程啟動(dòng)時(shí)調用dlsym和dlopen,內部也需要這個(gè)鎖,導致上述子線(xiàn)程阻塞主線(xiàn)程。
第一幀渲染
不同的APP有不同的業(yè)務(wù)形態(tài),首幀渲染優(yōu)化方式也大不相同。 幾個(gè)常見(jiàn)的優(yōu)化點(diǎn):
其他提示
啟動(dòng)優(yōu)化有一些需要注意的tips:
不要刪除tmp/com.apple.dyld目錄,因為iOS 13+的啟動(dòng)閉包存放在該目錄下。 如果刪除了,下次啟動(dòng)時(shí)會(huì )重新創(chuàng )建。 創(chuàng )建閉包的過(guò)程非常緩慢。 接下來(lái)是IO優(yōu)化。 一種常見(jiàn)的方式是使用mmap來(lái)使IO更快,也可以在啟動(dòng)的早期預加載數據。
還有一些點(diǎn)在iPhone 6上耗時(shí)會(huì )明顯增加:
iPhone 6是一個(gè)分水嶺,性能會(huì )跌落懸崖,你可以在iPhone 6上降低部分用戶(hù)交互來(lái)?yè)Q取核心體驗(切記AB驗證)。
Page In耗時(shí)
啟動(dòng)路徑上會(huì )觸發(fā)大量Page Ins。 有沒(méi)有辦法優(yōu)化這部分耗時(shí)?
部分重命名
App Store 會(huì )對上傳的 App 的 TEXT 部分進(jìn)行加密,并在 Page In 發(fā)生時(shí)對其進(jìn)行解密。 解密過(guò)程非常耗時(shí)。 由于TEXT部分會(huì )被加密,直接的思路就是將TEXT部分的內容移動(dòng)到其他部分。 ld還有一個(gè)參數rename_section來(lái)支持重命名:
抖音更名方案:
"-Wl,-rename_section,__TEXT,__cstring,__RODATA,__cstring",
"-Wl,-rename_section,__TEXT,__const,__RODATA,__const",
"-Wl,-rename_section,__TEXT,__gcc_except_tab,__RODATA,__gcc_except_tab",
"-Wl,-rename_section,__TEXT,__objc_methname,__RODATA,__objc_methname",
"-Wl,-rename_section,__TEXT,__objc_classname,__RODATA,__objc_classname",
"-Wl,-rename_section,__TEXT,__objc_methtype,__RODATA,__objc_methtype"
這種優(yōu)化方式在iOS 13下是有效的,因為iOS 13優(yōu)化了解密過(guò)程,Page In在的時(shí)候不需要解密,這也是iOS 13啟動(dòng)速度更快的原因之一。
二元重排
由于在啟動(dòng)路徑上會(huì )觸發(fā)大量的Page Ins,請問(wèn)有什么辦法可以?xún)?yōu)化嗎?
啟動(dòng)具有局部性的特點(diǎn),即啟動(dòng)時(shí)只用到少量函數,而且這些函數分布比較分散,因此Page In讀取的數據利用率不高。 如果我們可以將用于啟動(dòng)的函數安排成連續的二進(jìn)制區間,那么我們就可以減少Page In的數量,從而優(yōu)化啟動(dòng)時(shí)間:
以下圖為例。 啟動(dòng)時(shí)使用方法一和方法三。 為了執行相應的代碼,需要兩次 Page Ins。 如果我們把方法一和方法三放在一起,那么只需要一次Page In,從而提高了啟動(dòng)速度。
鏈接器 ld 有一個(gè)參數 -order_file 支持根據符號排列二進(jìn)制文件。 啟動(dòng)時(shí)使用的主流符號有兩種獲取方式:
Facebook的LLVM function instrumentation是為order_file定制的,代碼也是他們?yōu)長(cháng)LVM開(kāi)發(fā)的,已經(jīng)合并到LLVM的主分支中。
Facebook的方案更精細,生成的order_file是最優(yōu)方案,但工作量巨大。 抖音的方案不需要源碼編譯,不需要修改現有的編譯環(huán)境和流程,侵入性最小。 缺點(diǎn)是只能覆蓋90%左右的符號。
- 灰度是任何優(yōu)化的好階段,因為很多新的優(yōu)化方案都存在不確定性,需要先在灰度上進(jìn)行驗證。
非常規方案動(dòng)態(tài)庫懶加載
一開(kāi)始我們提到可以通過(guò)刪除代碼來(lái)減少代碼量,那么有沒(méi)有什么辦法可以在不減少代碼總量的情況下減少啟動(dòng)時(shí)加載的代碼量呢?
什么是懶加載動(dòng)態(tài)庫? 普通的動(dòng)態(tài)庫直接或間接地由主二進(jìn)制文件鏈接,因此這些動(dòng)態(tài)庫將在啟動(dòng)時(shí)加載。 如果只是打包進(jìn)App,不參與鏈接,那么啟動(dòng)時(shí)不會(huì )自動(dòng)加載。 當運行時(shí)需要動(dòng)態(tài)庫中的內容時(shí),會(huì )手動(dòng)延遲加載。
動(dòng)態(tài)庫的延遲加載在編譯時(shí)和運行時(shí)都需要修改。 編譯時(shí)的架構:
像 A.framework 這樣的動(dòng)態(tài)庫是延遲加載的,因為它們不參與主二進(jìn)制文件的直接或間接鏈接。 動(dòng)態(tài)庫之間必然存在一些共同的依賴(lài)關(guān)系,將這些依賴(lài)關(guān)系打包成Shared.framework來(lái)解決公共依賴(lài)關(guān)系的問(wèn)題。
運行時(shí)由-[NSBundle load]加載,本質(zhì)上是調用底層的dlopen。 那么什么時(shí)候觸發(fā)手動(dòng)加載動(dòng)態(tài)庫呢?
動(dòng)態(tài)庫可以分為業(yè)務(wù)類(lèi)和函數類(lèi)兩種。 業(yè)務(wù)是UI的入口,動(dòng)態(tài)庫加載的邏輯可以匯聚到路由內部,讓外部實(shí)際上不知道動(dòng)態(tài)庫是懶加載的,可以更好的斷層——寬容。 函數庫(比如上圖中的QR.framework)會(huì )有點(diǎn)不同,因為沒(méi)有UI等入口,函數庫需要自己維護Wrapper:
動(dòng)態(tài)庫懶加載除了減少啟動(dòng)加載的代碼外,還可以防止業(yè)務(wù)長(cháng)時(shí)間添加代碼導致的啟動(dòng)降級,因為業(yè)務(wù)在第一次訪(fǎng)問(wèn)時(shí)就完成了初始化。
該解決方案還有其他優(yōu)點(diǎn)。 比如動(dòng)態(tài)庫轉換后本地編譯時(shí)間會(huì )大大減少,對其他性能指標也有好處。 缺點(diǎn)是會(huì )犧牲一定的包體積,但是懶加載的動(dòng)態(tài)庫可以通過(guò)分段壓縮等方式進(jìn)行優(yōu)化。 來(lái)平衡這部分損失。
后臺獲取
Background Fetch 可以定時(shí)在后臺啟動(dòng)應用,對時(shí)間敏感的應用(比如新聞)在后臺刷新數據,可以提高提要加載速度,提升用戶(hù)體驗。
那么,為什么這種“后臺?;睢睓C制能夠提高啟動(dòng)速度呢? 我們來(lái)看一個(gè)典型案例:
系統在后臺啟動(dòng)應用程序需要很長(cháng)時(shí)間。 因為內存等原因,后臺App被kill了。 此時(shí),用戶(hù)立即啟動(dòng)App。 那么這個(gè)啟動(dòng)就是熱啟動(dòng),因為緩存還在。 另一次系統在后臺啟動(dòng)應用程序。 這個(gè)時(shí)候用戶(hù)在A(yíng)pp在后臺的時(shí)候點(diǎn)擊App,那么這個(gè)啟動(dòng)就是后臺回到前臺,因為App還活著(zhù)
通過(guò)這兩個(gè)典型場(chǎng)景,我們可以看出為什么Background Fetch可以提高啟動(dòng)速度:
啟動(dòng)后臺有一些需要注意的地方,比如日?;顒?dòng),廣告,甚至AB組入口的邏輯都會(huì )受到影響,需要大量的適配。 經(jīng)常需要launcher來(lái)支持,因為didFinishLaunch中執行的task在后臺啟動(dòng)時(shí)需要延遲到第一次回到前臺才正常啟動(dòng)。
總結
最后,提取了我們認為在任何優(yōu)化中都很重要的幾點(diǎn):
加入我們
我們是負責抖音客戶(hù)端基礎能力研發(fā)和新技術(shù)探索的團隊。 我們深耕工程/業(yè)務(wù)架構、研發(fā)工具、編譯系統等,支持業(yè)務(wù)快速迭代,同時(shí)保證超大規模團隊的研發(fā)效率和工程質(zhì)量。 在性能/穩定性等方面不斷探索,力求為全球億萬(wàn)用戶(hù)提供最極致的基礎體驗。
如果你熱愛(ài)技術(shù),歡迎加入抖音基礎技術(shù)團隊,讓我們一起打造億級國民APP。 目前我們在上海、北京、杭州、深圳都有招聘需求。 內推可以聯(lián)系郵箱:,郵件標題:姓名-工作年限-抖音-基礎技術(shù)抖音 /Android。
歡迎關(guān)注“字節跳動(dòng)技術(shù)團隊”
簡(jiǎn)歷投遞聯(lián)系郵箱:“ ”
分享文章:文章自動(dòng)采集
采集交流 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 144 次瀏覽 ? 2022-12-20 03:28
文章自動(dòng)采集,文章自動(dòng)采集怎么做,文章自動(dòng)采集發(fā)布
文章自動(dòng)采集Discuz應用中心搜索“csdn123”神秘人物,下載采集插件成功后,開(kāi)啟自動(dòng)采集并發(fā)布內容。
使用百度的discuz結構化數據插件。 可以有效提高收錄效率,但主要還是要看你網(wǎng)站的優(yōu)化效果。
時(shí)代互聯(lián)為您解答
文章自動(dòng)采集wordpress采集采集文章文章
全網(wǎng)熱點(diǎn)話(huà)題:
1樓文章自動(dòng)采集軟件:可自動(dòng)采集大量關(guān)鍵詞 3可設置項采集特定網(wǎng)站頻道目錄下的所有文章內容(如simple,貼吧百度),系統智能匹配,無(wú)需要寫(xiě)復雜
2樓文章自動(dòng)采集采集器:文章內容自動(dòng)采集和發(fā)布內容經(jīng)歷了數月的搏擊,文章內容自動(dòng)采集和文章內容自動(dòng)發(fā)布已經(jīng)上線(xiàn),簡(jiǎn)單易用的操作面板,
3樓自動(dòng)采集生成文章:在采集過(guò)程中,會(huì )自動(dòng)生成一個(gè)目錄。 微信采集完成后,將采集采集的內容存放在weixin目錄下的微信公眾號中。 文章標題目錄內容為圖片和txt文件。 下載地址:
4樓自動(dòng)文章采集器:抖音采集軟件在之前的文章中也提到過(guò)。 這個(gè)神器在很多項目中都有使用。 今天給大家詳細介紹兩款抖音軟件! 兩個(gè)軟件都是同一個(gè)作者開(kāi)發(fā)的
即將到來(lái)的假期:11 月的萬(wàn)圣節! 再忙也要善待自己!
文章自動(dòng)采集!
直觀(guān):如何采集靜態(tài)文章系統
結束功能
函數 getbody(url)
下一個(gè)錯誤恢復
設置檢索 = createobject("microsoft.xmlhttp")
帶檢索
.open "get", url, false, "", ""
。發(fā)送
getbody = .responsebody
結束于
設置檢索 = 無(wú)
結束功能
函數 bytetestobstr(正文,cset)
昏暗的對象流
設置 objstream = server.createobject("adodb.stream")
objstream.type = 1
objstream.mode=3
對象流.open
objstream.write 正文
objstream.position = 0
objstream.type = 2
objstream.charset = cset
bytesobstr = 對象流。 閱讀文本
對象流。 關(guān)
設置 objstream = 無(wú)
結束功能
那我們先寫(xiě)個(gè)最簡(jiǎn)單的程序,一步步教你,(呵呵,廢話(huà)太多*.*)
將以上代碼命名為 get.asp
另一個(gè)頁(yè)面代碼稱(chēng)為 getfilename.asp。 代碼如下:
呵呵,getfilename.asp就完成了,當然這是最簡(jiǎn)單的copy,我們還得一步步修改完善,
當你走到代碼最遠的地方時(shí),你會(huì )看到一個(gè)與那個(gè)頁(yè)面基本相同的頁(yè)面。 當然有些圖片是不能顯示的!
然后我們分析這個(gè)頁(yè)面,首頁(yè),右鍵,查看源代碼找到這一行
知名度
當然,我們不要那么多,人氣就夠了,但是為了保險起見(jiàn),還是要多點(diǎn),
這是那些文件標題開(kāi)始的地方,然后我們找到它們結束的地方,
頁(yè)數
哦,我找到了這些代碼,多多少少都可以,我們的代碼需要一步步完善,
然后我們把getfilename.asp改成
再次運行此文件并查看,
你會(huì )發(fā)現少了很多東西,哦,簡(jiǎn)單多了,那么,我們再找規律,在同一個(gè)頁(yè)面查看源碼,
然后你會(huì )發(fā)現每個(gè)item都是由一個(gè)label組成的,這樣就好辦多了,
djmore=分裂(dj1,“”)
記住,仔細看,你會(huì )發(fā)現更多,
然后去掉前兩個(gè),就變成這樣了
讓我們循環(huán)
捆
response.write dj1 替換為
djmore=分裂(dj1,“”)
對于 i=1 到 ubound(djmore)-2
響應.write djmore(i)
下一個(gè)
這會(huì )將每一行分成以下內容
CSS語(yǔ)法手冊(一)字體屬性
2005-7-21
現在分析這段就容易多了,
讓我們?yōu)?djmore(i) 數組中的項目編寫(xiě)代碼,
l3=instr(djmore(i), "l4=instr(l3,djmore(i), """ target=""_blank""")
url=mid(djmore(i),l3,l4-l3)
響應。寫(xiě) url &"
“
為了方便寫(xiě)在這??里,
將以上段落替換為上一段
響應.write djmore(i)
在這里添加
是用來(lái)?yè)Q行的,比較好看,然后你看url好像多了點(diǎn)東西,所以我們要做一些處理,把
url=mid(djmore(i),l3,l4-l3) 變成
url=mid(djmore(i),l3+len("哦,沒(méi)問(wèn)題,再次運行時(shí)會(huì )留下地址,
哦對了,這只是針對每個(gè)頁(yè)面,如果你想要所有的,你只需要修改它 查看全部
分享文章:文章自動(dòng)采集
文章自動(dòng)采集,文章自動(dòng)采集怎么做,文章自動(dòng)采集發(fā)布
文章自動(dòng)采集Discuz應用中心搜索“csdn123”神秘人物,下載采集插件成功后,開(kāi)啟自動(dòng)采集并發(fā)布內容。
使用百度的discuz結構化數據插件。 可以有效提高收錄效率,但主要還是要看你網(wǎng)站的優(yōu)化效果。

時(shí)代互聯(lián)為您解答
文章自動(dòng)采集wordpress采集采集文章文章
全網(wǎng)熱點(diǎn)話(huà)題:
1樓文章自動(dòng)采集軟件:可自動(dòng)采集大量關(guān)鍵詞 3可設置項采集特定網(wǎng)站頻道目錄下的所有文章內容(如simple,貼吧百度),系統智能匹配,無(wú)需要寫(xiě)復雜

2樓文章自動(dòng)采集采集器:文章內容自動(dòng)采集和發(fā)布內容經(jīng)歷了數月的搏擊,文章內容自動(dòng)采集和文章內容自動(dòng)發(fā)布已經(jīng)上線(xiàn),簡(jiǎn)單易用的操作面板,
3樓自動(dòng)采集生成文章:在采集過(guò)程中,會(huì )自動(dòng)生成一個(gè)目錄。 微信采集完成后,將采集采集的內容存放在weixin目錄下的微信公眾號中。 文章標題目錄內容為圖片和txt文件。 下載地址:
4樓自動(dòng)文章采集器:抖音采集軟件在之前的文章中也提到過(guò)。 這個(gè)神器在很多項目中都有使用。 今天給大家詳細介紹兩款抖音軟件! 兩個(gè)軟件都是同一個(gè)作者開(kāi)發(fā)的
即將到來(lái)的假期:11 月的萬(wàn)圣節! 再忙也要善待自己!
文章自動(dòng)采集!
直觀(guān):如何采集靜態(tài)文章系統
結束功能
函數 getbody(url)
下一個(gè)錯誤恢復
設置檢索 = createobject("microsoft.xmlhttp")
帶檢索
.open "get", url, false, "", ""
。發(fā)送
getbody = .responsebody
結束于
設置檢索 = 無(wú)
結束功能
函數 bytetestobstr(正文,cset)
昏暗的對象流
設置 objstream = server.createobject("adodb.stream")
objstream.type = 1
objstream.mode=3
對象流.open
objstream.write 正文
objstream.position = 0
objstream.type = 2
objstream.charset = cset
bytesobstr = 對象流。 閱讀文本

對象流。 關(guān)
設置 objstream = 無(wú)
結束功能
那我們先寫(xiě)個(gè)最簡(jiǎn)單的程序,一步步教你,(呵呵,廢話(huà)太多*.*)
將以上代碼命名為 get.asp
另一個(gè)頁(yè)面代碼稱(chēng)為 getfilename.asp。 代碼如下:
呵呵,getfilename.asp就完成了,當然這是最簡(jiǎn)單的copy,我們還得一步步修改完善,
當你走到代碼最遠的地方時(shí),你會(huì )看到一個(gè)與那個(gè)頁(yè)面基本相同的頁(yè)面。 當然有些圖片是不能顯示的!
然后我們分析這個(gè)頁(yè)面,首頁(yè),右鍵,查看源代碼找到這一行
知名度
當然,我們不要那么多,人氣就夠了,但是為了保險起見(jiàn),還是要多點(diǎn),
這是那些文件標題開(kāi)始的地方,然后我們找到它們結束的地方,
頁(yè)數
哦,我找到了這些代碼,多多少少都可以,我們的代碼需要一步步完善,
然后我們把getfilename.asp改成
再次運行此文件并查看,
你會(huì )發(fā)現少了很多東西,哦,簡(jiǎn)單多了,那么,我們再找規律,在同一個(gè)頁(yè)面查看源碼,
然后你會(huì )發(fā)現每個(gè)item都是由一個(gè)label組成的,這樣就好辦多了,
djmore=分裂(dj1,“”)
記住,仔細看,你會(huì )發(fā)現更多,
然后去掉前兩個(gè),就變成這樣了
讓我們循環(huán)
捆

response.write dj1 替換為
djmore=分裂(dj1,“”)
對于 i=1 到 ubound(djmore)-2
響應.write djmore(i)
下一個(gè)
這會(huì )將每一行分成以下內容
CSS語(yǔ)法手冊(一)字體屬性
2005-7-21
現在分析這段就容易多了,
讓我們?yōu)?djmore(i) 數組中的項目編寫(xiě)代碼,
l3=instr(djmore(i), "l4=instr(l3,djmore(i), """ target=""_blank""")
url=mid(djmore(i),l3,l4-l3)
響應。寫(xiě) url &"
“
為了方便寫(xiě)在這??里,
將以上段落替換為上一段
響應.write djmore(i)
在這里添加
是用來(lái)?yè)Q行的,比較好看,然后你看url好像多了點(diǎn)東西,所以我們要做一些處理,把
url=mid(djmore(i),l3,l4-l3) 變成
url=mid(djmore(i),l3+len("哦,沒(méi)問(wèn)題,再次運行時(shí)會(huì )留下地址,
哦對了,這只是針對每個(gè)頁(yè)面,如果你想要所有的,你只需要修改它
官方數據:如何運用大數據,實(shí)現輿情監測?
采集交流 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 90 次瀏覽 ? 2022-12-16 03:37
隨著(zhù)移動(dòng)互聯(lián)網(wǎng)的快速發(fā)展,人類(lèi)已經(jīng)進(jìn)入了大數據時(shí)代。我們每天都在不知不覺(jué)中接觸到無(wú)數或真或假的信息,這讓我們無(wú)法辨別真假,有時(shí)也很容易受到輿論的影響?,F在政府、機構和企業(yè)都開(kāi)始關(guān)注輿論,知道負面輿論帶來(lái)的危害是巨大的。但在當今信息量巨大、傳播迅速的大數據時(shí)代,簡(jiǎn)單的操作已經(jīng)不能滿(mǎn)足網(wǎng)絡(luò )輿情的爆發(fā),那么如何利用大數據實(shí)施輿情監測呢?
1、如何利用大數據實(shí)施輿情監測?
1.將大數據與日常輿情管理緊密結合,提高網(wǎng)絡(luò )輿情整體管控水平。需要利用大數據突破傳統輿情管理的狹窄視野,建立網(wǎng)絡(luò )輿情大數據監測系統,采集網(wǎng)站等各網(wǎng)絡(luò )平臺的實(shí)時(shí)數據、博客、微博、微信、論壇等,全面分析輿情傳播動(dòng)態(tài)。
2.將大數據與輿論引導緊密結合,提高號召力和說(shuō)服力。大數據時(shí)代的輿論引導,一方面要“跟數”,通過(guò)對網(wǎng)絡(luò )數據的分析,把握網(wǎng)民的輿論傾向,了解網(wǎng)民的喜??好和特點(diǎn)。另一方面,我們要“用數據說(shuō)話(huà)”。數據最有說(shuō)服力。在充分采集相關(guān)數據的基礎上,運用圖表等數據可視化技術(shù),全面呈現事件的來(lái)龍去脈,讓網(wǎng)民不僅了解事件的真相,更了解事件的背景和來(lái)龍去脈。事發(fā),把握網(wǎng)友情緒。的角度來(lái)處理問(wèn)題。
3.將大數據與網(wǎng)上政府信息公開(kāi)緊密結合,提升政府公信力。目前,美國政府建立了統一的開(kāi)放數據門(mén)戶(hù)網(wǎng)站,并為社會(huì )各界提供接口,開(kāi)發(fā)應用程序以使用各部門(mén)的數據。一種新的政府信息公開(kāi)方式。要在保障數據安全的基礎上,探索建立我國大數據政務(wù)公開(kāi)制度,引導社會(huì )力量參與公共數據的挖掘和利用,實(shí)現數據價(jià)值最大化。
2. 下面舉例說(shuō)明如何實(shí)現基于網(wǎng)絡(luò )大數據的輿情監測
本文以2019年9月9日“港榮蒸糕丙二醇超標”輿論事件為例。通過(guò)對賽事新聞、博客、微博、微信、論壇等互聯(lián)網(wǎng)數據的持續監測和采集,多維度、全方位展現信息變化,以及輿情的具體實(shí)施過(guò)程開(kāi)展基于網(wǎng)絡(luò )大數據的監測。討論。
1、輿情發(fā)展趨勢監測分析
發(fā)展趨勢監測是從網(wǎng)絡(luò )數據來(lái)源、事件輿情數量和時(shí)間三個(gè)維度進(jìn)行趨勢分析。該分析結果可以直觀(guān)地展示各大網(wǎng)絡(luò )媒體的輿情傳播情況。
如圖1所示,輿情信息在2019年9月9日達到最大值。2019年9月8日00:00至2019年9月10日14:00期間,采集共23169條在網(wǎng)絡(luò )上收到的輿情信息中,微博平臺的傳播量最大,相關(guān)信息最多達4320條。新浪微博和微信成為此次事件的主要媒體。
2. 輿情和情緒趨勢監測分析
輿情情緒趨勢分析是通過(guò)對與輿情相關(guān)的網(wǎng)絡(luò )文本進(jìn)行情緒分析,全面了解公眾對輿論的態(tài)度。如圖2所示,在輿情事件的發(fā)展過(guò)程中,敏感信息占整個(gè)輿情的62.67%。
3、傳播途徑監測分析
傳播渠道分析是對輿情傳播方向、數量和范圍的直觀(guān)分析。對傳播渠道的監測和分析,可以幫助管理者更直觀(guān)地了解整個(gè)輿情事件的傳播路徑和事態(tài)的演變過(guò)程,尤其是輿論從哪里產(chǎn)生,從哪里發(fā)展。有跡可循,如圖3所示,層數越多,傳播范圍越廣。
4. 輿情媒體數量監測分析
輿情媒體數量監測分析是對主要參與輿論的媒體發(fā)布的輿情數量進(jìn)行監測分析。如圖4所示,在網(wǎng)絡(luò )媒體、論壇、微博、微信等媒體報道的采集的23169條網(wǎng)絡(luò )文本中,微博文本占比92.38%,占所有媒體文本的92.38%。最高。造成這樣結果的主要原因是活動(dòng)本身是在微博平臺發(fā)起的,而微博平臺有非常方便的媒體轉發(fā)功能。此外,大數據平臺擁有微博數據全量授權,讓數據挖掘更加全面準確。
網(wǎng)絡(luò )逐漸成為公眾參與輿論的第一渠道。在萬(wàn)物互聯(lián)的數據時(shí)代,加強網(wǎng)絡(luò )輿情監測和引導,對于維護國家穩定、促進(jìn)企業(yè)可持續發(fā)展具有重要的現實(shí)意義。此次香港榮正品牌被曝丙二醇超標,同樣是no zuo no die。想要不被卷入輿論的漩渦,除了使用大數據輿情監測系統等監測軟件為自己保駕護航外,還需要保證自己產(chǎn)品和服務(wù)的質(zhì)量。
解決方案:搜狗推送工具之搜狗百萬(wàn)蜘蛛實(shí)現
最近有很多站長(cháng)問(wèn)我搜狗推送工具好用嗎?可以分批推送嗎?送貨方式有哪些?搜狗 收錄 是怎么做到的?搜狗潘收錄應該做什么?搜狗的百萬(wàn)蜘蛛是如何實(shí)現的?今天,筆者就對這些問(wèn)題進(jìn)行統一的解答。
首先,搜狗推送工具肯定好用。搜狗官方是這么說(shuō)的:“為了鼓勵搜狗蜘蛛更快地發(fā)現你的站點(diǎn),你也可以通過(guò)網(wǎng)站收錄接口提交頁(yè)面申請收錄。提交后,搜狗搜索引擎會(huì )按照標準,為了提高處理效率,請不要重復提交同一個(gè)鏈接。沒(méi)用的,為什么要開(kāi)這樣的提交入口,一定有用,不然豈不是浪費資源?
搜狗提供了幾種提交方式?為了驗證站點(diǎn)推送,每個(gè)子域綁定的配額增加200,1000個(gè)子域相當于每天20萬(wàn)個(gè)推送配額。站后推送 2、非鑒權提交。單賬號單域名每天推送200條。如果需要大量推送,則需要大量的賬號。3.站點(diǎn)地圖推送。只有網(wǎng)站有這個(gè)站點(diǎn)地圖權限部分的權限,90%的網(wǎng)站沒(méi)有這個(gè)權限。
為了我們網(wǎng)站能夠盡快被搜狗蜘蛛和搜狗收錄找到,我們不得不不斷地向搜狗站長(cháng)平臺提交鏈接,讓蜘蛛來(lái)抓。為了提高效率,我們使用了搜狗的active批量推送工具,可以讓網(wǎng)站的所有鏈接在沒(méi)有vps的情況下自動(dòng)批量推送,工具自動(dòng)編碼。每天可提交數萬(wàn)個(gè)URL,支持24小時(shí)掛機,無(wú)人值守,長(cháng)期穩定。
怎樣才能用搜狗推送工具做好搜狗收錄呢?
選擇一個(gè)舊域名。為什么選擇搜狗老域名,因為老域名的頁(yè)面評分更高,網(wǎng)站容易被搜狗搜索到!
搜狗排名算法。是搜狗官方衡量網(wǎng)頁(yè)重要性的指標。它不僅考察網(wǎng)頁(yè)之間的鏈接關(guān)系,還考察鏈接質(zhì)量、鏈接之間的相關(guān)性等各種特征。由機器根據sogou Rank算法自動(dòng)計算,數值從0開(kāi)始,范圍從10級到10級。頁(yè)面排名越高,該頁(yè)面被搜索到的可能性就越大。搜狗的老域名有自己的評級,所以很快就被搜狗找回了,這也是為什么那么多人用老域名的原因!
網(wǎng)站源代碼程序選擇。網(wǎng)站源程序優(yōu)先選擇靜態(tài)網(wǎng)頁(yè),搜狗更偏愛(ài)靜態(tài)網(wǎng)頁(yè)!. 網(wǎng)站 程序具有清晰的導航和層次結構。網(wǎng)站重要的網(wǎng)頁(yè)應該從網(wǎng)站一級欄目位置開(kāi)始查找,確保每個(gè)網(wǎng)站頁(yè)面都可以通過(guò)文本鏈接被抓取。網(wǎng)站所在服務(wù)器不穩定。搜狗蜘蛛在抓取網(wǎng)站時(shí),會(huì )清除已經(jīng)被收錄的網(wǎng)站頁(yè)面。
網(wǎng)站內容。網(wǎng)站無(wú)論內容是原創(chuàng )還是偽原創(chuàng ),只要搜狗搜索引擎認為是原創(chuàng )文章文章即可!
今天關(guān)于搜狗推送工具的分享就到這里了。下次我會(huì )分享更多實(shí)用的SEO知識。我希望這個(gè) 文章 可以幫助您完成網(wǎng)站建設之旅。下次見(jiàn)!喜歡這個(gè)文章的朋友不妨點(diǎn)三下??! 查看全部
官方數據:如何運用大數據,實(shí)現輿情監測?
隨著(zhù)移動(dòng)互聯(lián)網(wǎng)的快速發(fā)展,人類(lèi)已經(jīng)進(jìn)入了大數據時(shí)代。我們每天都在不知不覺(jué)中接觸到無(wú)數或真或假的信息,這讓我們無(wú)法辨別真假,有時(shí)也很容易受到輿論的影響?,F在政府、機構和企業(yè)都開(kāi)始關(guān)注輿論,知道負面輿論帶來(lái)的危害是巨大的。但在當今信息量巨大、傳播迅速的大數據時(shí)代,簡(jiǎn)單的操作已經(jīng)不能滿(mǎn)足網(wǎng)絡(luò )輿情的爆發(fā),那么如何利用大數據實(shí)施輿情監測呢?
1、如何利用大數據實(shí)施輿情監測?
1.將大數據與日常輿情管理緊密結合,提高網(wǎng)絡(luò )輿情整體管控水平。需要利用大數據突破傳統輿情管理的狹窄視野,建立網(wǎng)絡(luò )輿情大數據監測系統,采集網(wǎng)站等各網(wǎng)絡(luò )平臺的實(shí)時(shí)數據、博客、微博、微信、論壇等,全面分析輿情傳播動(dòng)態(tài)。
2.將大數據與輿論引導緊密結合,提高號召力和說(shuō)服力。大數據時(shí)代的輿論引導,一方面要“跟數”,通過(guò)對網(wǎng)絡(luò )數據的分析,把握網(wǎng)民的輿論傾向,了解網(wǎng)民的喜??好和特點(diǎn)。另一方面,我們要“用數據說(shuō)話(huà)”。數據最有說(shuō)服力。在充分采集相關(guān)數據的基礎上,運用圖表等數據可視化技術(shù),全面呈現事件的來(lái)龍去脈,讓網(wǎng)民不僅了解事件的真相,更了解事件的背景和來(lái)龍去脈。事發(fā),把握網(wǎng)友情緒。的角度來(lái)處理問(wèn)題。
3.將大數據與網(wǎng)上政府信息公開(kāi)緊密結合,提升政府公信力。目前,美國政府建立了統一的開(kāi)放數據門(mén)戶(hù)網(wǎng)站,并為社會(huì )各界提供接口,開(kāi)發(fā)應用程序以使用各部門(mén)的數據。一種新的政府信息公開(kāi)方式。要在保障數據安全的基礎上,探索建立我國大數據政務(wù)公開(kāi)制度,引導社會(huì )力量參與公共數據的挖掘和利用,實(shí)現數據價(jià)值最大化。

2. 下面舉例說(shuō)明如何實(shí)現基于網(wǎng)絡(luò )大數據的輿情監測
本文以2019年9月9日“港榮蒸糕丙二醇超標”輿論事件為例。通過(guò)對賽事新聞、博客、微博、微信、論壇等互聯(lián)網(wǎng)數據的持續監測和采集,多維度、全方位展現信息變化,以及輿情的具體實(shí)施過(guò)程開(kāi)展基于網(wǎng)絡(luò )大數據的監測。討論。
1、輿情發(fā)展趨勢監測分析
發(fā)展趨勢監測是從網(wǎng)絡(luò )數據來(lái)源、事件輿情數量和時(shí)間三個(gè)維度進(jìn)行趨勢分析。該分析結果可以直觀(guān)地展示各大網(wǎng)絡(luò )媒體的輿情傳播情況。
如圖1所示,輿情信息在2019年9月9日達到最大值。2019年9月8日00:00至2019年9月10日14:00期間,采集共23169條在網(wǎng)絡(luò )上收到的輿情信息中,微博平臺的傳播量最大,相關(guān)信息最多達4320條。新浪微博和微信成為此次事件的主要媒體。
2. 輿情和情緒趨勢監測分析
輿情情緒趨勢分析是通過(guò)對與輿情相關(guān)的網(wǎng)絡(luò )文本進(jìn)行情緒分析,全面了解公眾對輿論的態(tài)度。如圖2所示,在輿情事件的發(fā)展過(guò)程中,敏感信息占整個(gè)輿情的62.67%。

3、傳播途徑監測分析
傳播渠道分析是對輿情傳播方向、數量和范圍的直觀(guān)分析。對傳播渠道的監測和分析,可以幫助管理者更直觀(guān)地了解整個(gè)輿情事件的傳播路徑和事態(tài)的演變過(guò)程,尤其是輿論從哪里產(chǎn)生,從哪里發(fā)展。有跡可循,如圖3所示,層數越多,傳播范圍越廣。
4. 輿情媒體數量監測分析
輿情媒體數量監測分析是對主要參與輿論的媒體發(fā)布的輿情數量進(jìn)行監測分析。如圖4所示,在網(wǎng)絡(luò )媒體、論壇、微博、微信等媒體報道的采集的23169條網(wǎng)絡(luò )文本中,微博文本占比92.38%,占所有媒體文本的92.38%。最高。造成這樣結果的主要原因是活動(dòng)本身是在微博平臺發(fā)起的,而微博平臺有非常方便的媒體轉發(fā)功能。此外,大數據平臺擁有微博數據全量授權,讓數據挖掘更加全面準確。
網(wǎng)絡(luò )逐漸成為公眾參與輿論的第一渠道。在萬(wàn)物互聯(lián)的數據時(shí)代,加強網(wǎng)絡(luò )輿情監測和引導,對于維護國家穩定、促進(jìn)企業(yè)可持續發(fā)展具有重要的現實(shí)意義。此次香港榮正品牌被曝丙二醇超標,同樣是no zuo no die。想要不被卷入輿論的漩渦,除了使用大數據輿情監測系統等監測軟件為自己保駕護航外,還需要保證自己產(chǎn)品和服務(wù)的質(zhì)量。
解決方案:搜狗推送工具之搜狗百萬(wàn)蜘蛛實(shí)現
最近有很多站長(cháng)問(wèn)我搜狗推送工具好用嗎?可以分批推送嗎?送貨方式有哪些?搜狗 收錄 是怎么做到的?搜狗潘收錄應該做什么?搜狗的百萬(wàn)蜘蛛是如何實(shí)現的?今天,筆者就對這些問(wèn)題進(jìn)行統一的解答。
首先,搜狗推送工具肯定好用。搜狗官方是這么說(shuō)的:“為了鼓勵搜狗蜘蛛更快地發(fā)現你的站點(diǎn),你也可以通過(guò)網(wǎng)站收錄接口提交頁(yè)面申請收錄。提交后,搜狗搜索引擎會(huì )按照標準,為了提高處理效率,請不要重復提交同一個(gè)鏈接。沒(méi)用的,為什么要開(kāi)這樣的提交入口,一定有用,不然豈不是浪費資源?
搜狗提供了幾種提交方式?為了驗證站點(diǎn)推送,每個(gè)子域綁定的配額增加200,1000個(gè)子域相當于每天20萬(wàn)個(gè)推送配額。站后推送 2、非鑒權提交。單賬號單域名每天推送200條。如果需要大量推送,則需要大量的賬號。3.站點(diǎn)地圖推送。只有網(wǎng)站有這個(gè)站點(diǎn)地圖權限部分的權限,90%的網(wǎng)站沒(méi)有這個(gè)權限。

為了我們網(wǎng)站能夠盡快被搜狗蜘蛛和搜狗收錄找到,我們不得不不斷地向搜狗站長(cháng)平臺提交鏈接,讓蜘蛛來(lái)抓。為了提高效率,我們使用了搜狗的active批量推送工具,可以讓網(wǎng)站的所有鏈接在沒(méi)有vps的情況下自動(dòng)批量推送,工具自動(dòng)編碼。每天可提交數萬(wàn)個(gè)URL,支持24小時(shí)掛機,無(wú)人值守,長(cháng)期穩定。
怎樣才能用搜狗推送工具做好搜狗收錄呢?
選擇一個(gè)舊域名。為什么選擇搜狗老域名,因為老域名的頁(yè)面評分更高,網(wǎng)站容易被搜狗搜索到!
搜狗排名算法。是搜狗官方衡量網(wǎng)頁(yè)重要性的指標。它不僅考察網(wǎng)頁(yè)之間的鏈接關(guān)系,還考察鏈接質(zhì)量、鏈接之間的相關(guān)性等各種特征。由機器根據sogou Rank算法自動(dòng)計算,數值從0開(kāi)始,范圍從10級到10級。頁(yè)面排名越高,該頁(yè)面被搜索到的可能性就越大。搜狗的老域名有自己的評級,所以很快就被搜狗找回了,這也是為什么那么多人用老域名的原因!

網(wǎng)站源代碼程序選擇。網(wǎng)站源程序優(yōu)先選擇靜態(tài)網(wǎng)頁(yè),搜狗更偏愛(ài)靜態(tài)網(wǎng)頁(yè)!. 網(wǎng)站 程序具有清晰的導航和層次結構。網(wǎng)站重要的網(wǎng)頁(yè)應該從網(wǎng)站一級欄目位置開(kāi)始查找,確保每個(gè)網(wǎng)站頁(yè)面都可以通過(guò)文本鏈接被抓取。網(wǎng)站所在服務(wù)器不穩定。搜狗蜘蛛在抓取網(wǎng)站時(shí),會(huì )清除已經(jīng)被收錄的網(wǎng)站頁(yè)面。
網(wǎng)站內容。網(wǎng)站無(wú)論內容是原創(chuàng )還是偽原創(chuàng ),只要搜狗搜索引擎認為是原創(chuàng )文章文章即可!
今天關(guān)于搜狗推送工具的分享就到這里了。下次我會(huì )分享更多實(shí)用的SEO知識。我希望這個(gè) 文章 可以幫助您完成網(wǎng)站建設之旅。下次見(jiàn)!喜歡這個(gè)文章的朋友不妨點(diǎn)三下??!
匯總:大數據實(shí)時(shí)計算流程介紹
采集交流 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 114 次瀏覽 ? 2022-12-16 03:36
實(shí)時(shí)計算是一種常見(jiàn)的大數據計算場(chǎng)景。業(yè)務(wù)部門(mén)需要實(shí)時(shí)反饋產(chǎn)品的點(diǎn)擊、瀏覽、采集、購買(mǎi)、評價(jià)等數據,時(shí)延要求一般在秒級甚至毫秒級。批計算引擎通常需要幾分鐘或幾小時(shí)才能返回結果,顯然不能滿(mǎn)足這種場(chǎng)景的計算需求?;趯?shí)時(shí)計算的需求,流式計算引擎應運而生。目前應用廣泛的流式計算引擎主要有Spark、Storm和Flink。
一個(gè)典型的實(shí)時(shí)計算流程如下圖所示。首先通過(guò)Flume傳遞實(shí)時(shí)采集數據,然后通過(guò)消息隊列緩存采集數據。之后使用流式計算引擎進(jìn)行計算,最后將計算結果存儲在高速查詢(xún)引擎中,以便日后高效利用數據,支持報表開(kāi)發(fā)、多維分析或數據挖掘,等等
典型的實(shí)時(shí)計算流程
1、實(shí)時(shí)計算和離線(xiàn)計算如何高效共存
一些企業(yè)迫切需要實(shí)時(shí)計算和離線(xiàn)計算并存。大部分報表和任務(wù)還是基于離線(xiàn)計算,實(shí)時(shí)性要求高的應用需要使用實(shí)時(shí)計算引擎。
最直觀(guān)的想法就是為離線(xiàn)計算和實(shí)時(shí)計算場(chǎng)景搭建計算平臺,讓兩個(gè)平臺共存。這就是通常所說(shuō)的Lambda架構的處理方式,如下圖(1)所示。
搭建離線(xiàn)計算和實(shí)時(shí)計算場(chǎng)景的計算平臺
如果企業(yè)維護兩個(gè)獨立的計算平臺,成本高,運維困難,兩個(gè)平臺的數據準確性和一致性也難以保證。如何高效解決兩個(gè)計算引擎共存的問(wèn)題
Kappa的流批一體化架構和處理方式可以有效解決兩者高效共存的問(wèn)題,其架構圖如上圖(2)所示。Kappa架構的核心組件是消息隊列、數據倉庫、流批一體化計算引擎和高效查詢(xún)引擎。目前最流行的流批一體計算引擎是Flink。
2、實(shí)時(shí)數據倉庫
實(shí)時(shí)數倉與離線(xiàn)數倉最大的區別在于,通過(guò)使用消息隊列、流批一體計算引擎、查詢(xún)引擎等工具,整個(gè)平臺的計算和查詢(xún)效率更高,可以滿(mǎn)足業(yè)務(wù)的實(shí)時(shí)需求。因此,實(shí)時(shí)數據倉庫需要更高的計算能力。如果短期內數據量突然增加,那么就要考慮實(shí)時(shí)數倉的性能和穩定性。相比之下,離線(xiàn)數倉對數據量的增加不那么敏感,性能更穩定。另外,從分層建模的角度來(lái)看,實(shí)時(shí)數倉的層次不宜過(guò)多,否則會(huì )增加響應延遲。
分層框架和技術(shù)選擇
1. ODS層
源數據從數據源中提取出來(lái),存儲在Kafka中,構成實(shí)時(shí)數倉的ODS層。
2.DWD層
通過(guò)在Kafka中實(shí)時(shí)訂閱流式業(yè)務(wù)數據,利用Flink計算引擎進(jìn)行ETL、清洗、聚合、多表關(guān)聯(lián)等操作,獲取實(shí)時(shí)明細數據并存儲在Kafka中。
3.DWS層
DWS層是通過(guò)Flink計算引擎對DWD層的詳細數據進(jìn)行聚合匯總得到的?;跇I(yè)務(wù)差異化的需要,DWS層分為輕匯總層和高匯總層。輕匯總層的主要目的是支撐APP層的應用需求。高層匯總層的主要目的是滿(mǎn)足業(yè)務(wù)對統計數據的高效查詢(xún)需求,如實(shí)時(shí)大屏、數據產(chǎn)品等。
4.APP層
基于業(yè)務(wù)的差異化需求,輕匯總層會(huì )使用不同的存儲介質(zhì)。比如OLAP需求一般存儲在ClickHouse或者Kylin中。查詢(xún)需求一般存儲在Elasticsearch、HBase或MongoDB中。高層匯總層的數據量一般較小。為了滿(mǎn)足高效的查詢(xún)需求,數據一般存儲在高速查詢(xún)介質(zhì)中,如MySQL、HBase等。如果數據量較小,可以將數據存儲在內存數據庫Redis中,進(jìn)一步提高查詢(xún)效率。
APP層為數據應用層,基于以下各層數據開(kāi)發(fā)各種應用,如BI、多維分析、及時(shí)查詢(xún)、數據檢索、定價(jià)、反欺詐等。
5.DIM層
DIM層的主要存儲引擎有MySQL、Redis、HBase。在數據量比較少的情況下,可以使用內存數據庫,效率更高。HBase可以有效支持Append操作,查詢(xún)結果秒級返回。對于維度可變的場(chǎng)景,可以有限的使用HBase存儲。
解決方案:我的新網(wǎng)站正式上線(xiàn)啦,提供各種采集地理數據以及可視化工具
我的網(wǎng)站BLT-LEAD已經(jīng)正式上線(xiàn),提供了包括POI數據采集、人流數據采集、數據可視化、坐標轉換、揀選等一系列地圖工具,地址:,并且很多功能正在開(kāi)發(fā)中,歡迎使用!另外,如果您需要采集人流數據、全國POI數據、共享單車(chē)等數據,以及網(wǎng)站、小程序開(kāi)發(fā),歡迎與我聯(lián)系,歡迎長(cháng)期合作!以下是部分數據采集結果圖:
查看全部
匯總:大數據實(shí)時(shí)計算流程介紹
實(shí)時(shí)計算是一種常見(jiàn)的大數據計算場(chǎng)景。業(yè)務(wù)部門(mén)需要實(shí)時(shí)反饋產(chǎn)品的點(diǎn)擊、瀏覽、采集、購買(mǎi)、評價(jià)等數據,時(shí)延要求一般在秒級甚至毫秒級。批計算引擎通常需要幾分鐘或幾小時(shí)才能返回結果,顯然不能滿(mǎn)足這種場(chǎng)景的計算需求?;趯?shí)時(shí)計算的需求,流式計算引擎應運而生。目前應用廣泛的流式計算引擎主要有Spark、Storm和Flink。
一個(gè)典型的實(shí)時(shí)計算流程如下圖所示。首先通過(guò)Flume傳遞實(shí)時(shí)采集數據,然后通過(guò)消息隊列緩存采集數據。之后使用流式計算引擎進(jìn)行計算,最后將計算結果存儲在高速查詢(xún)引擎中,以便日后高效利用數據,支持報表開(kāi)發(fā)、多維分析或數據挖掘,等等
典型的實(shí)時(shí)計算流程
1、實(shí)時(shí)計算和離線(xiàn)計算如何高效共存
一些企業(yè)迫切需要實(shí)時(shí)計算和離線(xiàn)計算并存。大部分報表和任務(wù)還是基于離線(xiàn)計算,實(shí)時(shí)性要求高的應用需要使用實(shí)時(shí)計算引擎。
最直觀(guān)的想法就是為離線(xiàn)計算和實(shí)時(shí)計算場(chǎng)景搭建計算平臺,讓兩個(gè)平臺共存。這就是通常所說(shuō)的Lambda架構的處理方式,如下圖(1)所示。

搭建離線(xiàn)計算和實(shí)時(shí)計算場(chǎng)景的計算平臺
如果企業(yè)維護兩個(gè)獨立的計算平臺,成本高,運維困難,兩個(gè)平臺的數據準確性和一致性也難以保證。如何高效解決兩個(gè)計算引擎共存的問(wèn)題
Kappa的流批一體化架構和處理方式可以有效解決兩者高效共存的問(wèn)題,其架構圖如上圖(2)所示。Kappa架構的核心組件是消息隊列、數據倉庫、流批一體化計算引擎和高效查詢(xún)引擎。目前最流行的流批一體計算引擎是Flink。
2、實(shí)時(shí)數據倉庫
實(shí)時(shí)數倉與離線(xiàn)數倉最大的區別在于,通過(guò)使用消息隊列、流批一體計算引擎、查詢(xún)引擎等工具,整個(gè)平臺的計算和查詢(xún)效率更高,可以滿(mǎn)足業(yè)務(wù)的實(shí)時(shí)需求。因此,實(shí)時(shí)數據倉庫需要更高的計算能力。如果短期內數據量突然增加,那么就要考慮實(shí)時(shí)數倉的性能和穩定性。相比之下,離線(xiàn)數倉對數據量的增加不那么敏感,性能更穩定。另外,從分層建模的角度來(lái)看,實(shí)時(shí)數倉的層次不宜過(guò)多,否則會(huì )增加響應延遲。
分層框架和技術(shù)選擇
1. ODS層
源數據從數據源中提取出來(lái),存儲在Kafka中,構成實(shí)時(shí)數倉的ODS層。

2.DWD層
通過(guò)在Kafka中實(shí)時(shí)訂閱流式業(yè)務(wù)數據,利用Flink計算引擎進(jìn)行ETL、清洗、聚合、多表關(guān)聯(lián)等操作,獲取實(shí)時(shí)明細數據并存儲在Kafka中。
3.DWS層
DWS層是通過(guò)Flink計算引擎對DWD層的詳細數據進(jìn)行聚合匯總得到的?;跇I(yè)務(wù)差異化的需要,DWS層分為輕匯總層和高匯總層。輕匯總層的主要目的是支撐APP層的應用需求。高層匯總層的主要目的是滿(mǎn)足業(yè)務(wù)對統計數據的高效查詢(xún)需求,如實(shí)時(shí)大屏、數據產(chǎn)品等。
4.APP層
基于業(yè)務(wù)的差異化需求,輕匯總層會(huì )使用不同的存儲介質(zhì)。比如OLAP需求一般存儲在ClickHouse或者Kylin中。查詢(xún)需求一般存儲在Elasticsearch、HBase或MongoDB中。高層匯總層的數據量一般較小。為了滿(mǎn)足高效的查詢(xún)需求,數據一般存儲在高速查詢(xún)介質(zhì)中,如MySQL、HBase等。如果數據量較小,可以將數據存儲在內存數據庫Redis中,進(jìn)一步提高查詢(xún)效率。
APP層為數據應用層,基于以下各層數據開(kāi)發(fā)各種應用,如BI、多維分析、及時(shí)查詢(xún)、數據檢索、定價(jià)、反欺詐等。
5.DIM層
DIM層的主要存儲引擎有MySQL、Redis、HBase。在數據量比較少的情況下,可以使用內存數據庫,效率更高。HBase可以有效支持Append操作,查詢(xún)結果秒級返回。對于維度可變的場(chǎng)景,可以有限的使用HBase存儲。
解決方案:我的新網(wǎng)站正式上線(xiàn)啦,提供各種采集地理數據以及可視化工具
我的網(wǎng)站BLT-LEAD已經(jīng)正式上線(xiàn),提供了包括POI數據采集、人流數據采集、數據可視化、坐標轉換、揀選等一系列地圖工具,地址:,并且很多功能正在開(kāi)發(fā)中,歡迎使用!另外,如果您需要采集人流數據、全國POI數據、共享單車(chē)等數據,以及網(wǎng)站、小程序開(kāi)發(fā),歡迎與我聯(lián)系,歡迎長(cháng)期合作!以下是部分數據采集結果圖:


操作方法:你會(huì )使用python爬蟲(chóng)抓取彈幕嗎?python爬蟲(chóng)如何爬取實(shí)時(shí)彈幕?
采集交流 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 158 次瀏覽 ? 2022-12-15 02:57
現在的爬蟲(chóng)可以做很多事情,比如數據采集、信息挖掘、電影評分、個(gè)人數據、實(shí)時(shí)彈幕等等,只要你熟練,你喜歡什么就爬什么,當然它必須是合法的?,F在學(xué)習爬蟲(chóng)的人越來(lái)越多。一是互聯(lián)網(wǎng)對信息和數據的需求越來(lái)越大。第二點(diǎn),python是一門(mén)簡(jiǎn)單而強大的編程語(yǔ)言,大部分爬蟲(chóng)都是從它學(xué)來(lái)的。一起來(lái)學(xué)習《能用python爬蟲(chóng)抓取彈幕嗎?python爬蟲(chóng)如何抓取實(shí)時(shí)彈幕?》。
python爬蟲(chóng)抓取彈幕的方法和步驟分為三個(gè)部分,下面通過(guò)實(shí)例給大家講解。
1.請求彈幕
在看視頻的時(shí)候,我們首先需要獲取它的url來(lái)爬取彈幕。對于網(wǎng)站來(lái)說(shuō),彈幕的位置幾乎都是固定格式的。比如一個(gè)URL中會(huì )有一個(gè)“cid”
1、首先打開(kāi)網(wǎng)站中的視頻,按F12,或者右擊,然后點(diǎn)擊“檢查”。在最右邊的操作框中,先將菜單欄切換到“網(wǎng)絡(luò )”,在搜索框中填寫(xiě)“cid”進(jìn)行搜索。
2.篩選所有信息,點(diǎn)擊“Payload”,找到我們要的“cid”
3、這樣我們就可以得到一個(gè)網(wǎng)站中的cid。
4、使用request庫向網(wǎng)站發(fā)起請求,使用urllib庫獲取網(wǎng)站的頁(yè)面。代碼示例如下:
url?=?"http://comment.bilibili.com/499893135.xml"
“499893135”就是我們剛剛獲取的cid值。
<p>
發(fā)送請求,在發(fā)送請求的時(shí)候還可以對瀏覽器進(jìn)行偽裝操作,我這里沒(méi)有使用。
req?=?requests.get(url?=?url)
獲取內容響應的內容
html_byte?=?req.content
將byte轉為str
html_str?=?str(html_byte,"utf-8")</p>
2.彈幕分析
我們得到的數據一般都是html格式的?,F在我們需要的是對這些html格式進(jìn)行處理,得到我們想要的信息。這時(shí)候,我們就需要用到一個(gè)BeautifulSoup庫。代碼如下:
soup?=?BeautifulSoup(html,'html.parser')
?results?=?soup.find_all('d')
把標簽里的文本提取出來(lái)
contents?=?[x.text?for?x?in?results]
<p>
存為字典
?dic?={"contents"?:?contents}</p>
在代碼中,我們會(huì )先對這個(gè)html進(jìn)行操作,使用soup.find_all得到一個(gè)label,然后提取label,最后以字典的形式存儲。
3.店鋪彈幕
我們可以用一個(gè)excel表來(lái)存儲從網(wǎng)站獲取的彈幕信息,這里我們需要用到兩個(gè)庫來(lái)對表進(jìn)行處理。
Xlwt 庫用于處理表格
熊貓圖書(shū)館
從我們剛剛存儲的字典中創(chuàng )建一個(gè)dataFrame,這里是使用pandas庫對表格數據進(jìn)行操作,代碼如下:
#created 一個(gè)收錄字典的電子表格
df?=?pd.DataFrame(dic)
df["contents"].to_excel('htx.xlsx')
這篇文章你會(huì )用python爬蟲(chóng)來(lái)抓彈幕嗎?python爬蟲(chóng)如何爬取實(shí)時(shí)彈幕?文章的內容就介紹到這里,希望對大家有所幫助。
事實(shí):百度蜘蛛網(wǎng)站抓取診斷失敗的原因有哪些?
對于SEO人員來(lái)說(shuō),經(jīng)常使用百度官方的工具來(lái)審核站點(diǎn),查看網(wǎng)站的各項指標是否符合預期。其中,“抓取診斷”是站長(cháng)經(jīng)常使用的工具。很多站長(cháng)表示,在使用網(wǎng)站“爬取診斷”時(shí),經(jīng)常會(huì )出現診斷失敗的提示,請問(wèn)這是什么問(wèn)題呢?
網(wǎng)站抓取診斷概述
百度爬蟲(chóng)診斷工具的功能主要是從百度蜘蛛的角度理解網(wǎng)站內容。它反饋的結果代表了蜘蛛對站點(diǎn)內容的理解。通常網(wǎng)站爬取診斷失敗,這與百度的Spider爬取有直接關(guān)系。
網(wǎng)站抓取診斷失敗的原因是什么?
1. 禁止robots.txt
如果你在robots.txt中阻止百度抓取網(wǎng)站某個(gè)目錄,當你在該目錄下生成內容時(shí),百度將很難抓取該目錄下的內容,抓取診斷也會(huì )出現Failed提示。
2. 網(wǎng)站訪(fǎng)問(wèn)速度
很多站長(cháng)說(shuō)在本地測試時(shí),我的網(wǎng)站返回HTTP狀態(tài)碼200,但是爬蟲(chóng)診斷一直顯示在爬蟲(chóng)中,沒(méi)有反饋結果。
由于服務(wù)器線(xiàn)路不同,百度蜘蛛的爬取速度可能會(huì )延遲較長(cháng)時(shí)間,從而導致明明可以訪(fǎng)問(wèn),但爬取診斷失敗的問(wèn)題。
如果遇到這個(gè)問(wèn)題,需要定期監控服務(wù)器各部分的訪(fǎng)問(wèn)速度,優(yōu)化網(wǎng)站的打開(kāi)速度。
3.CDN緩存更新
我們知道更新 CDN 緩存需要時(shí)間。雖然您在管理平臺后臺有實(shí)時(shí)在線(xiàn)更新,但由于不同服務(wù)商技術(shù)的不對稱(chēng),往往會(huì )造成一定時(shí)間的延遲。
這將不可避免地導致網(wǎng)站爬取失敗。
4.抓取診斷有跳轉
如果更新網(wǎng)站修改舊內容,使用301或302重定向,由于配置錯誤,也會(huì )出現重定向過(guò)多,同樣會(huì )導致百度抓取失敗。
5.DNS緩存
由于DNS緩存的存在,當你在本地查詢(xún)URL時(shí),是可以正常訪(fǎng)問(wèn)的,但是當你排除了上述一般問(wèn)題后,爬取診斷仍然提示失敗,這時(shí)需要更新本地DNS緩存,或者使用代理IP查看 網(wǎng)站 訪(fǎng)問(wèn)非常順暢。
網(wǎng)站 抓取診斷常見(jiàn)問(wèn)題解答:
關(guān)于百度抓取診斷工具,搜索引擎優(yōu)化顧問(wèn)問(wèn)得最多的問(wèn)題是:百度抓取診斷對收錄有幫助嗎?
從目前眾多SEO人員的反饋結果來(lái)看,沒(méi)有合理的數據支持證明爬蟲(chóng)診斷工具對百度收錄有利,但或許對百度快照更新有一定的影響。
星資源網(wǎng)總結:網(wǎng)站“搶診”失敗的原因有很多。除了參考官方的提示外,還需要一一排除。以上內容僅供參考。 查看全部
操作方法:你會(huì )使用python爬蟲(chóng)抓取彈幕嗎?python爬蟲(chóng)如何爬取實(shí)時(shí)彈幕?
現在的爬蟲(chóng)可以做很多事情,比如數據采集、信息挖掘、電影評分、個(gè)人數據、實(shí)時(shí)彈幕等等,只要你熟練,你喜歡什么就爬什么,當然它必須是合法的?,F在學(xué)習爬蟲(chóng)的人越來(lái)越多。一是互聯(lián)網(wǎng)對信息和數據的需求越來(lái)越大。第二點(diǎn),python是一門(mén)簡(jiǎn)單而強大的編程語(yǔ)言,大部分爬蟲(chóng)都是從它學(xué)來(lái)的。一起來(lái)學(xué)習《能用python爬蟲(chóng)抓取彈幕嗎?python爬蟲(chóng)如何抓取實(shí)時(shí)彈幕?》。
python爬蟲(chóng)抓取彈幕的方法和步驟分為三個(gè)部分,下面通過(guò)實(shí)例給大家講解。
1.請求彈幕
在看視頻的時(shí)候,我們首先需要獲取它的url來(lái)爬取彈幕。對于網(wǎng)站來(lái)說(shuō),彈幕的位置幾乎都是固定格式的。比如一個(gè)URL中會(huì )有一個(gè)“cid”
1、首先打開(kāi)網(wǎng)站中的視頻,按F12,或者右擊,然后點(diǎn)擊“檢查”。在最右邊的操作框中,先將菜單欄切換到“網(wǎng)絡(luò )”,在搜索框中填寫(xiě)“cid”進(jìn)行搜索。
2.篩選所有信息,點(diǎn)擊“Payload”,找到我們要的“cid”
3、這樣我們就可以得到一個(gè)網(wǎng)站中的cid。
4、使用request庫向網(wǎng)站發(fā)起請求,使用urllib庫獲取網(wǎng)站的頁(yè)面。代碼示例如下:
url?=?"http://comment.bilibili.com/499893135.xml"
“499893135”就是我們剛剛獲取的cid值。
<p>

發(fā)送請求,在發(fā)送請求的時(shí)候還可以對瀏覽器進(jìn)行偽裝操作,我這里沒(méi)有使用。
req?=?requests.get(url?=?url)
獲取內容響應的內容
html_byte?=?req.content
將byte轉為str
html_str?=?str(html_byte,"utf-8")</p>
2.彈幕分析
我們得到的數據一般都是html格式的?,F在我們需要的是對這些html格式進(jìn)行處理,得到我們想要的信息。這時(shí)候,我們就需要用到一個(gè)BeautifulSoup庫。代碼如下:
soup?=?BeautifulSoup(html,'html.parser')
?results?=?soup.find_all('d')
把標簽里的文本提取出來(lái)
contents?=?[x.text?for?x?in?results]
<p>

存為字典
?dic?={"contents"?:?contents}</p>
在代碼中,我們會(huì )先對這個(gè)html進(jìn)行操作,使用soup.find_all得到一個(gè)label,然后提取label,最后以字典的形式存儲。
3.店鋪彈幕
我們可以用一個(gè)excel表來(lái)存儲從網(wǎng)站獲取的彈幕信息,這里我們需要用到兩個(gè)庫來(lái)對表進(jìn)行處理。
Xlwt 庫用于處理表格
熊貓圖書(shū)館
從我們剛剛存儲的字典中創(chuàng )建一個(gè)dataFrame,這里是使用pandas庫對表格數據進(jìn)行操作,代碼如下:
#created 一個(gè)收錄字典的電子表格
df?=?pd.DataFrame(dic)
df["contents"].to_excel('htx.xlsx')
這篇文章你會(huì )用python爬蟲(chóng)來(lái)抓彈幕嗎?python爬蟲(chóng)如何爬取實(shí)時(shí)彈幕?文章的內容就介紹到這里,希望對大家有所幫助。
事實(shí):百度蜘蛛網(wǎng)站抓取診斷失敗的原因有哪些?
對于SEO人員來(lái)說(shuō),經(jīng)常使用百度官方的工具來(lái)審核站點(diǎn),查看網(wǎng)站的各項指標是否符合預期。其中,“抓取診斷”是站長(cháng)經(jīng)常使用的工具。很多站長(cháng)表示,在使用網(wǎng)站“爬取診斷”時(shí),經(jīng)常會(huì )出現診斷失敗的提示,請問(wèn)這是什么問(wèn)題呢?
網(wǎng)站抓取診斷概述
百度爬蟲(chóng)診斷工具的功能主要是從百度蜘蛛的角度理解網(wǎng)站內容。它反饋的結果代表了蜘蛛對站點(diǎn)內容的理解。通常網(wǎng)站爬取診斷失敗,這與百度的Spider爬取有直接關(guān)系。
網(wǎng)站抓取診斷失敗的原因是什么?
1. 禁止robots.txt
如果你在robots.txt中阻止百度抓取網(wǎng)站某個(gè)目錄,當你在該目錄下生成內容時(shí),百度將很難抓取該目錄下的內容,抓取診斷也會(huì )出現Failed提示。

2. 網(wǎng)站訪(fǎng)問(wèn)速度
很多站長(cháng)說(shuō)在本地測試時(shí),我的網(wǎng)站返回HTTP狀態(tài)碼200,但是爬蟲(chóng)診斷一直顯示在爬蟲(chóng)中,沒(méi)有反饋結果。
由于服務(wù)器線(xiàn)路不同,百度蜘蛛的爬取速度可能會(huì )延遲較長(cháng)時(shí)間,從而導致明明可以訪(fǎng)問(wèn),但爬取診斷失敗的問(wèn)題。
如果遇到這個(gè)問(wèn)題,需要定期監控服務(wù)器各部分的訪(fǎng)問(wèn)速度,優(yōu)化網(wǎng)站的打開(kāi)速度。
3.CDN緩存更新
我們知道更新 CDN 緩存需要時(shí)間。雖然您在管理平臺后臺有實(shí)時(shí)在線(xiàn)更新,但由于不同服務(wù)商技術(shù)的不對稱(chēng),往往會(huì )造成一定時(shí)間的延遲。
這將不可避免地導致網(wǎng)站爬取失敗。
4.抓取診斷有跳轉

如果更新網(wǎng)站修改舊內容,使用301或302重定向,由于配置錯誤,也會(huì )出現重定向過(guò)多,同樣會(huì )導致百度抓取失敗。
5.DNS緩存
由于DNS緩存的存在,當你在本地查詢(xún)URL時(shí),是可以正常訪(fǎng)問(wèn)的,但是當你排除了上述一般問(wèn)題后,爬取診斷仍然提示失敗,這時(shí)需要更新本地DNS緩存,或者使用代理IP查看 網(wǎng)站 訪(fǎng)問(wèn)非常順暢。
網(wǎng)站 抓取診斷常見(jiàn)問(wèn)題解答:
關(guān)于百度抓取診斷工具,搜索引擎優(yōu)化顧問(wèn)問(wèn)得最多的問(wèn)題是:百度抓取診斷對收錄有幫助嗎?
從目前眾多SEO人員的反饋結果來(lái)看,沒(méi)有合理的數據支持證明爬蟲(chóng)診斷工具對百度收錄有利,但或許對百度快照更新有一定的影響。
星資源網(wǎng)總結:網(wǎng)站“搶診”失敗的原因有很多。除了參考官方的提示外,還需要一一排除。以上內容僅供參考。
解決方案:谷歌有一個(gè)應用icrypt,免費的人物角色采集器
采集交流 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 219 次瀏覽 ? 2022-12-02 17:14
文章實(shí)時(shí)采集網(wǎng)絡(luò ),可以嘗試從事件日志獲取等應用領(lǐng)域。常見(jiàn)的msra有一款軟件能獲取各個(gè)公司的每日標注數據,包括各種行政區劃,城市,大類(lèi)。谷歌有一個(gè)應用icrypt,雖然這款應用只支持特定的手機的tangent(不知道以后會(huì )不會(huì )收費),但我覺(jué)得還不錯。
做游戲和動(dòng)畫(huà)還是推薦使用canvas
grid。各種mgui上的一個(gè)很重要的數據采集接口。
推薦看看這篇文章canvasbycollagenkeysfordatavisualizationandshaders
國內的leancloud。
二樓說(shuō)的可以,
推薦一個(gè)免費的網(wǎng)站keykit,支持各種格式的文件,而且簡(jiǎn)單易用,
免費的人物角色采集器
國內,
collagenkeys
這個(gè)真的很簡(jiǎn)單,推薦可以打開(kāi)大學(xué)計算機課件,不要打開(kāi),運行一次不行的話(huà),
推薦一個(gè)我能找到采集的工具python人物及車(chē)牌識別
推薦一個(gè)信息采集工具給大家~有需要可以購買(mǎi)試試。
全國海關(guān)公告,、web地址(以北京為例)、車(chē)牌號。不過(guò)好像沒(méi)中國移動(dòng)客戶(hù)端支持,找一個(gè)淘寶客戶(hù)端吧。
《河北鐵路通行管理局民用產(chǎn)品流通暨信息技術(shù)管理制度》 查看全部
解決方案:谷歌有一個(gè)應用icrypt,免費的人物角色采集器
文章實(shí)時(shí)采集網(wǎng)絡(luò ),可以嘗試從事件日志獲取等應用領(lǐng)域。常見(jiàn)的msra有一款軟件能獲取各個(gè)公司的每日標注數據,包括各種行政區劃,城市,大類(lèi)。谷歌有一個(gè)應用icrypt,雖然這款應用只支持特定的手機的tangent(不知道以后會(huì )不會(huì )收費),但我覺(jué)得還不錯。
做游戲和動(dòng)畫(huà)還是推薦使用canvas
grid。各種mgui上的一個(gè)很重要的數據采集接口。
推薦看看這篇文章canvasbycollagenkeysfordatavisualizationandshaders

國內的leancloud。
二樓說(shuō)的可以,
推薦一個(gè)免費的網(wǎng)站keykit,支持各種格式的文件,而且簡(jiǎn)單易用,
免費的人物角色采集器
國內,

collagenkeys
這個(gè)真的很簡(jiǎn)單,推薦可以打開(kāi)大學(xué)計算機課件,不要打開(kāi),運行一次不行的話(huà),
推薦一個(gè)我能找到采集的工具python人物及車(chē)牌識別
推薦一個(gè)信息采集工具給大家~有需要可以購買(mǎi)試試。
全國海關(guān)公告,、web地址(以北京為例)、車(chē)牌號。不過(guò)好像沒(méi)中國移動(dòng)客戶(hù)端支持,找一個(gè)淘寶客戶(hù)端吧。
《河北鐵路通行管理局民用產(chǎn)品流通暨信息技術(shù)管理制度》
官方發(fā)布:爬蟲(chóng)采集違法(6日更新/今日圖文)2022已更新
采集交流 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 139 次瀏覽 ? 2022-12-01 17:40
爬蟲(chóng)應用
但是我們的 PtCMS 采集站點(diǎn)應該盡可能對爬蟲(chóng)友好。按照SEO標準,我們需要構建一個(gè)扁平化、清晰的網(wǎng)站結構,盡量為爬蟲(chóng)構建一個(gè)良好的爬行結構。帶你搜集全資料,超詳解北京審判工程合同法男女可否共同值班~又一高清視頻正在播出,即將上線(xiàn)在線(xiàn)的。影片內容簡(jiǎn)介: 帶你搜集全程資料。
一個(gè)爬蟲(chóng)從一期版主那里采集
的 嘿嘿嘿 2020.7.30 之前一期版主的文字和圖片起名比較規律,所以采用的方法是想看這本書(shū)就用爬蟲(chóng)來(lái)采集
。該網(wǎng)站最近已更新。本文分享給大家的是使用Python制作爬蟲(chóng)采集代碼。你需要在法庭上有個(gè)家嗎?簽名方法很實(shí)用,雖然還是有點(diǎn)瑕疵,一起改吧。
框架 本文針對基于爬蟲(chóng)框架的推薦平臺的具體功能模塊,根據系統建設的實(shí)際情況,確定了最技術(shù)方案:系統結構:B/S架構;編程語(yǔ)言:Ja?;谝陨蠁?wèn)題,本推薦系統的構建主要分為三個(gè)部分:推薦網(wǎng)站前端系統、運維管理后臺系統、實(shí)時(shí)數據采集爬蟲(chóng)。
# 2.讓張某獲取html數據,慶安調用提取文章內容保存。response = requests.get(url + src, headers=headers) 得到最終的URL后,逐層進(jìn)行。本文介紹如何使用采集器的智能模式,避免在樂(lè )聞網(wǎng)采集數據。采集工具介紹: 后采集器是一款基于人工智能技術(shù)的網(wǎng)頁(yè)采集器。
使用Python實(shí)現筆趣閣爬蟲(chóng),以后再也不用擔心了。BV1r7411m7AE 未經(jīng)作者授權,禁止轉載Python爬蟲(chóng)基礎案例。整站采集你學(xué)會(huì )了嗎?
爬行違法嗎?
被告兩年前租用國外服務(wù)器,自行創(chuàng )建了釘釘網(wǎng)。2017年至2018年6月,某某未經(jīng)版權方許可的情況 上海玄聽(tīng)娛樂(lè )信息技術(shù)有限公司 本文介紹使用優(yōu)采云
采集
快樂(lè )書(shū)客的方法(取次元以大學(xué)為例)。采集
網(wǎng)站:以上只是次元學(xué)院的一個(gè)例子。
匯總:V8 中的垃圾收集(GC),圖文指南
原標題:Garbage 采集
in V8, an illustrated guide 原文鏈接:@_lrlna/garbage-采集
-in-v8-an-illustrated-guide-d24a952ee3b8
本指南與我迄今為止編寫(xiě)的其他指南的不同之處在于我添加了一些草圖。我概述了垃圾采集
(GC) 的整個(gè)概念以及它是如何在 javascript 中處理的,更準確地說(shuō)是在運行 javascript 的引擎中。順便說(shuō)一下,本指南是針對初學(xué)者的,不涵蓋 V8 內存管理和 V8 內部結構的各個(gè)方面。我添加了一些可以幫助您深入挖掘的資源。本指南重點(diǎn)關(guān)注?javascript?,對于某些語(yǔ)言,垃圾回收是完全不同的,例如C語(yǔ)言。
好的,讓我們開(kāi)始吧。
什么是 v8?
V8,是一個(gè) JavaScript 運行時(shí)引擎,不要與你最喜歡的番茄汁混淆,它編譯并執行你喜歡的 javascript。V8 有一個(gè)分代垃圾采集
器,我會(huì )在后面解釋。它與 Chrome 一起使用,而 SpiderMonkey 是 Mozilla 的引擎,而 Chakra 是微軟的?;旧袭斶\行 javascript 時(shí),你需要一個(gè)引擎來(lái)處理它,而 V8 是你的選擇之一,無(wú)論是在瀏覽器中還是在 node.js 環(huán)境中。(PS V8 是 ?開(kāi)源 ?。)
什么是垃圾采集
?
垃圾采集
的要點(diǎn)是通過(guò)使用特定的程序來(lái)管理內存使用。C 等語(yǔ)言通??梢栽诔绦騼戎苯硬僮鲀却?,并在程序的上下文中分配和釋放對象。另一方面,ECMAScript 缺少訪(fǎng)問(wèn)內存管理的特定接口(是的,這意味著(zhù)沒(méi)有 API)。這基本上意味著(zhù)程序中的所有內存管理權限都轉移給了V8。
由于我們無(wú)法訪(fǎng)問(wèn)無(wú)限量的內存,因此垃圾采集
器的工作是遍歷內存中分配的對象以確定它們是死的還是活的。存活的對象留在內存中,死亡的對象被刪除,內存分配回堆。
什么是堆?堆是一個(gè)非結構化區域,堆中的對象占用分配的內存。這種分配是動(dòng)態(tài)的,因為對象的大小/生命周期/數量是未知的,所以它需要在運行時(shí)分配和釋放。
如果我們看一下并發(fā)模型,堆直接與調用堆棧一起工作,因為堆棧中的對象需要分配內存。它看起來(lái)像這樣:
死或生?
如何檢查對象的生死是通過(guò)客戶(hù)端計算機或程序代碼是否可以到達對象。您能想到的最容易訪(fǎng)問(wèn)的對象可能是那些定義在根范圍內的對象。
一些 C++ 綁定(或客戶(hù)端的 Web API)也是根的一部分,因此您可以通過(guò) setInterval 等直接訪(fǎng)問(wèn)它們。
Reachability也可以這樣理解:另一個(gè)對象或者root是否可以獲取,如果可以,則保留該對象所需的內存。
那么如何實(shí)現垃圾回收呢?(告訴我告訴我?。?br /> 當創(chuàng )建一個(gè)新對象或一個(gè)新的“指針”時(shí),V8 在堆上分配內存。(javascript 并沒(méi)有真正的指針,所以“指針”在技術(shù)上只是復制對原創(chuàng )
對象的引用)。堆中不同類(lèi)型的對象占用不同的空間,其組織方式如下:
出于垃圾回收的目的,V8 將堆分為兩部分:年輕區和老區。當你執行需要 V8 分配內存的操作時(shí),V8 會(huì )在新生區域分配空間。當您不斷向堆中添加內容時(shí),您最終會(huì )耗盡內存,因此 V8 將不得不運行 GC 來(lái)清理它。新創(chuàng )建的對象被快速分配并在對象死亡時(shí)被清理(更短和更快的采集
)。一旦對象“幸存”了一些(確切地說(shuō)是 2 個(gè)周期)采集
掃描周期,它們就會(huì )被提升到陳舊空間,在那里它們在一個(gè)單獨的周期中被垃圾采集
。
較舊的對象是那些在多次垃圾采集
掃描中幸存下來(lái)的對象,這意味著(zhù)它們仍被其他對象引用并且仍然需要占用該內存。他們通常不指代較新的對象,而是指較舊的對象。大循環(huán)很少發(fā)生。一個(gè)大循環(huán)通常發(fā)生在足夠多的對象被移動(dòng)到陳舊區域之后。
來(lái)源.js
本指南交叉發(fā)布自 lrlna 在 github 上的 sketkin 指南 ?。 查看全部
官方發(fā)布:爬蟲(chóng)采集違法(6日更新/今日圖文)2022已更新
爬蟲(chóng)應用
但是我們的 PtCMS 采集站點(diǎn)應該盡可能對爬蟲(chóng)友好。按照SEO標準,我們需要構建一個(gè)扁平化、清晰的網(wǎng)站結構,盡量為爬蟲(chóng)構建一個(gè)良好的爬行結構。帶你搜集全資料,超詳解北京審判工程合同法男女可否共同值班~又一高清視頻正在播出,即將上線(xiàn)在線(xiàn)的。影片內容簡(jiǎn)介: 帶你搜集全程資料。

一個(gè)爬蟲(chóng)從一期版主那里采集
的 嘿嘿嘿 2020.7.30 之前一期版主的文字和圖片起名比較規律,所以采用的方法是想看這本書(shū)就用爬蟲(chóng)來(lái)采集
。該網(wǎng)站最近已更新。本文分享給大家的是使用Python制作爬蟲(chóng)采集代碼。你需要在法庭上有個(gè)家嗎?簽名方法很實(shí)用,雖然還是有點(diǎn)瑕疵,一起改吧。
框架 本文針對基于爬蟲(chóng)框架的推薦平臺的具體功能模塊,根據系統建設的實(shí)際情況,確定了最技術(shù)方案:系統結構:B/S架構;編程語(yǔ)言:Ja?;谝陨蠁?wèn)題,本推薦系統的構建主要分為三個(gè)部分:推薦網(wǎng)站前端系統、運維管理后臺系統、實(shí)時(shí)數據采集爬蟲(chóng)。
# 2.讓張某獲取html數據,慶安調用提取文章內容保存。response = requests.get(url + src, headers=headers) 得到最終的URL后,逐層進(jìn)行。本文介紹如何使用采集器的智能模式,避免在樂(lè )聞網(wǎng)采集數據。采集工具介紹: 后采集器是一款基于人工智能技術(shù)的網(wǎng)頁(yè)采集器。

使用Python實(shí)現筆趣閣爬蟲(chóng),以后再也不用擔心了。BV1r7411m7AE 未經(jīng)作者授權,禁止轉載Python爬蟲(chóng)基礎案例。整站采集你學(xué)會(huì )了嗎?
爬行違法嗎?
被告兩年前租用國外服務(wù)器,自行創(chuàng )建了釘釘網(wǎng)。2017年至2018年6月,某某未經(jīng)版權方許可的情況 上海玄聽(tīng)娛樂(lè )信息技術(shù)有限公司 本文介紹使用優(yōu)采云
采集
快樂(lè )書(shū)客的方法(取次元以大學(xué)為例)。采集
網(wǎng)站:以上只是次元學(xué)院的一個(gè)例子。
匯總:V8 中的垃圾收集(GC),圖文指南
原標題:Garbage 采集
in V8, an illustrated guide 原文鏈接:@_lrlna/garbage-采集
-in-v8-an-illustrated-guide-d24a952ee3b8
本指南與我迄今為止編寫(xiě)的其他指南的不同之處在于我添加了一些草圖。我概述了垃圾采集
(GC) 的整個(gè)概念以及它是如何在 javascript 中處理的,更準確地說(shuō)是在運行 javascript 的引擎中。順便說(shuō)一下,本指南是針對初學(xué)者的,不涵蓋 V8 內存管理和 V8 內部結構的各個(gè)方面。我添加了一些可以幫助您深入挖掘的資源。本指南重點(diǎn)關(guān)注?javascript?,對于某些語(yǔ)言,垃圾回收是完全不同的,例如C語(yǔ)言。
好的,讓我們開(kāi)始吧。
什么是 v8?
V8,是一個(gè) JavaScript 運行時(shí)引擎,不要與你最喜歡的番茄汁混淆,它編譯并執行你喜歡的 javascript。V8 有一個(gè)分代垃圾采集
器,我會(huì )在后面解釋。它與 Chrome 一起使用,而 SpiderMonkey 是 Mozilla 的引擎,而 Chakra 是微軟的?;旧袭斶\行 javascript 時(shí),你需要一個(gè)引擎來(lái)處理它,而 V8 是你的選擇之一,無(wú)論是在瀏覽器中還是在 node.js 環(huán)境中。(PS V8 是 ?開(kāi)源 ?。)
什么是垃圾采集
?
垃圾采集
的要點(diǎn)是通過(guò)使用特定的程序來(lái)管理內存使用。C 等語(yǔ)言通??梢栽诔绦騼戎苯硬僮鲀却?,并在程序的上下文中分配和釋放對象。另一方面,ECMAScript 缺少訪(fǎng)問(wèn)內存管理的特定接口(是的,這意味著(zhù)沒(méi)有 API)。這基本上意味著(zhù)程序中的所有內存管理權限都轉移給了V8。

由于我們無(wú)法訪(fǎng)問(wèn)無(wú)限量的內存,因此垃圾采集
器的工作是遍歷內存中分配的對象以確定它們是死的還是活的。存活的對象留在內存中,死亡的對象被刪除,內存分配回堆。
什么是堆?堆是一個(gè)非結構化區域,堆中的對象占用分配的內存。這種分配是動(dòng)態(tài)的,因為對象的大小/生命周期/數量是未知的,所以它需要在運行時(shí)分配和釋放。
如果我們看一下并發(fā)模型,堆直接與調用堆棧一起工作,因為堆棧中的對象需要分配內存。它看起來(lái)像這樣:
死或生?
如何檢查對象的生死是通過(guò)客戶(hù)端計算機或程序代碼是否可以到達對象。您能想到的最容易訪(fǎng)問(wèn)的對象可能是那些定義在根范圍內的對象。
一些 C++ 綁定(或客戶(hù)端的 Web API)也是根的一部分,因此您可以通過(guò) setInterval 等直接訪(fǎng)問(wèn)它們。
Reachability也可以這樣理解:另一個(gè)對象或者root是否可以獲取,如果可以,則保留該對象所需的內存。

那么如何實(shí)現垃圾回收呢?(告訴我告訴我?。?br /> 當創(chuàng )建一個(gè)新對象或一個(gè)新的“指針”時(shí),V8 在堆上分配內存。(javascript 并沒(méi)有真正的指針,所以“指針”在技術(shù)上只是復制對原創(chuàng )
對象的引用)。堆中不同類(lèi)型的對象占用不同的空間,其組織方式如下:
出于垃圾回收的目的,V8 將堆分為兩部分:年輕區和老區。當你執行需要 V8 分配內存的操作時(shí),V8 會(huì )在新生區域分配空間。當您不斷向堆中添加內容時(shí),您最終會(huì )耗盡內存,因此 V8 將不得不運行 GC 來(lái)清理它。新創(chuàng )建的對象被快速分配并在對象死亡時(shí)被清理(更短和更快的采集
)。一旦對象“幸存”了一些(確切地說(shuō)是 2 個(gè)周期)采集
掃描周期,它們就會(huì )被提升到陳舊空間,在那里它們在一個(gè)單獨的周期中被垃圾采集
。
較舊的對象是那些在多次垃圾采集
掃描中幸存下來(lái)的對象,這意味著(zhù)它們仍被其他對象引用并且仍然需要占用該內存。他們通常不指代較新的對象,而是指較舊的對象。大循環(huán)很少發(fā)生。一個(gè)大循環(huán)通常發(fā)生在足夠多的對象被移動(dòng)到陳舊區域之后。
來(lái)源.js
本指南交叉發(fā)布自 lrlna 在 github 上的 sketkin 指南 ?。