国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

Flutter 即將放棄 Html renderer ,你是否支持這個提議?

這篇具有很好參考價值的文章主要介紹了Flutter 即將放棄 Html renderer ,你是否支持這個提議?。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

在之前的《Flutter Web 的未來,Wasm Native 即將到來》 中我們知道,F(xiàn)lutter 通過推進 WasmGC 的落地來支持 Dart Native ,從而讓 Flutter Web 在瀏覽器上實現(xiàn)原生的 Wasm Native 的支持, 這也是 Flutter Web 最終決定的技術(shù)路線,也就是 CanvasKit 才是Flutter Web 的未來 。

Flutter 即將放棄 Html renderer ,你是否支持這個提議?,Android開發(fā),flutter,html,前端

因為將 Flutter Widget 轉(zhuǎn)化為 Html 標(biāo)簽渲染的方式,其實本質(zhì)上違背了 Flutter Engine 的跨平臺方式。

在這個基礎(chǔ)上,官方認為與基于 WebGL 的 CanvasKitSkwasm 渲染器相比,HTML 渲染器復(fù)雜、性能表現(xiàn)不佳且圖形表現(xiàn)力有限等原因,同時 CanvasKit 渲染器又即將引來突破性的更新,而未來 Html renderer 能提供的價值遠低于維護成本和開發(fā)人員面臨的復(fù)雜性,畢竟在多個渲染器之間進行兼容和解決問題的成本太高,所以官方提議棄用并刪除 Flutter Web 的 Html renderer。

在歷史問題上,Html renderer 經(jīng)常會出現(xiàn)渲染效果和其他平臺不一致的問題,因為 HTML renderer 必須通過 HTML 的方式去模擬其他平臺的某些功能,如漸變、文本布局、像素著色器等,而這些適配十分占用開發(fā)資源,并且效果也存在微妙的差異。

為什么要移除 Html renderer

