小墨是前端」專注分享前端技術,推薦優秀的開源項目,展示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小時內與您取得聯系。