日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術文章
文章詳情頁

HTML-Canvas的優越性能以及實際應用

瀏覽:360日期:2022-06-03 10:54:05
目錄
  • HTML繪圖屆的前輩:SVG
  • Canvas的渲染模式
    • Dom:駐留模式
    • Canvas:快速模式
  • Canvas的應用優點
    • 總結

      HTML繪圖屆的前輩:SVG

      Canvas是HTML5時代引入的“新”標簽。與很多標簽不同,Canvas不具有自己的行為,只將一組API 展現給客戶端 JavaScript ,讓開發者使用腳本把想繪制的東西畫到一張畫布上。

      在HTML5之前,人們通常使用SVG來在頁面上繪制出圖形。SVG使用XML來定義圖形,就像使用HTML標簽和樣式定義DIV一樣,我們也可以將一個空白的DIV想象為長方形的SVG,兩者的設計思想是相通的,SVG的本質就是一個DOM元素。而Canvas則不同,Canvas提供的是 JavaScript 的繪圖 API,而不是像 SVG那樣使用XML 描述繪圖,通過JavaScript API直接完成繪制,比起修改XML來說要更簡便、更直接。

      除了定義的方式不同,Canvas和DOM(當然也包含SVG)的差異更多的體現在瀏覽器的渲染方式上。

      瀏覽器在做頁面渲染時,Dom元素是作為矢量圖進行渲染的。每一個元素的邊距都需要單獨處理,瀏覽器需要將它們全都處理成像素才能輸出到屏幕上,計算量十分龐大。當頁面上內容非常多,存在大量DOM元素的時候,這些內容的渲染速度就會變得很慢。

      (Canvas)

      而Canvas與DOM的區別則是Canvas的本質就是一張位圖,類似img標簽,或者一個div加了一張背景圖(background-image)。所以,DOM那種矢量圖在渲染中存在的問題換到Canvas身上就完全不同了。在渲染Canvas時,瀏覽器只需要在JavaScript引擎中執行繪制邏輯,在內存中構建出畫布,然后遍歷整個畫布里所有像素點的顏色,直接輸出到屏幕就可以了。不管Canvas里面的元素有多少個,瀏覽器在渲染階段也僅需要處理一張畫布。

      然而這樣更加強大的功能,不可避免的讓使用canvas渲染有很高的門檻。Google Docs在構建Canvas的過程中重新定義了往常已經被人們所熟悉的內容,例如精確定位、文本選擇、拼寫檢查、重畫調優等。為什么更多開發者還是選擇了接納Canvas這個門檻更高的技術路線呢?這就得回到Canvas的最大優勢:渲染性能。

      Canvas的渲染模式

      這里的渲染是指瀏覽器將頁面的代碼呈現為屏幕上內容的過程。Canvas和Dom的渲染模式完全不同,搞清楚這個差異對理解Canvas的性能優勢至關重要。

      Dom:駐留模式

      駐留模式(Retained Mode)是Dom在瀏覽器中的渲染模式。下圖粗略展示了這一過程的工作流程。

      (駐留模式)

      DOM的核心是標簽,一種文本標記型語言,多樣性很強且多個標簽之間存在各種關聯(如在同一個DIV下設置為float的子DIV)。瀏覽器為了更好的處理這些DOM元素,減少對繪制API的調用,就設計了一套將中間結果存放于內存的“駐留模式”。首先,瀏覽器會將解析DOM相關的全部內容(包含HTML標簽、樣式和JavaScript),將其轉化為場景(scene)和模型(model)存儲到內存中,然后再調用系統的繪制API(如Windows程序員熟悉的GDI/GDI+),把這些中間產物繪制到屏幕。

      駐留模式通過場景和模型緩存減少了對繪制API的調用頻次,將性能壓力轉移到場景和模型生成階段,即瀏覽器需要根據DOM上下文和BOM中的尺寸數據,“自行判斷”每一個元素的繪制結果。

      Canvas:快速模式

      Canvas采用了和DOM不同的快速模式(Immediate Mode),讓我們先來看看快速模式是如工作的:

      (快速模式)

      Canvas的應用優點

      上面介紹的兩種不同的模式直接造成了Dom和Canvas的性能差異。對于使用快速模式渲染的Canvas而言,瀏覽器的每次重繪都是基于代碼的,不存在能讓處理流程變慢的多層解析,所以它真的很快。除了快之外,Canvas的靈活性也大大超出DOM。我們可以通過代碼精確的控制如何、何時繪制出我們想要的效果。

      在資源消耗上,DOM的駐留模式意味著場景中每增加一點東西就需要額外消耗一些內存,而Canvas并沒有這個問題。這個差異會隨著頁面元素的數量增多而愈加明顯。以B端的企業應用場景為例,表單那種數據量比較小的場景,不同渲染模式帶來的效果差異并不明顯;但在工業制造、金融財會等類Excel電子表格操作的場景下,單元格數量動輒便是上百萬(5萬行x 20列)甚至上億個,瀏覽器需要對表格所有單元格本身內容進行渲染,同時還涉及到豐富的數據處理,情況就完全不同了。

      (Web頁面上的電子表格,包含1百萬個單元格)

      在Canvas出現之前,在前端渲染表格時只能通過構建復雜的DOM來實現。這種方式下,瀏覽器的性能成為了Web應用瓶頸,讓很多開發者放棄了在瀏覽器上實現電子表格的想法。

      在Canvas出現后,快速模式帶來的性能優勢無疑是一個巨大的亮點,大量、復雜的DOM渲染處理帶來的性能問題終于有了解決途徑。

      回到電子表格的應用場景,業內已經出現了使用Canvas繪制畫布的表格組件,這類組件在渲染數據層時不僅無需重復創建和銷毀DOM元素,在畫布的繪制過程中,也比Dom元素渲染的限制更少。除了表格之外,Canvas也為數字孿生可視化大屏、頁面游戲等場景帶來了變革。

      (數字孿生大屏,精確控制各種形狀、樣式)

      總結

      總結一下,在渲染模式上,Canvas站在了DOM的對面,瀏覽器對其內容一無所知,一切渲染的權利回到了開發者的手上,這個改變帶來了顯著的性能優勢。此外,我們可以使用Canvas繪制種類更為豐富的UI元素,如線形、特殊圖形等,通過畫法邏輯,還可以實現更加精準的UI界面渲染,解決了瀏覽器差異造成的樣式誤差,讓更多應用場景可以順利遷移到Web平臺上來。

      參考資料:

      · Canvas的Wiki介紹

      · Canvas社區

      · 基于Canvas表格組件 SpreadJS

      到此這篇關于HTML-Canvas的優越性能以及實際應用的文章就介紹到這了,更多相關Canvas性能及應用內容請搜索以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持!

      標簽: CSS HTML
      相關文章:
      日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
      国产日韩在线观看视频| 视频在线观看一区| 日本99精品| 亚洲天堂免费| 蜜臀av一区二区在线免费观看| 欧美在线网站| 夜夜精品视频| 亚洲综合激情在线| 日韩激情av在线| 欧美久久香蕉| 欧美黑人做爰爽爽爽| 美腿丝袜亚洲一区| 久久国产三级精品| 国产精品大片| 久久久久久夜| 欧美不卡高清一区二区三区| 激情丁香综合| 视频一区二区中文字幕| 亚洲精品日本| 国产精品一国产精品k频道56| 久久wwww| 欧美日韩国产v| 好看的亚洲午夜视频在线| 久久不射网站| 欧美日一区二区在线观看| 欧美激情一区| 久久久久国产精品一区二区| 久久婷婷一区| 欧美日韩精品一本二本三本| 中文精品电影| 国产精品九九| 日韩电影在线视频| 亚洲在线国产日韩欧美| 日本精品在线播放| 国产不卡一区| 99亚洲精品| 日本视频中文字幕一区二区三区| 欧美韩一区二区| 日本美女一区| 三级亚洲高清视频| 国产精品日本一区二区三区在线 | 亚洲色图综合| 国产精品入口久久| 日韩一区二区三区在线免费观看| 欧美 日韩 国产精品免费观看| 亚洲一区欧美| 久久伊人亚洲| 亚洲国产成人精品女人| 日本不卡在线视频| 高潮久久久久久久久久久久久久| 欧美一区二区性| 日韩高清在线不卡| 欧洲av不卡| 日本在线成人| av资源亚洲| 夜夜嗨网站十八久久| 国产日韩在线观看视频| 色婷婷久久久| 日韩福利视频网| 在线一区视频观看| 日韩激情一区二区| 99精品国产一区二区三区| 日韩在线黄色| 久久婷婷激情| 国产精品日本一区二区不卡视频| 影视先锋久久| 国产精品一区二区三区四区在线观看| 91看片一区| 欧美三区不卡| 91国语精品自产拍| 日本中文字幕一区二区| 91综合网人人| 日韩国产高清在线| 久久国产亚洲| 国产乱人伦丫前精品视频| 欧美日中文字幕| 久久99青青| 免费在线观看成人| 日韩高清欧美| 国产精品久久久一区二区| 亚洲尤物在线| 亚洲va中文在线播放免费| 欧美一区成人| 午夜日韩福利| 日本а中文在线天堂| 蜜臀久久久久久久| 久久黄色影院| 国产欧美午夜| 一二三区精品| 亚洲精品一二三区区别| 里番精品3d一二三区| 乱人伦精品视频在线观看| 亚洲精品.com| 久久久国产精品入口麻豆| 亚洲天堂日韩在线| 欧美va天堂| 国产精品久久久久av电视剧| 久久不见久久见中文字幕免费| 日韩专区在线视频| 欧美搞黄网站| 国产成人在线中文字幕| 日韩av三区| 亚洲综合中文| 精品91久久久久| 五月激情久久| 久久精品欧洲| 国产日韩亚洲欧美精品| 亚洲综合色婷婷在线观看| 激情久久婷婷| 亚洲成人精品| 日韩黄色大片| 国产精品成久久久久| 欧美a在线观看| 91大神在线观看线路一区| 一区二区日韩免费看| 欧美日韩色图| 91精品啪在线观看国产18| 91欧美日韩| 国产精品不卡| 黄色在线网站噜噜噜| 福利一区二区| 98精品久久久久久久| 精品欧美日韩精品| 免费在线日韩av| 国产精品一区二区精品 | 日韩中文欧美在线| 亚洲激情精品| 伊人影院久久| 亚洲国内精品| 136国产福利精品导航网址| 久久蜜桃资源一区二区老牛| 欧美三区四区| 国产在线欧美| 亚洲一区二区三区四区五区午夜 | 激情综合激情| 91久久黄色| 亚洲精品动态| 欧美亚洲福利| 精品一区二区三区的国产在线观看| 国产精品久久久久77777丨| 国产精品流白浆在线观看| 欧美a在线观看| 国产精品久久国产愉拍| 久久精品国产一区二区| 91综合网人人| 亚洲成人国产| 五月婷婷六月综合| 亚洲一区成人| 日韩avvvv在线播放| 国产欧美日韩一区二区三区在线| 国产精品久久久免费| 国产成人77亚洲精品www| av在线最新| 激情五月色综合国产精品| 免费视频久久| 久久狠狠亚洲综合| 高清av一区| 久久精品成人| 99pao成人国产永久免费视频| 亚洲免费毛片| 国产精品美女午夜爽爽| 色网在线免费观看| 日韩午夜黄色| 日韩高清三区| 国产一区二区三区免费在线 | 亚洲欧美日本国产专区一区| 亚洲精品高潮| 精品国产一区二区三区2021| 日韩在线观看不卡| 亚洲精品小说| 日本不卡视频在线| 免费在线亚洲欧美| 国产中文一区| 日本a级不卡| 国产精品久久久久久久免费观看| 久久一级电影| 日韩高清一级| 日韩大片在线播放| 亚洲我射av| 国产精品成久久久久| 国产精品腿扒开做爽爽爽挤奶网站| 欧美日韩99| 久久在线电影| 国产美女久久| 国产麻豆久久| 亚洲精品国产精品粉嫩| 九九久久国产| av不卡在线| 国产精品久久国产愉拍| 久久在线免费| 国产美女精品视频免费播放软件| 亚洲成人二区| 91精品国产自产观看在线| 久久人人97超碰国产公开结果| 亚洲91网站| 日本精品在线中文字幕| 天堂va在线高清一区| 日韩欧美三级| 久久国产三级| 国产字幕视频一区二区|