小墨是前端」专注分享前端技术,推荐优秀的开源项目,展示Github、Gitee上的创意作品,带你深入前端底层,一起成长。
大家好,向大家介绍一个轻量且功能强大的Javascript粒子动画库——Proton。让你轻松创造出各种炫酷的粒子效果。
作为Proton一款易于上手的粒子动画库,只需十几行代码,就可以创造出令人惊叹的粒子动画效果。并且支持多种前端框架,不管是React、Vue、Angular还是Pixi.js、Phaser等框架,Proton都直接使用。不仅支持众多框架,而且还有极高的渲染效率,哪怕渲染数以万计的粒子,也能保持流畅的动画效果。重要的是它还模拟了各种物理属性,比如重力和布朗运动,让粒子动画更加逼真。
使用npm方式安装:
npm install proton-engine --save
在HTML中直接引入:
<script type="text/javascript" src="js/proton.min.js"></script>
html部分:
<!-- 定义canvas元素 -->
<canvas id="particleCanvas" width="800" height="600"></canvas>
js部分:
// 创建Proton实例
const proton = new Proton();
// 实例化发射器
const emitter = new Proton.Emitter();
emitter.damping = 0.008;
emitter.rate = new Proton.Rate(new Proton.Span(4, 10), new Proton.Span(0.02, 0.05));
// 初始化粒子属性
emitter.addInitialize(new Proton.Mass(1));
emitter.addInitialize(new Proton.Radius(1, 12));
emitter.addInitialize(new Proton.Life(3, 5));
emitter.addInitialize(new Proton.Velocity(new Proton.Span(1.5), new Proton.Span(0, 360), 'polar'));
// 设置粒子行为
emitter.addBehaviour(new Proton.RandomDrift(10, 10, 0.05));
emitter.addBehaviour(new Proton.Color('#ffffff', '#ff0000'));
// 设置发射器位置
emitter.p.x = window.innerWidth / 2;
emitter.p.y = window.innerHeight / 2;
emitter.emit();
// 选择一个渲染器
const canvas = document.getElementById('particleCanvas');
const renderer = new Proton.CanvasRenderer(canvas);
renderer.onProtonUpdate = function() {
context.fillStyle = "rgba(0, 0, 0, 0.1)";
context.fillRect(0, 0, canvas.width, canvas.height);
};
// 将渲染器添加到Proton实例
proton.addRenderer(renderer);
// 更新粒子状态
function tick() {
requestAnimationFrame(tick);
proton.update();
}
tick();
https://github.com/drawcall/Proton
作为一款JavaScript粒子动画库,Proton不仅仅易于上手,功能丰富,快速创建各种炫酷的粒子动画效果。适用于各种前端框架和应用场景,更重要的是渲染效率极高,并且支持物理模拟。如果你正在找粒子动画库,推荐你可以尝试一下。
创作不易,欢迎大家关注、点赞、收藏、转发!我会继续分享高质量的干货和前沿的技术,给大家提供更多有价值的内容!
当一个Flink 实时任务、Web 服务或者 Api 接口延迟较高或者经常发生 OOM 时,你需要考虑:如何优化代码,降低 Cpu 和内存的开销。通过绘制火焰图,能够基于可视化的界面,直观地定位到哪一段代码引起了性能瓶颈,需要进行优化。
本文介绍了 async-profiler 火焰图绘制工具的下载安装方法、主要参数的使用说明。本文通过了 2 个示例,分别介绍了如何定位 Cpu 性能瓶颈的代码以及如何定位内存性能瓶颈的代码。文中涉及的代码,可以在文末的 代码附录
日常工作中经常会遇到系统应用出现full gc、cpu内存飙高等场景,如果想要快速解决这些线上问题就需要首先能快速定位,最好能定位到具体代码。本文旨在通过一款线上监控诊断产品,阿里巴巴的arthas(阿尔萨斯)内部集成的火焰图工具async-profiler结合自身系统应用中的使用,方便我们能够快速定位线上问题。
本文目录如下:
一、背景
二、工具选型及实践
三、修复上线
四、使用步骤
一、背景
1、在订单域任务系统,master机器和slaver机器频繁出现full gc和cpu间歇性升高的现象,young GC也出现平均1分钟10次。master机器线程也增加到1500左右。系统应用采用的是CMS垃圾回收器,4c8g分配堆内存大小4G。但是堆内存和非堆内存正常。
2、随着时间推移,full gc从每隔20分钟一次变成 每个5分钟或者3分钟一次,stop the world。FULL GC 和 Young GC 不正常,如下图。
堆内存和非堆内存正常。
CPU一分钟一次达到高点,部分机器达到75%以上。线程,在上午超过1400,重启后正常。
系统稳定性受到挑战,需要尽快排查出问题所在。
二、工具选型及实践
市面上很多排查工具,怎样才能快速排查出问题。结合arthas、async-profiler火焰图(采样)、visualVM(跨时间dump文件对比)、gceasy这四种工具,都进行实战对比。
下图分析master机器是反序列化商品域渠道配置接口对象耗CPU
下图也发现反查快手任务也会引起高cpu。分析这台机器既是master,又是slaver。slaver会执行反查快手任务。
【2.2 visualVM分析】
dump两个文件,跨时一天,进行对比。
启动visualVM
cd /Library/Java/JavaVirtualMachines/jdk1.8.0_191.jdk/Contents/Home/bin
jvisualvm
/Library/Java/JavaVirtualMachines/jdk1.8.0_191.jdk/Contents/Home/lib/visualvm目录下 visualvm.conf修改内存空间大小。
对比发现,最大是查询ES的数据,反序列化对象并不是最大,但是也能在dump文件中查找到。因为arthas查的是CPU和线程,dump文件是内存,所以不完全一致。
一次500个
【2.3 gceasy分析】
修改jvm,-XX:+PrintGCDetails -XX:+PrintGCTimeStamps -Xloggc:./gc.log,打印gc日志。
通过gceasy.io线上对比工具,没有内存泄露,但是也未发现gc产生的具体原因。
【2.4 async-profiler火焰图】
从上图,看到主要分为两大部分,左边的反查快手任务(因master机器,既是master,也是slaver),右边是扫描es里面代扣任务的反序列化对象占用很大比重。和arthas分析的一样。
下载内存火焰图,可以看到左边也是快手反查,右边则是查询ES(包含反序列化对象)。和dump文件比较能核对上。
三、修复上线
根据上述四种工具的排查过程,可以明显看到使用arthas集成的async-profiler更直观和方便,便于定位问题。在修改对应的代码后,上线进行后续观察系统稳定正常。
四、使用步骤
async-profiler 火焰图
1、申请堡垒机(root权限)
2、登陆以后下载 最新的jar包 wget https://alibaba.github.io/arthas/arthas-boot.jar
3、安装(admin权限 cd)java -jar arthas-boot.jar
4、查看cpu耗时、dashboard(q命令表示退出)、thread
5、profiler start 启动火焰图工具进行采样
https://jlynet.github.io/2021/08/07/Java%E8%AF%8A%E6%96%AD%E5%B7%A5%E5%85%B7Arthas%E9%AB%98%E7%BA%A7%E5%91%BD%E4%BB%A4%E6%95%99%E7%A8%8B/Arthasprofiler%E5%91%BD%E4%BB%A4/
profiler getSamples
profiler status
profiler stop --format html 生成火焰图
6、下载火焰图
7、多种维度:
lock 锁对象\alloc 内存\默认cpu
8、效果
CPU\内存等不同的火焰图
9、其他
还可以反编译jar包的代码
统计方法调用时间
以上。本文旨在通过具体的场景运用和实操,介绍arthas火焰图如何在系统中快速定位问题,欢迎感兴趣的同事一起学习探讨。
作者:交易研发 郭森
来源:微信公众号:京东零售技术
出处:https://mp.weixin.qq.com/s/FIQrRIxD5-U5_xf0ra_Uzw
*请认真填写需求信息,我们会在24小时内与您取得联系。