我有一個應用程序,它爲GUI混合了DOM,SVG和<canvas>,並且想知道不同縮放方法的含義。縮放Web視口與畫布元素的移動性能影響是什麼?
我想找到一個很好的策略,縮放應用程序的佈局使得:
該應用程序的大小爲固定縱橫比(比如4×3),並最大化的設備,因此「letterboxed」並水平或垂直居中。
應用程序代碼儘可能乾淨。理想情況下,這意味着應用程序代碼可以採用合理的整體大小(例如1024x768)。
任何需要的縮放均以不會對GPU性能產生負面影響的方式應用。
棘手位是<帆布>元件是光柵化,而所有其他部分比例相當無縫獨立的裝置的分辨率。縮放完整的視口意味着前者將按照使其變得模糊的方式進行縮放,並且我相信會影響渲染性能(正確?)。然而,替代方法是在運行時計算<畫布的尺寸,這意味着更復雜的繪圖對象代碼以及圖形緩衝區的可變內存使用。我不相信這是一個公平的假設,即具有兩倍分辨率的設備可以處理兩倍於同等性能的像素推動。
舉個例子,假設應用程序想要處於橫向模式,邏輯大小爲1024x768,設備爲1600x1280。由於邏輯具有0.75的方面和物理的0.80,這將需要垂直letterboxing,或縮放應用程序的高度1600/1024 = 1.5625。
第一種方式,縮放視窗
var viewport = document.querySelector('meta[name=viewport]');
var scale = [ calculate ... ];
viewport.setAttribute('content', 'width=device-width, initial-scale='+scale+', maximum-scale='+scale+', user-scalable=0');
- PRO定位是符合市場預期。
- PRO該應用中的最小代碼;可以在任何地方呈現邏輯座標/維度
- CON畫布元素模糊或像素化。可能會影響畫布表現?
第二種方法中,計算的縮放,並使用該計算的邏輯尺寸
保持視口比例爲1.0,但調整任何「像素」的值,以及<帆布>尺寸,相應地。因此,例如,想要在畫布是該應用的一半寬度將正在使用設備的分辨率(被定尺寸爲(邏輯1024)/ 2 *(比例係數1.5)= 768。
- PRO畫布元件或在視網膜/高清顯示器中爲1/2)。
- CON畫布元素使用可變數量的內存,這可能無法很好地擴展性能。
- CON
body
標籤上需要樣式才能縮放文本;這反過來看起來像是一堆蠕蟲,它如何影響靜態/相對定位的嵌套元素。 - CON代碼需要將比例因子或動態計算的座標/尺寸傳遞給畫布元素中的所有繪圖命令。
我不清楚CSS em單元如何進入這一切。字體希望用ems來設置大小,但ems中的字體大小的元素會改變子元素的縮放比例,而且我不想最終與這種與「全局」縮放相互作用的角色摔跤。但是實際上這可能並不重要?
任何建議爲一個堅實的整體方法?