日韩成人免费在线_国产成人一二_精品国产免费人成电影在线观..._日本一区二区三区久久久久久久久不

當前位置:首頁 > 科技  > 軟件

云音樂2023年報前端大揭秘

來源: 責編: 時間:2024-07-09 07:02:58 885觀看
導讀前言每年的云音樂年度聽歌報告,就像一個靠譜的老朋友,總會在忙碌一年的時光盡頭里叩響記憶的大門。如果你曾錯過了彼時的年報,不妨現在就拿起手機掃描上圖的二維碼,與往期的精彩視聽來一場不期而遇的邂逅;如果你為年報中精

前言

每年的云音樂年度聽歌報告,就像一個靠譜的老朋友,總會在忙碌一年的時光盡頭里叩響記憶的大門。WML28資訊網——每日最新資訊28at.com

  • 如果你曾錯過了彼時的年報,不妨現在就拿起手機掃描上圖的二維碼,與往期的精彩視聽來一場不期而遇的邂逅;
  • 如果你為年報中精巧而溫馨的動畫而深深著迷,請直接移步至本文的姊妹篇:「云音樂2023年報動效大揭秘」一探究竟;
  • 如果你恰好想了解年報中前端開發承擔了什么樣的角色、積累了哪些最佳實踐 ——那么巧了,本文將從性能體驗、質量管理、工程效率和一些筆者底層思考,幫助你逐步揭開年報的神秘面紗

性能體驗

首次訪問年報活動為例,好的用戶體驗主要包括以下幾個方面:WML28資訊網——每日最新資訊28at.com

  • 頁面能秒級打開,頁面到達率高、流失少;
  • 頁面間轉場展示流暢,不會出現卡頓;
  • 文本和圖片內容在任何設備上都能完整展示,不出現缺失或者加載閃爍情況;
  • 音頻或視頻啟播速度快,播放過程中不發生錯亂或者卡頓情況;
  • 頁面內的動效展示流暢,不會出現卡頓;

圖片圖片WML28資訊網——每日最新資訊28at.com

簡而言之,體驗優涉及以下幾個方面:WML28資訊網——每日最新資訊28at.com

1、頁面導航:包括首屏秒開,頁面轉場等WML28資訊網——每日最新資訊28at.com

2、資源管理:包括圖片、視頻、音頻和字體包等WML28資訊網——每日最新資訊28at.com

3、頁面適配:包括文本適配、動效適配和機型適配等WML28資訊網——每日最新資訊28at.com

首屏秒開

首屏秒開是指用戶從點擊鏈接開始到展示頁面內容大約在1s左右完成。整個過程經歷如圖所示:WML28資訊網——每日最新資訊28at.com

容器初始化 -> CDN -> TCP 建連 -> html/js/css 加載解析 -> DOM / CSSOM 解析 -> 渲染布局 -> 繪制WML28資訊網——每日最新資訊28at.com

圖片圖片WML28資訊網——每日最新資訊28at.com

對于前端開發來說,優化難度是從右到左,越到左邊就越需要跨團隊合作來完成。可以簡單的分析總結:WML28資訊網——每日最新資訊28at.com

  • 在渲染/繪制階段,可以隔離狀態變化頻繁的組件,減少無效狀態引起的繪制。盡量選擇由 GPU 渲染的 CSS3 來實現動效。邏輯實現的動效建議使用GSAP。
  • 在 DOM / CSSDOM 解析階段,可以減少 DOM 的嵌套深度,減少使用 JavaScript 直接修改元素樣式,減少不必要的 CSS,減少使用 CSS 選擇器等。
  • 在 HTML / JS / CSS 加載解析階段,可以通過構件工具對文件進行壓縮。利用離線包能力,將這些資源提前下載到本地。
  • 在 CDN、TCP 建連階段,更多依賴 App 網絡庫底層的優化,如使用 HTPP/2 減少 TCP 連接數。
  • 在容器初始化階段,為了達到極致的打開速度,可以將 H5 容器進行預初始化。也可以建立容器復用池,減少容器創建的耗時。

