Electron项目yarn安装依赖
yarn 淘宝镜像
1 | yarn config set registry https://registry.npm.taobao.org |
Electron 淘宝镜像
1 | export ELECTRON_MIRROR="https://cdn.npm.taobao.org/dist/electron/" |
yarn 淘宝镜像
1 | yarn config set registry https://registry.npm.taobao.org |
Electron 淘宝镜像
1 | export ELECTRON_MIRROR="https://cdn.npm.taobao.org/dist/electron/" |
什么是缓存友好
代码?学院派的回答大概会涉及CPU多级缓存结构等原理性的内容,但也许只要理解“缓存
是CPU里一块比内存
小很多,但也快
很多的存储空间,访问内存时CPU会一段一段的把内存
读取到缓存
,如果后续操作的数据在缓存
里就不会读内存
,整体速度就快
了”,这样的基本概念其实就可以开始编写缓存友好
的代码了。
多核多线程时还会有False Sharing
等问题,可以入门后再逐步了解。
下面是一段演示代码。对一个二维数组的数据求和,区别只是按“行”访问还是按“列”访问(会影响cache是否命中),品出其中差别也就算入门了。
在数据集小到可以全部放在cache中的时候,是真的飞起了,当然现实中很少有这样理想的情况,缓存友好的核心也就是如何设计能高命中的数据结构和代码。
常见的做法会把对象属性以线性存储,并分独立函数更新。这里会有点和面向对象拧着的感觉,需要适应一下,对外接口OOP内部组织DOP。
Unity的DOTS中的ECS(Entity Component System )是不错的概念参考。
1 |
|
1 | clang ./cacheTest.cpp --std=c++14 -lstdc++ -O2 -o test.out |
1 | testCase: 10,10 |
这是一个试水项目,是找的代码做二次开发,在中低端手机上运行,滑动列表有点卡。
代码到手后总体浏览了一下,基本没有什么复杂计算,应该是对象创建和布局绘制占大头。
具体找到对应界面的样式和组件代码后,确实代码为了布局容易,层次嵌套比较多,样式书写简单直接,可以透明的容器都填充了颜色,经过一番调整,主要修改样式,部分扁平化层级后,问题解决。
这里不打算写具体修改的内容,原生平台的开发手册里都会有layout,overdraw和gpu profile相关的内容,里面有写的很好的指引说明。
(这里还改了react-navigation-stack里的StackViewCard,因为当时的版本,它的背景设置不了透明,本想略去的,因为本质还是改样式,但毕竟动到了三方组件里面,还是补充说明一下)
优化并不都是高深复杂的事情,很多时候认真做好基础的事情就已经能满足大部分需求。
看起来外在表现一样,可能对应的内在在代码不一样,优化在于用心。
overdraw对比 | gpu对比 |
---|---|
![]() ![]() |
![]() ![]() |
曾经有个合作项目用node.js开发的,大BOSS想软件给到对方时能不能不提供源码。
想到V8是有code cache的,如果把源码转成code cache不就满足需求了
因为是针对用户部署,版本兼容的问题可以先忽略
查了下node.js文档还真有相关接口暴露,经过一下午的折腾,搞出一个小工具
产生和使用code cache的接口很简单,折腾在require拦截,外加踩了个lazy compile的坑
不废话了,直接上代码
第一次尝试 GitHub Actions,很赞👍
[当前仓库部署用的workflow]
1 | name: Deploy |