首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

iOS 页面渲染 - 离屏渲染

上周介绍了一下iOS 页面渲染-UIView & CALayer,本周我们来聊一聊 iOS 页面渲染中的高频面试题--离屏渲染。...其实给大家先分享关于 iOS 页面渲染的相关知识有一个原因是为后续 iOS 优化系列中的 UI 渲染优化篇做铺垫,方便大家在后面阅读时能够清楚优化手段背后的原理以及有一个更深的理解。...离屏渲染概念 先简单说下 iOS 页面渲染的正常流程。...OffscreenBuffer 对于上周文章所提到的利用 Core Graphics 的 API 进行页面绘制的方式有时候也会被称为离屏渲染(因为像素数据是暂时存入了 CGContext,而不是直接到了...一旦需要离屏渲染的内容过多,很容易造成掉帧的问题。所以大部分情况下,我们都应该尽量避免离屏渲染。 离屏渲染存在的原因 既然离屏渲染对性能有损伤,那为什么还要使用离屏渲染呢?

1.9K30

iOS 页面渲染 - 流程

作为一名专业的 iOS 页面仔,画 UI 是我们的家常便饭,那不知道你在开发过程中有没有思考过这样一些问题: App 静止不动时,页面是否还进行刷新? 页面渲染和 RunLoop 之间是什么关系?...系列文章还有: iOS页面渲染-UIView & CALayer iOS页面渲染-离屏渲染 图形渲染框架 我们先来了解一下 UI 渲染的相关框架,不能对一些名词傻傻分不清。...整个图形渲染过程是 CPU 与 GPU 共同处理的结果,不管是哪部分卡顿,都会造成最终的掉帧 Core Animation Pipeline 同系列文章 iOS 页面渲染-UIView & CALayer...同系列文章还有 iOS 页面渲染-离屏渲染 。 我们知道了 CALayer 成像的过程, 那么它是如何调用 GPU 并显示可视化内容的呢?...只是将指定 UIView(背后的 CALayer) 打上待刷新标记而已,而layoutIfNeeded也只是重新计算子视图的 frame 信息,并且会在 RunLoop 回调时自动调用,其都不会去真正的去刷新页面显示内容

1.7K20
您找到你想要的搜索结果了吗?
是的
没有找到

使用Headless Browser渲染页面

综上所述,一个神奇的解决方案——在后端渲染页面,就这么诞生了。 1. 敲定方案 在后端渲染页面,自己重新写个渲染引擎显然是不必要的,此时Headless Browser的概念开始进入我的视野。...抽象数据结构 有了Headless Browser后,我们需要得到页面的数据源来渲染页面,也就是为了得到和浏览器上显示一模一样的图片,后端必须拿到该页面所有的html、js、css代码。...乍一看好像很麻烦,不过我们转念一想,我们需要渲染的也就只有画布这一个页面,那么我们参考前端的模板技术,定义好header、footer以及所有的js和css引用,把它们都放在服务器,到时候前端只需要把画布中的代码传过来不就好了吗...构建渲染模板 定义好数据结构之后,后台需要根据这些定义以及前端传输过来的上述元素实例来重新拼装出画布。为了达到这个目的,我们首先需要在服务器端建立一个用来渲染页面的模板。...随后,我们准备调用phantomjs的ScreenCapture方法,它的原理是在本地调起Webkit内核渲染指定页面,然后根据参数截取屏幕显示内容,生成图片。

1.4K20

二、Vue 页面渲染过程

我也是刚刚接触,所以就会有这样的困惑,所以这篇就简单的理解一下项目页面渲染的过程。 渲染过程 我们上篇文章说main.js 是无用的,是废代码,只是起到支撑框架的。...可以看到template 渲染的是id 为app 的盒子(div)。这里应该是覆盖了index.html中的d 也为app 的盒子。 所有的 router-view 中的内容,都会被自动替换。...实例化一个vue,然后渲染APP.vue 文件内容,我们自己写的vue 组件则是通过路由转接到父组件下的。...番外 我们项目的流程就讲到这里把,算是对上篇的补充,让我们对项目启动,界面渲染算是有一个大概的了解啦,我们接下来就按照官网上讲一下vue 的一些语法和特性,但是与官网上不同的是,官网上都是一个个的html

1.3K10

iOS 页面渲染 - UIView & CALayer

QuartzCore 框架是可以跨平台使用的,在 iOS 以及 macOS 中都可以使用,但是 UIKit 只在 iOS 中存在,在 macOS 中会有 Application Kit,在这两个系统里,页面绘图框架是可以公用的...CALayer CALayer 视图结构类似 UIView 的子 View 树形结构,它们分别可以有自己的 SubView 和 SubLayer,可以向它的 RootLayer 上添加子 layer,来完成一些页面效果...页面渲染流程 那么为什么 CALayer 可以呈现可视化内容呢? 因为 CALayer 基本等同于一个 纹理。纹理是 GPU 进行图像渲染的重要依据。...那么绘制页面也有两种方式: 一种是 手动绘制; 一种是 使用图片。...最后 说不引申,但是写起来篇幅还是挺多的,没办法,因为有些知识点是串在一起的,不展开的话可能不好理解的透彻,先说这么多吧,iOS 页面渲染这块还有很多东西,比如离屏渲染渲染优化等,这些后面再单独说吧

1.6K20

Android 统计页面渲染时长

文章开头还是先抛出几个小小的问题,大家在开发的时候有没有考虑过一个问题,onCreate方法执行完了是不是页面已经完全打开了呢?为什么呢? 什么是页面渲染时长? 我们先聊聊页面渲染时长的定义。...简单的说,我们把一个页面从创建到渲染完成出现第一帧作为一个页面渲染时间,当然这个也不能作为完全的参考,毕竟复杂的商业应用都涉及到接口相关的,所以第一帧并不代表完全可用。...那么其实我们也可以理解当View能获取到宽高的时候就是我们第一帧绘制完的时间了,那么我们完全可以给在Activity的onWindowFocusChanged方法被触发的时候就是代表了页面渲染完成了。...为什么要统计整个渲染时长。 由于生命周期和绘制等都是执行在安卓主线程上的。如果我们在onCreate或者onResume中执行了一些耗时操作,就会导致页面的整体渲染时间就会被延迟。...常见的出现在有滑动或者动画的页面。 那么如何去改进渲染过慢的问题呢? 其实我们完全可以基于BlockCanaryEx去定位卡顿问题。说起来这个库的原理还是很巧妙的。

4K22

Splash抓取javaScript动态渲染页面

一些Splash功能: 并行处理多个网页 获取HTML源代码或截取屏幕截图 关闭图像或使用Adblock Plus规则使渲染更快 在页面上下文中执行自定义JavaScript 可通过Lua脚本来控制页面渲染过程...问题分析 scrapy爬虫框架没有提供页面js渲染服务,所以我们获取不到信息,所以我们需要一个渲染引擎来为我们提供渲染服务---这就是Splash渲染引擎(大侠出场了) 1、Splash渲染引擎简介:...Splash是为Scrapy爬虫框架提供渲染javascript代码的引擎,它有如下功能:(摘自维基百科) (1)为用户返回渲染好的html页面 (2)并发渲染多个页面 (3)关闭图片加载,加速渲染 (...Client----相当于1 /Splash---相当于2 /Web server---相当于3 即:我们将下载请求告诉Splash ,然后Splash帮我们去下载并渲染页面,最后将渲染好的页面返回给我们...splash:wait方法---等待渲染的秒数 splash:evaljs方法---在当前页面下,执行一段js代码,并返回最后一句表达式的值 splash:runjs方法---在当前页面下,执行一段js

3K30

如何只使用CSS提升页面渲染速度

本文主要介绍你可以用来提升页面渲染速度的 4 个 CSS 技巧。 1....在这种情况下,我们可以使用content-visibility来跳过渲染屏幕之外的内容。如果你有大量屏幕之外的内容的话,这会大大减少页面渲染时间。...我们可以看下面这个页面,包含很多显示不同信息的卡片。虽然屏幕能显示大约 12 个卡片,但列表中有差不多 375 个卡片。如你所见,浏览器花费 1037ms 来渲染这个页面。 ?...在这个例子中,向页面中加入content-visibility后,渲染时间下降到 150ms。性能提升了 6 倍以上。 ?...如你所见,content-visibility 的功能很强大,对于改善页面渲染时间非常有用。根据我们目前为止讨论的内容,你一定在想它是针对页面渲染的灵丹妙药。

1.3K30

浏览器是怎么渲染页面的?

text-align: center; } p { font-family: verdana; font-size: 20px; } 复制代码 Javascript 有了html和css之后,其实页面渲染已经是可以完成了的...写法例子: x=document.getElementById("demo"); //查找元素 x.innerHTML="Hello JavaScript"; //改变内容 复制代码 浏览器是怎么渲染的...我们知道了浏览器主要是通过理解HTML和CSS来进行内容渲染的,那么它渲染流程究竟是怎样的呢? 大致渲染流程图: 流程大致为: 浏览器在输入URL之后,会向目标服务器获得该页面的html等资源。...最后浏览器根据这棵layout树,将页面渲染到屏幕上去。 DOM树的构建 当服务器返回页面资源给浏览器时,浏览器拿到的其实是一些字节数据。...回流(reflow)与重绘(repaint) 这2个步骤都发生在页面已经渲染完成后。当元素的内容、结构、位置、或尺寸发生了变化,需要重新计算元素样式的过程就是回流。

49200

如何只使用CSS提升页面渲染速度

本文主要介绍你可以用来提升页面渲染速度的 4 个 CSS 技巧。 1....在这种情况下,我们可以使用content-visibility来跳过渲染屏幕之外的内容。如果你有大量屏幕之外的内容的话,这会大大减少页面渲染时间。...我们可以看下面这个页面,包含很多显示不同信息的卡片。虽然屏幕能显示大约 12 个卡片,但列表中有差不多 375 个卡片。如你所见,浏览器花费 1037ms 来渲染这个页面。...一般 HTML 页面 下一步,你可以向所有的卡片中加入content-visibility。 在这个例子中,向页面中加入content-visibility后,渲染时间下降到 150ms。...在页面渲染时,直到 CSS 对象模型(CSS Object Model,CSSOM)准备就绪,它才开始渲染阶段。根据你的 Web 应用,你可能有一个很大的样式表来满足所有的设备形式因素。

1.5K20

懒加载 React 长页面 - 动态渲染组件

背景 长页面在前端开发中是非常常见的。例如下图中的电商首页,楼层数据来自运营人员在后台的配置,楼层数量是不固定的,同时每个楼层可能会依赖更多翻页数据。...在这种情况下,如果一次性将页面全部渲染,可想而知,我们的页面直出效率(fmp, fid)会受到影响。 为了更好的用户体验,我们需要考虑在用户滚动到下一屏时,渲染下一屏的组件。 ?...设计思路 假设页面预期渲染 n 个组件,每个组件均会触发请求其他接口。设计这样一个长页面,我们主要会面临以下两个问题: 渲染下一屏组件的时机应该如何判断?...监听滚动优化 在滚动时会频繁触发 scrollRenderHandler 函数,导致页面性能低下。...在写一个普通的长页面的过程中,如果只追求完成,那么将会非常简单,但如果想要进一步优化,那可做的事情就有很多了。

3.4K20

URL 从输入到页面渲染全流程

前面的话   本文将详细介绍从输入URL到页面加载的全过程 概述   从输入URL到页面加载的主干流程如下:   1、浏览器构建HTTP Request请求   2、网络传输   3、服务器构建HTTP...Response 响应   4、网络传输   5、浏览器渲染页面 ?...(6)元素有CSS filter(滤镜)属性   (7)2D Canvas或者WebGL   (8)Video元素   5、布局和渲染   布局就是安排和计算页面中每个元素大小位置等几何信息的过程。...(7)RenderLayer有一个Z坐标比自己小的兄弟节点,该节点是一个合成层   最终的渲染流程如下所示: ? 【重绘和回流】   重绘和回流是在页面渲染过程中非常重要的两个概念。...由于HTML使用的是流式布局,如果页面中的一个元素的尺寸发生了变化,则其后续的元素位置都要跟着发生变化,也就是重新进行流式布局的过程,所以被称之为回流   前面介绍过渲染引擎生成的3个树:DOM树、Render

1.4K10

CSS到底会不会阻塞页面渲染

我们从浏览器的渲染过程来解析下。 不同的浏览器使用的内核不同,所以他们的渲染过程也是不一样的。目前主要有两个 webkit渲染过程 ? Gecko渲染过程 ?...(渲染树) 根据Render Tree渲染绘制,将像素渲染到屏幕上。...DOMContentLoaded 对于浏览器来说,页面加载主要有两个事件,一个是DOMContentLoaded,另一个是onLoad。...而onLoad没什么好说的,就是等待页面的所有资源都加载完成才会触发,这些资源包括css、js、图片视频等。 而DOMContentLoaded,顾名思义,就是当页面的内容解析完成后,则触发该事件。...当页面里同时存在css和js,并且js在css后面的时候,DomContentLoaded必须等到css和js都加载完毕才触发。

4.4K40
领券