頁面管理

頁面路由

為了有效管控年報中多個視圖的高效展示和切換,采用了 SPA[1] 的形式對H5進行組織,同時為頁面路由提供了路由表的配置。WML28資訊網——每日最新資訊28at.com

路由表簡單理解是各個子頁面路由對象的集合,這個集合可以是全局數組對象,本地文件,或者服務端下發的配置。集合內的順序決定了用戶看到報告頁順序。這樣也可以根據產品的述求,靈活調整集合內的順序,這樣就能動態調整頁面順序了。WML28資訊網——每日最新資訊28at.com

各個子頁面路由對象的屬性具體如下。建議不用傳統的 path,因為子頁面數量多,且名稱很難記憶,可以使用 routerIndex,這是子頁面在交互稿中的位置代號,方便開發和調試。其中 ignoreSwipe 是使用在下節手勢處理中「子容器接管父容器手勢」的場景。WML28資訊網——每日最新資訊28at.com

export interface PageProps {    model: unknown;    position?: number; // 頁面埋點使用}export interface PageRouteProps {    c: ComponentType<PageProps>;    cId: string; // 當前頁面唯一id    routerIndex: number | string; // 路由索引    ignoreSwipe?: boolean; // 是否忽略滑動,默認false}

手勢處理

年報項目中用戶可以通過點擊、左右滑動、上下滑動來切換頁面。為了防止手勢沖突,全局只有一個父容器,各個報告頁面是子容器;一些手勢頻控、頁面狀態變化等通用邏輯統一在父容器中實現。只在父容器中使用 hammerjs 做手勢監聽,子容器不再負責頁面切換的手勢監聽,關鍵代碼如下。WML28資訊網——每日最新資訊28at.com

hammer = new Hammer(reportRef.current); hammer.get('swipe').set({ direction: Hammer.DIRECTION_ALL }); hammer.on('swipeleft', onNextPageWrap); hammer.on('swiperight', onPrePageWrap); hammer.on('swipeup', onNextPage); hammer.on('swipedown', onPrePage);

對于子容器,可能會有以下幾種特殊情況:WML28資訊網——每日最新資訊28at.com

情況一:如果子容器需要感知用戶手勢事件,可以監聽父容器發出的自定義事件。WML28資訊網——每日最新資訊28at.com

// 【翻頁】動效:下一頁export const ON_PAGE_NEXT = 'ON_PAGE_NEXT';// 【翻頁】動效:上一頁export const ON_PAGE_PREV = 'ON_PAGE_PREV';

情況二:如果子容器需要完全接管父容器的手勢監聽事件,例如年度歌手相關的所有頁面。首先需要在路由表中將 ignoreSwipe=ture 設置忽略手勢,然后在監聽父容器發出的通知,進行自定義的事件處理。最后當子容器接管結束后,需要根據需要再次觸發父容器的切換事件。關鍵代碼如下:WML28資訊網——每日最新資訊28at.com

const onNextPage = useCallback(    (nextAction) => {        if (currentPage >= len - 1) {            nextAction(); // 結束接管,再次觸發父容器的切換事件            return;        }                setCurrentPage(currentPage + 1);    },    [currentPage, len]);useEffect(() => {        bus.on(ON_PAGE_NEXT, onNextPage);        return () => {            bus.off(ON_PAGE_NEXT, onNextPage);        };    }, [onNextPage, onPrePage]);

情況三:如果子容器存在特定區域需要響應特點手勢,例如歌手來信頁面左右切換是查看歌手來信。這時候需要子容器調用stopPropagation主動阻止手勢向父容器傳遞。WML28資訊網——每日最新資訊28at.com

轉場實現

在路由表和手勢處理準備就緒后,最后來看看頁面之間轉場的實現。年報頁面的轉場效果使用React官方實現的 react-transition-group 組件。由于篇幅限制,這里不詳細介紹react-transition-group 組件的底層原理。結合路由表順序和當前頁面位置,通過 z-index 和 match 來控制子頁面的層級和顯示隱藏。使用 CSSTransition 實現頁面間的進場和退場CSS動畫。關鍵代碼如下:WML28資訊網——每日最新資訊28at.com

(pages || []).map((item, index) => {    // zIndex 和 match是關鍵代碼    const zIndex = (pages.length - index) * 100;    const match = index === currentIdx;    return (        <div            key={item.cId}            style={{                zIndex,                pointerEvents: match ? 'auto' : 'none',                overflow: 'hidden',            }}>                <CSSTransition                    in={match}                    timeout={100}                    ...                    appear                    unmountOnExit>                    <item.c                        model={item.model}                        positinotallow={index} />                </CSSTransition>          </div>            );})

但是以上的頁面轉場存在一個問題,即頁面之間只能存在一種轉場方式。如何自定義頁面之間的轉場效果?基本思路是各自頁面維護自己的轉場效果;大部分頁面只需將轉場信息配置到路由表中;小部分頁面可以通過頁面上下文獲得上一個或者下一個頁面的信息,動態決定如何進場或者退場。基于該思路,改造路由表對象,新增一個 TransitionParams 協議,并且提供漸隱漸顯的默認轉場實現。關鍵代碼如下:WML28資訊網——每日最新資訊28at.com

export type TransitionParams = {    timeout: number | { appear?: number | undefined; enter?: number | undefined; exit?: number | undefined };    classNames: CSSTransitionClassNames;};export interface PageRouteProps {    c: ComponentType<PageProps>;    cId: string; // 當前頁面唯一id    routerIndex: number; // 路由索引    transition: TransitionParams; //默認是漸隱漸顯的轉場效果    ignoreSwipe?: boolean; // 是否忽略滑動,默認false}

CSSTransition 配合改造后的關鍵代碼如下:WML28資訊網——每日最新資訊28at.com

<CSSTransition    in={match}    timeout={item.transition.timeout}    // 關鍵代碼    classNames={item.transition.classNames}    appear    unmountOnExit>        <item.c model={item.model} positinotallow={index} /></CSSTransition>

資源管理

資源管理主要任務是將網絡資源下載到本地,最終將本地資源加載到內存,以便程序可以使用這些資源。優化資源管理可以有效提高年報用戶體驗。通常開發者會通過壓縮資源的大小,并通過內容分發網絡(CDN)加快資源的下載速度。但是除了這些還有其他通用的方法呢?WML28資訊網——每日最新資訊28at.com

在介紹具體優化手段前,先來看以下關鍵字,這些是性能優化的通用方法。WML28資訊網——每日最新資訊28at.com

  • 提前 preload:提前準備必要的資源,提升加載速度
  • 同步 sync:串行執行當前任務,確保執行任務的優先級
  • 異步 async:工作線程異步執行,處理比較耗時的操作,不阻塞主線程
  • 懶加載 lazy:又稱按需加載,不浪費請求
  • 緩存 cache:將資源緩存到內存或者磁盤本地,減少不必要的網絡請求
  • 延遲 defer:不立即執行任務,延遲執行

總結如下圖:WML28資訊網——每日最新資訊28at.com

圖片圖片WML28資訊網——每日最新資訊28at.com

接下來,將從圖片、視頻、字體包等各個資源,進一步解析如何結合上述關鍵詞進行優化。WML28資訊網——每日最新資訊28at.com

圖片

關鍵字:提前 preload、懶加載 lazy、緩存 cache

圖片資源占整個年報項目資源中的比例是最高的,大概 70% 左右。所以圖片展示速度是否足夠快和內容是否完整都會直接影響用戶體驗。WML28資訊網——每日最新資訊28at.com

優先將圖片資源使用 tinypng 進行手動壓縮,在不失真的情況下,保證圖片大小足夠小。其次正確選擇圖片格式能有效減少圖片大小。其中圖片格式很多,主流的有:WML28資訊網——每日最新資訊28at.com

  • SVG 是基于XML的矢量圖片格式,不失真無限放大。支持動畫。
  • JPEG 是有損壓縮,不支持透明度或者動畫。
  • PNG 是無損壓縮,支持透明度。APNG 是 PNG 的擴展,支持動胡奧。
  • WebP 是無損和有損壓縮,支持動畫或者透明度。
  • GIF 是位圖圖片格式,支持動畫。

不同圖片格式在不同場景上使用。格式沒選準確,會導致資源浪的費。如在「年度總覽」一頁中,海浪

本文鏈接:http://m.www897cc.com/showinfo-26-99645-0.html云音樂2023年報前端大揭秘

聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。郵件:2376512515@qq.com

上一篇: 我們聊聊如何分析Rust進程使用了多少內存?

下一篇: 我讓代碼,學會了自動評審!提高80%的交付質量!

標簽:
  • 熱門焦點
Top 日韩成人免费在线_国产成人一二_精品国产免费人成电影在线观..._日本一区二区三区久久久久久久久不
国产精品高清在线观看| 久久久99免费视频| 一区二区三区久久| 亚洲欧美国产日韩天堂区| 久久成人精品无人区| 麻豆av一区二区三区久久| 欧美日韩福利| 国产精品一区在线观看| 伊甸园精品99久久久久久| 亚洲国产精品一区二区www在线| 亚洲国产毛片完整版| 亚洲特级片在线| 久久久av水蜜桃| 欧美精品v日韩精品v韩国精品v| 国产精品女人久久久久久| 在线观看成人网| 亚洲视频一区二区免费在线观看| 久久精品一区中文字幕| 欧美剧在线免费观看网站| 国产精品三级久久久久久电影| 1000精品久久久久久久久| 亚洲特级毛片| 男女精品视频| 国产日韩精品电影| 99riav国产精品| 久久久久国产一区二区| 欧美午夜电影在线观看| 亚洲第一视频网站| 国产精品99久久久久久久久| 亚洲高清不卡在线| 久久色在线观看| 欧美日韩三区四区| 欧美视频在线一区| 黄色工厂这里只有精品| 在线视频你懂得一区 | 国产精品三上| 亚洲欧美日韩国产一区二区| 国产一区自拍视频| 欧美在线亚洲| 亚洲乱码精品一二三四区日韩在线| 久久亚洲综合色| 欧美日韩国产成人在线免费| 亚洲高清激情| 欧美高清在线视频观看不卡| 尤物在线精品| 欧美视频一区二| 亚洲级视频在线观看免费1级| 免费成人av资源网| 在线观看久久av| 毛片av中文字幕一区二区| 亚洲精品少妇| 麻豆成人91精品二区三区| 亚洲少妇最新在线视频| 一区二区三区四区国产| 欧美小视频在线| 久久久久久久国产| 亚洲欧美不卡| 日韩一级精品| 欧美日韩国产探花| 红桃视频欧美| 国产精品视频免费观看| 亚洲国产一区二区精品专区| 久久超碰97人人做人人爱| 国产精品成人一区二区| 99re热这里只有精品视频| 一色屋精品视频在线观看网站| 国产日韩欧美高清| 欧美日韩一本到| 久久九九99视频| 久久久久久免费| 欧美 日韩 国产一区二区在线视频| 免费国产一区二区| 欧美日韩国产一区二区三区地区| 日韩小视频在线观看专区| 久久国产加勒比精品无码| 国产精品久久久久久福利一牛影视| 亚洲精选视频免费看| 欧美www视频| 亚洲黄色精品| 欧美激情二区三区| 亚洲精品乱码| 欧美片在线观看| 99精品免费| 欧美午夜视频一区二区| 亚洲一区二区网站| 国产精品日韩精品欧美在线| 午夜影院日韩| 国产日韩高清一区二区三区在线| 午夜国产欧美理论在线播放| 国产欧美一二三区| 久久av老司机精品网站导航| 国产综合视频| 麻豆成人综合网| 亚洲精品日韩在线观看| 欧美日韩精品综合在线| 亚洲新中文字幕| 国产日本欧美一区二区| 久久久久久亚洲综合影院红桃| 一区二区在线看| 欧美激情1区| 亚洲视频二区| 国产日韩欧美在线观看| 久久理论片午夜琪琪电影网| 亚洲国产一区二区三区高清| 欧美日韩mv| 亚洲欧美在线网| 狠狠综合久久av一区二区小说| 美女91精品| 一区二区激情| 国产人妖伪娘一区91| 久久婷婷国产综合国色天香| 亚洲精品乱码久久久久久蜜桃麻豆| 欧美日韩蜜桃| 午夜亚洲性色视频| 亚洲国产成人久久综合一区| 欧美精品免费在线| 午夜精品999| 揄拍成人国产精品视频| 欧美激情一区二区三区不卡| 亚洲永久网站| 久久久久看片| 亚洲国产精品综合| 欧美香蕉视频| 久久久一区二区三区| 日韩一二三在线视频播| 国产精品午夜视频| 久热精品在线视频| 亚洲一区二区精品| 尤物精品在线| 国产精品国产三级国产aⅴ入口| 久久精品国产99国产精品澳门| 亚洲片区在线| 国产精品视频第一区| 美女精品国产| 亚洲综合日韩| 亚洲国产欧美久久| 国产精品一二三四| 女同性一区二区三区人了人一| 亚洲一区二区三区四区在线观看 | 国产一区二区精品久久99| 免费观看日韩av| 亚洲欧美精品suv| 亚洲国产另类久久精品| 国产精品嫩草久久久久| 免费成人黄色片| 亚洲欧美日韩视频一区| 91久久久精品| 国产一区二区中文字幕免费看| 欧美日韩激情网| 久久夜色精品国产亚洲aⅴ| 亚洲色诱最新| 亚洲黄色天堂| 国产一区自拍视频| 欧美性猛交xxxx乱大交蜜桃| 美日韩丰满少妇在线观看| 亚洲欧美综合v| 亚洲精品一区二区在线观看| 黄色一区二区在线| 国产精品久久久久三级| 欧美激情a∨在线视频播放| 久久成人免费视频| 亚洲天堂av高清| 亚洲精品黄网在线观看| 韩日成人在线| 国产欧美一区二区三区视频| 欧美三级第一页| 欧美高清在线| 毛片一区二区三区| 久久精品国产第一区二区三区最新章节| 夜夜夜久久久| 亚洲人妖在线| 在线成人免费观看| 国产亚洲综合精品| 国产精品视频第一区| 欧美日韩在线播放一区| 欧美高清成人| 老牛嫩草一区二区三区日本| 欧美在线二区| 亚洲欧美中日韩| 亚洲无人区一区| 一卡二卡3卡四卡高清精品视频| 亚洲国产精品福利| 极品日韩久久| 含羞草久久爱69一区| 国产情侣一区| 国产欧美一区二区三区在线老狼| 国产精品高潮呻吟久久av黑人 | 亚洲国产日韩综合一区| 国产在线欧美| 狠狠色综合一区二区| 国产一区二区三区日韩| 国产女人aaa级久久久级| 国产精品美女黄网| 欧美新色视频| 欧美性大战久久久久| 欧美日韩精品不卡| 欧美日韩另类综合| 欧美三级日本三级少妇99| 欧美日韩视频免费播放| 欧美日韩免费高清一区色橹橹| 欧美日韩国产美女| 欧美日韩在线观看一区二区三区| 欧美日韩日本视频| 国产精品www.|