前端小記4——高性能mobile web開發

来源:https://www.cnblogs.com/bookchilds/archive/2018/07/19/9336815.html
-Advertisement-
Play Games

1.高性能CSS3動畫 與PC端場景需要相比,移動web端需要考慮的因素也相對複雜,重點考慮:流量、功耗與流暢度。在pc端上考慮更多的是流暢度,而mobile web中需要考慮網路流量的使用和耗電情況。 關於流暢度,在前端動畫中主要有兩種:JS動畫與CSS3動畫。 JS動畫是通過JS動態改寫樣式實現 ...


1.高性能CSS3動畫

與PC端場景需要相比,移動web端需要考慮的因素也相對複雜,重點考慮:流量、功耗與流暢度。在pc端上考慮更多的是流暢度,而mobile web中需要考慮網路流量的使用和耗電情況。

關於流暢度,在前端動畫中主要有兩種:JS動畫與CSS3動畫。

 JS動畫是通過JS動態改寫樣式實現動畫能力的一種方案,在PC端相容低端瀏覽器中不失為一種推薦方案。 而在移動端,我們選擇性能更優瀏覽器原生實現方案:CSS3動畫。然而,CSS3動畫在移動多終端設備場景下,相比PC會面對更多的性能問題,主要體現在動畫的卡頓與閃爍。

提升CSS3動畫:

(1)儘量利用硬體能力,如使用3D變形來開啟GPU加速

-webkit-transform: translate3d(0,0,0);

-moz-transform: translate3d(0,0,0);

-ms-transform: translate3d(0,0,0);

transform: translate3d(0,0,0);

(2)動畫過程閃爍

通常發生在動畫開始,嘗試使用hack

-webkit-backface-visibility: hidden;

-moz-backface-visibility:hidden;

-ms-backface-visibility:hidden;

backface-visibility:hidden;

 

-webkit-perspective: 1000;

-moz-perspective: 1000;

-ms-perspective: 1000;

perspective: 1000;

 

(3)translate3d

一個元素通過translate3d右移500px的動畫流暢度高於使用left

#ball-2 {
  transition: left .5s ease;
  left: 0;
}
#ball-2.slidein {
  left: 500px;
}

#ball-1 {
  transition: -webkit-transform .5s ease;
  -webkit-transform: translate3d(0, 0, 0);
}
#ball-1.slidein {
  -webkit-transform: translate3d(500px, 0, 0);
}

註:3D變形會消耗更多的記憶體與功耗,應確實有性能問題時才去使用它,兼在權衡。

(4)儘量少用box-shadows與gradients

box-shadowsgradients往往都是頁面的性能殺手,尤其是在一個元素同時都使用了它們,所以擁抱扁平化設計吧。

(5)儘量讓動畫不在文檔流中,以減少重排

position: fixed;

position:absolute;

(6)優化DOM layout性能

實例代碼:

// 觸發兩次 layout
var newWidth = aDiv.offsetWidth + 10;   // Read
aDiv.style.width = newWidth + 'px';     // Write
var newHeight = aDiv.offsetHeight + 10; // Read
aDiv.style.height = newHeight + 'px';   // Write

// 只觸發一次 layout
var newWidth = aDiv.offsetWidth + 10;   // Read
var newHeight = aDiv.offsetHeight + 10; // Read
aDiv.style.width = newWidth + 'px';     // Write
aDiv.style.height = newHeight + 'px';   // Write

從結果分析應與執行隊列有關,這是瀏覽器的優化策略。所有可觸發layout的操作都會被暫時放入 layout-queue 中,等到必須更新的時候,再計算整個隊列中所有操作影響的結果,如此就可只進行一次的layout,從而提升性能。

 

2.CSS動畫屬性性能

CSS動畫屬性會觸發整個頁面的重排relayout、重繪repaint、重組recomposite

Paint通常是其中最花費性能的,儘可能避免使用觸發paint的CSS動畫屬性,這也是為什麼我們推薦在CSS動畫中使用webkit-transform: translateX(3em)的方案代替使用left: 3em,因為left會額外觸發layout與paint,而webkit-transform只觸發整個頁面composite

 

推薦一個超小手勢庫AlloyFinger原理:https://github.com/AlloyTeam/AlloyCrop/blob/master/asset/alloyfinger.md

裁剪解決方案:https://github.com/AlloyTeam/AlloyCrop

 

小程式、小游戲以及web通用canvas渲染引擎:https://github.com/dntzhang/cax

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 標簽: JavaScript JavaScript有六種數據類型,分別為undefined、null、number、string、Boolean、object,前面的五種是基礎數據類型,也稱之為原始類型,也就是無法再細分的基本類型,object則是複雜數據類型,其中通常是不止一種數據類型,除此之外在 ...
  • 本文主要分享JS中數組的方法封裝,基於原生JS封裝數組slice方法 ...
  • 現在微信已經成為了一個比較好的聊天工具,人們會使用這個工具與周圍的親朋好友進行聯繫,當然也可以和許多的人去進行交流,它的出現已經改變了人們的生活。平時看到比較多的就是很多的朋友拿著微信和他人聊天。但是在使用微信的同時,人們比較擔心的便是自己的微信密碼被破譯掉。生活中很多人想要查看他人的微信聊天記錄, ...
  • 在我們的周邊微信密碼被破譯的情況經常會出現。近日,在網上便有一種關於亂加微信密碼會被破譯的話語存在。事實上,許多人表示自己在加了一些不認識的人的微信之後,人家便可以通過自己的軟體里的自動碰號,然後將微信綁定的銀行卡的密碼給破譯掉,這主要是由於自己設置的微信密碼過於簡單所致。 事實上,近日在網上有很多 ...
  • 這裡主要總結記錄下表格的一些屬性和簡單的樣式,方便以後不時之需。 1、<table> 用來定義HTML的表格,具有本地屬性 border 表示邊框,border屬性的值必須為1或空字元串("")。該屬性不會控制邊框的樣式,而是由CSS來控制 table元素可以有tr,th,td,thead,tbod ...
  • angularJs模板緩存的清除,包括傳統的 HTML標簽設置清除緩存,以及angularJs的一些配置清除,和angularJs的路由切換操作清除 ...
  • 當今大多數的團隊都實現了前、後端分支。前端與後端的溝通都是通過介面來實現的(一般情況下都是webapi介面)。這種情況你肯定需要一個介面查詢的幫助文檔,這個當然用swagger都可以實現。但做為前端開發的我們是否也應該考慮把自己寫的組件以幫助文檔的方式公開都團隊其他人員使用。就像iview,easy ...
  • cordova-plugin-themeablebrowser 0.2.17 "ThemeableBrowser"ionic跳轉外鏈插件在ios中heardBar會遮住內容的bug ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...