整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:

打造炫酷网页:手把手教你用Proton制作粒子动画效果!

小墨是前端」专注分享前端技术,推荐优秀的开源项目,展示Github、Gitee上的创意作品,带你深入前端底层,一起成长。

大家好,向大家介绍一个轻量且功能强大的Javascript粒子动画库——Proton。让你轻松创造出各种炫酷的粒子效果。

一.简介

作为Proton一款易于上手的粒子动画库,只需十几行代码,就可以创造出令人惊叹的粒子动画效果。并且支持多种前端框架,不管是React、Vue、Angular还是Pixi.js、Phaser等框架,Proton都直接使用。不仅支持众多框架,而且还有极高的渲染效率,哪怕渲染数以万计的粒子,也能保持流畅的动画效果。重要的是它还模拟了各种物理属性,比如重力和布朗运动,让粒子动画更加逼真。

二.功能特点

  1. 简单直观的API,只需十余行代码,即可快速实现生动的粒子动画效果。
  2. 有丰富的视觉效果,比如火焰、烟花、子弹、爆炸。
  3. 具备高效的渲染能力,轻松处理成千上万的粒子动态,保证了动画的流畅性和用户的交互体验。
  4. 模拟各种物理现象,如重力、布朗运动等,让粒子效果更贴近真实世界。

三.使用步骤

  1. 安装:

使用npm方式安装:

npm install proton-engine --save

在HTML中直接引入:

<script type="text/javascript" src="js/proton.min.js"></script>
  1. 使用:

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这四种工具,都进行实战对比。

【2.1arthas分析】

下图分析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