事實上 Html renderer 是從 2018 年開始作為 Flutter Web 的第一個渲染器,HTML renderer 其實是 HTML、CSS、Canvas 2D、SVG 和 WebGL 的組合產(chǎn)品,在早期它也具備了一些優(yōu)勢:

  • Size 更小,加載更快,并且可以通過deferred-components 的方式進行懶加載拆包 。
  • PlatformView 的支持零成本,因為支持介入更多的 “HTML” 而已,在 HTML 中嵌套 HTML 很簡單。
  • 支持 CORS 圖像 ,因為是基于 <img> 標(biāo)簽實現(xiàn),但是這對于 Flutter 而言有好有壞,因為 Flutter 沒有處理圖像的像素,所以和其他平臺相比,無法控制幀和應(yīng)用一些像素效果
  • HTML 可以更輕松訪問本地字體,無需從網(wǎng)絡(luò)獲取字體,這對比 WebGL 是一個比較大的優(yōu)勢,目前從長遠來看,W3C 提案例如[canvas-formatted-text](https://github.com/WICG/canvas-formatted-text) 理論可以徹底解決這個問題。

那既然有這么多優(yōu)勢,為什么還要移除?

前面提到過,由于 Flutter 一直以來都是以 Canvas 為基準通過 Engine 來實現(xiàn)跨平臺,并且保證不同平臺上的控件得到一致的渲染效果,而 Html renderer 的渲染方式明顯違背了初衷,在兼容適配的過程中產(chǎn)生了許多額多的開發(fā)成本。

其次,將 HTML、CSS、Canvas 2D、SVG 和 WebGL 組合到單個渲染器中并不容易,對于 Flutter 本身的 API ,他喪失了很多原本應(yīng)該具備的能力,比如:

  • Path.combine
  • drawAtlas, drawRawAtlas
  • dilate, erode, compose image filters
  • conic path segments
  • linearToSrgbGamma, srgbToLinearGamma color filters
  • saveLayer
  • FragmentProgram, FragmentShader
  • strokeMiterLimit
  • Paint.imageFilter
  • Scene.toImage, Scene.toImageSync
  • Image features that require access to pixel data

而有些功能雖然有實現(xiàn),但它們的實現(xiàn)存在著性能缺陷,例如:

  • BlendMode
  • Gradient
  • drawVertices
  • drawPoints
  • drawPicture
  • Picture.toImage
  • MaskFilter.blur (throws in Safari)

由于 HTML renderer 無法支持 Flutter 的 API,這就會讓 Framework 、 Plugin 和 App 需要在開發(fā)時兼容和維護一些特殊的代碼如 kIsWeb 檢查。

最后,F(xiàn)lutter 團隊需要對 HTML 特定問題進行分類,它還使非 HTML 問題的分類變得更加復(fù)雜,因為處理問題的第一步經(jīng)常需要區(qū)分是哪個渲染器受到影響。

當(dāng)然,在此之前社區(qū)對于 HTML renderer 還存在一些誤解,例如:

  • HTML 支持 Accessibility:事實上,F(xiàn)lutter 得 Semantic DOM 設(shè)計完全支持 Flutter 的輔助功能,對于全部渲染器 CanvasKit、Skwasm 和 HTML 都是一樣可以適配支持無障礙能力。
  • 它提供 SEO:與 Accessibility 一樣,渲染樹不適合作為 SEO 的來源,因為它不以邏輯方式呈現(xiàn)內(nèi)容,爬蟲最多只能看到一些使用 HTML 或 SVG 繪制的文本片段,但最終出現(xiàn)在 2D 畫布中的文本對于爬蟲來說是不可見的,所以目前 Flutter 官方也正在研究使用語義樹作為 SEO 數(shù)據(jù)的來源。

新的 CanvasKit

在此之前, CanvasKit 最飽受爭議的就是它的大小和加載速度,最初引入 CanvasKit 時,F(xiàn)lutter 需要 3.2MB 的額外負載才能渲染第一幀,并且很多移動端設(shè)備并不支持 WebGL 2。

例如有人提到了,他們的網(wǎng)站是使用 CanvasKit 構(gòu)建,而在跟蹤用戶流失情況是發(fā)現(xiàn) 33% 的潛在客戶在加載應(yīng)用是離開,這三個罪魁禍首似乎是 dart.main.js 1.6mb、canvaskit.wasm 1.5mb 以及啟動 Engine 所需的時間:

Flutter 即將放棄 Html renderer ,你是否支持這個提議?,Android開發(fā),flutter,html,前端

而現(xiàn)在在經(jīng)過多次優(yōu)化和時間沉淀后:

  • CanvasKit 的大小已經(jīng)縮小到 1.5MB,新的渲染器 Skwasm 還可以其進一步縮小到 1MB 左右

  • WebGL 2.0 在每個主要瀏覽器中[至少支持3個版本](https://caniuse.com/?search=WebGL 2.0)

    Flutter 即將放棄 Html renderer ,你是否支持這個提議?,Android開發(fā),flutter,html,前端

  • 新的 Web API 可提高基于 WebGL 的渲染效率,包括:

    • 支持 WebCodecs(特別是 ImageDecoder)
    • SharedArrayBuffer,啟用共享內(nèi)存多線程
    • WasmGC

預(yù)計在 10 mbps 網(wǎng)速下,啟動開銷為 0.8 秒,并且由于 CanvasKit 是可緩存資源,因此它可以在開始時與其他資源并行加載,實踐使用中的開銷可以小于 0.8 秒。

而在新的 CanvasKit 下,F(xiàn)lutter 正在推動進一步的優(yōu)化支持,例如:

  • 可以在獲取靜態(tài)資源時支持并行加載,在獲取 canvaskit.wasm 的同時同步獲取數(shù)據(jù) main.dart.js

  • Bootstrap API 支持在后臺加載 Flutter 時為應(yīng)用創(chuàng)建純 HTML 登錄頁面,當(dāng)用戶完成與登陸頁面的交互時,大部分 Flutter Web loading 已經(jīng)完成

  • iOS 中的大部分緩慢都是由于缺乏 ImageDecoder API,因此目前還需要找到比當(dāng)前單線程 wasm 編解碼器解決方案更好的圖像解碼器。

當(dāng)然,對于 CanvasKit 來說,目前還需要推進的問題還有:

  • CORS 圖像
  • 更好的 PlatformView
  • iOS (即 Safari/WebKit)適配

而對于 CanvasKit 來說,無法解決的問題就是不支持沒有 GPU 的硬件,因為對于 Flutter 來說,GPU 是至關(guān)重要的一環(huán),特別未來對于 Impeller 的支持上。

最后

其實 Flutter web一直是 Flutter 里的另類而有特殊的存在,F(xiàn)lutter 來源于前端 Chrome 團隊,起初 Flutter 的創(chuàng)始人和整個團隊幾乎都是來自 Web,但是由于前期技術(shù)局限的原因,為了適配 Web,F(xiàn)lutter Web 成了 Flutter 所有平臺里“最另類又奇葩”的落地。

Flutter 即將放棄 Html renderer ,你是否支持這個提議?,Android開發(fā),flutter,html,前端

而如今官方在明確了以 CanvasKit 和 Wasm Native 為核心路線的情況下看,Html Renderer 退出歷史舞臺是必然的趨勢,而差別就在于它的過渡期需要多久?

目前看來 CanvasKit 還有諸多這樣那樣的不足,例如原生層面還不支持 SVG ,需要通過 flutter_svg 來做支持,對于 Web 來說其實支持 SVG 應(yīng)該是一件“非常簡單”的事情。

另外例如 CanvasKit 還有一些比較邊緣的兼容問題,例如這個頁面是采用 wasm 渲染的 Flutter Web 頁面,但是當(dāng)我們用插件翻譯頁面內(nèi)容時,可以看到只有標(biāo)題被翻譯了,主體內(nèi)容并沒有,因為此時 Flutter Web 的主體內(nèi)容都是 Canvas 繪制,沒有 html 內(nèi)容,所以無法被識別翻譯,另外如果你保存或者打印網(wǎng)頁,也是輸出不了完整 body 內(nèi)容。

Flutter 即將放棄 Html renderer ,你是否支持這個提議?,Android開發(fā),flutter,html,前端

所以目前來看,CanvasKit 還是有許多需要打磨的地方,不過不可否認的是,它正在變得更好。

那么,你支持這次移除并啟用 Html renderer 的提議嗎?

更多可見:https://github.com/flutter/flutter/issues/145954文章來源地址http://www.zghlxwxcb.cn/news/detail-845383.html

到了這里,關(guān)于Flutter 即將放棄 Html renderer ,你是否支持這個提議?的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

  • AI創(chuàng)作系統(tǒng)ChatGPT網(wǎng)站源碼,AI繪畫,支持GPT聯(lián)網(wǎng)提問/即將支持TSS語音對話功能

    AI創(chuàng)作系統(tǒng)ChatGPT網(wǎng)站源碼,AI繪畫,支持GPT聯(lián)網(wǎng)提問/即將支持TSS語音對話功能

    SparkAi創(chuàng)作系統(tǒng)是基于ChatGPT進行開發(fā)的Ai智能問答系統(tǒng)和Midjourney繪畫系統(tǒng),支持OpenAI-GPT全模型+國內(nèi)AI全模型。本期針對源碼系統(tǒng)整體測試下來非常完美,可以說SparkAi是目前國內(nèi)一款的ChatGPT對接OpenAI軟件系統(tǒng)。那么如何搭建部署AI創(chuàng)作ChatGPT?小編這里寫一個詳細圖文教程吧!

    2024年02月03日
    瀏覽(367)
  • sql server 修改表前 先判斷是否有這個列

    在這個示例中: TABLE_NAME = \\\'Users\\\' ?表示我們正在檢查 Users 這張表。 COLUMN_NAME = \\\'userNum\\\' ?表示我們在查找名為 userNum 的列。 ADD userNum INT; ?是在確認該列不存在后實際執(zhí)行的語句,它將向 Users 表中添加一個名為 userNum 的整數(shù)類型(integer)字段。

    2024年01月23日
    瀏覽(12)
  • 首個支持RWA交易的訂單簿DEX-PoseiSwap,即將開啟IEO

    首個支持RWA交易的訂單簿DEX-PoseiSwap,即將開啟IEO

    隨著?DeFi?世界的發(fā)展,越來越多的鏈上協(xié)議支持以合成資產(chǎn)的方式,將傳統(tǒng)金融資產(chǎn)以加密資產(chǎn)的形式映射至鏈上,包括美股、黃金期貨等等,雖然這種方式進一步幫助投資者,以非許可的形式豐富了投資標(biāo)的,但這種方式缺乏合規(guī)性保障。與此同時,鏈上?DEX?基本都是以

    2024年02月08日
    瀏覽(25)
  • Flutter頁面刷新失敗?看看是不是這個原因

    Flutter頁面刷新失敗?看看是不是這個原因

    我用flutter開發(fā)了一個頁面,頁面上有一些自己寫的控件A,A控件里有一個button,我點擊這個A控件里的button的時候,直接在onPressed里調(diào)用setState發(fā)現(xiàn)頁面并沒有刷新。 要實現(xiàn)控件A所在頁面的整體刷新要怎么實現(xiàn)呢? 在Flutter中,要實現(xiàn)點擊控件A中的按鈕后刷新整個頁面,你可

    2024年02月05日
    瀏覽(31)
  • 小米平板6Max14即將發(fā)布:自研G1 電池管理芯片,支持33W反向快充

    小米平板6Max14即將發(fā)布:自研G1 電池管理芯片,支持33W反向快充

    明天晚上7點(8 月 14 日),雷軍將進行年度演講,重點探討“成長”主題。與此同時,小米將推出一系列全新產(chǎn)品,其中包括備受矚目的小米MIX Fold 3折疊屏手機和小米平板6 Max 14。近期,小米官方一直在積極預(yù)熱新款平板電腦,為用戶帶來更多驚喜。 根據(jù)官方海報顯示,小

    2024年02月12日
    瀏覽(31)
  • Ubuntu24.04即將發(fā)布,支持Linux內(nèi)核6.8。該版本會有哪些亮點?

    Ubuntu24.04即將發(fā)布,支持Linux內(nèi)核6.8。該版本會有哪些亮點?

    更多內(nèi)容在 Canonical 計劃 2024 年 4 月發(fā)布 Ubuntu 24.04 LTS 發(fā)行版,將獲得長達 12 年的支持。Ubuntu 24.04 LTS,代號“Noble Numbat”,是Ubuntu發(fā)行版的最新長期支持(LTS)版本。12年的支持意味著你會得到? 五年的維護+安全更新,然后作為Ubuntu Pro延長維護周期的一部分,再更新五年 。

    2024年04月12日
    瀏覽(11)
  • flutter報錯Cannot hit test a render box that has never been laid out

    flutter報錯Cannot hit test a render box that has never been laid out

    出現(xiàn)這個問題的原因可能是因為你把一個ListView或者GridView放到了一個沒有設(shè)置大小的容器里面導(dǎo)致的,所以意思是不能渲染那一個沒有布局過的容器。我這里遇到的錯誤是因為我把GridView放到了一個Container里面,并且我沒有設(shè)置Container寬高。 就導(dǎo)致了那個錯誤: ======== Exce

    2024年01月19日
    瀏覽(22)
  • 檢查一個Java List是否包含某個JavaBean對象的特定值,并且獲取這個值

    在這個例子中,我們使用了Java 8的 Optional 類來處理可能不存在的結(jié)果。如果找到了匹配的Bean對象,我們可以使用 get() 方法獲取它,并打印出其名稱。如果沒有找到匹配的Bean對象, isPresent() 方法將返回 false ,我們將打印出相應(yīng)的消息。

    2024年01月24日
    瀏覽(41)
  • html中如何給input輸入框這個一個默認值

    在HTML中,要給 input 輸入框設(shè)置一個默認值,你可以使用 value 屬性。下面是一個簡單的例子,展示了如何為一個文本輸入框設(shè)置一個默認值: 在這個例子中, input 元素的 type 屬性設(shè)置為 text ,表示這是一個文本輸入框。 value 屬性被設(shè)置為 這是默認值 ,這意味著當(dāng)頁面加載

    2024年02月21日
    瀏覽(14)
  • Flutter PC桌面端 控制應(yīng)用尺寸是否允許放大縮小

    Flutter PC桌面端 控制應(yīng)用尺寸是否允許放大縮小

    桌面端中,登錄、注冊、找回密碼頁面不允許用戶手動放大縮小,主頁面允許 window_manager 使用教程請參照這篇博客:Flutter桌面端開發(fā)——window_manager插件的使用 題外話: 之前使用的是 bitsdojo_window 插件,使用方法請參照博客 bitsdojo_window 這個插件中,如果想要用戶不允許操作

    2023年04月20日
    瀏覽(22)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包