`;
}
initPriceChart() {
const canvas = document.getElementById(‘priceChart’);
this.components.set(‘priceChart’, new RealTimeChart(canvas, {
timeframe: ‘1m’,
indicators: [‘SMA20’, ‘SMA50’, ‘RSI’]
}));
}
initOrderBook() {
const container = document.getElementById(‘orderBook’);
this.components.set(‘orderBook’, new OrderBook(container, {
depth: 20,
updateFrequency: 1000
}));
}
setupDataFlow() {
// 订阅实时数据
this.websocketManager.subscribe(‘price’, (data) => {
this.dataManager.addPriceData(data);
this.updatePriceChart(data);
});
this.websocketManager.subscribe(‘orderbook’, (data) => {
this.updateOrderBook(data);
});
this.websocketManager.subscribe(‘trades’, (data) => {
this.updateRecentTrades(data);
});
}
updatePriceChart(data) {
const chart = this.components.get(‘priceChart’);
chart.updateData(data);
// 更新技术指标
this.updateTechnicalIndicators(data);
}
updateOrderBook(data) {
const orderBook = this.components.get(‘orderBook’);
orderBook.update(data);
}
startRenderLoop() {
const render = () => {
this.components.forEach(component => {
if (typeof component.render === ‘function’) {
component.render();
}
});
this.updatePerformanceStats();
requestAnimationFrame(render);
};
render();
}
updatePerformanceStats() {
const stats = {
fps: this.calculateFPS(),
memory: performance.memory ? performance.memory.usedJSHeapSize : 0,
dataPoints: this.dataManager.getDataCount()
};
this.updateStatusDisplay(stats);
}
calculateFPS() {
const now = performance.now();
if (!this.lastFrameTime) {
this.lastFrameTime = now;
this.frameCount = 0;
return 0;
}
this.frameCount++;
if (now >= this.lastFrameTime + 1000) {
this.fps = Math.round((this.frameCount * 1000) / (now – this.lastFrameTime));
this.frameCount = 0;
this.lastFrameTime = now;
}
return this.fps || 0;
}
}
// 启动仪表盘
document.addEventListener(‘DOMContentLoaded’, () => {
const dashboard = new TradingDashboard(‘dashboardContainer’);
// 模拟数据流(开发环境)
if (process.env.NODE_ENV === ‘development’) {
dashboard.startMockDataStream();
}
});
淘吗网 javascript JavaScript高级数据可视化:构建实时股票交易仪表盘 | JS实战教程 https://www.taomawang.com/web/javascript/1105.html