获得徽章 0
- type R = [name:string,age:number]
type getName<A> = {
[key in keyof A]: key
}
type ans = getName<R>
为什么这里ans 的类型是 [name: "0", age: "1" ] 我预想的应该是["0","1"]展开评论点赞 - Starting in React 18 with createRoot, all updates will be automatically batched, no matter where they originate from. 终于不会有xx问state更新的异步和同步问题了评论点赞
- I wander why react Native always use flex:1 util i see this!
FaceBook set all containers to flex-container by default.Everything is display: flex by default. All the behaviors of block and inline-block can be expressed in term of flex but not the opposite.展开1点赞 - Functions defined with => are always anonymous, while functions defined with function can optionally be named. Naming can be very helpful in stack traces when debugging, so I recommend using named functions when exporting a function from a file with the export keyword.展开赞过评论2
- 浏览器和渲染和我们平常的游戏渲染不同,浏览器渲染更加倾向于2D化,更多的工作是排版,HTML标准的制定者大多都是排版界大佬,排榜是"单线程的",而不像图形学很多的矩阵运算可以并发运行,所以浏览器的工作瓶颈(大部分情况下,遇到某些大图片以及图片的resize问题就不说了)在于排版,所以CPU是瓶颈,但是聪明的浏览器开发者利用图层的概念(可以在devtool中打开Layout Borders)来加速重排的速度,一个"盒子"的几何变化只会影响页面部分的盒子,所以我们可以分层处理。(Dom树上一个节点的改变可能会影响它的整个子树以及它的父辈,分层操作具体要看浏览器实现)。对于某些动画操作来说,如果盒子所在的层很大,就会造成很大一块区域内部的重新排列,就需要浪费大量的CPU时间在层内重新排布上,但是如果我们能将动画物体自己当作一层的话(比如position:absolute,translate等等不会占着标准流的位置的样式)就能够自成一层而不需要进行重排。不需要进行重排后,还可以将整个动画的执行(也就是层的移动)计算全部交给GPU,减少了数据在CPU内存和GPU内存之间的来回切换提高了执行效率。但是过多的分层,会导致GPU内存紧张(层的本质也就是GPU中的贴图,最终计算过程也就是贴图之间的移动以及合成)。所以还需要开发者进行权衡。展开评论点赞