记TradingView为代表的图表组件优化过程 - xw332/xw332.github.io GitHub Wiki
目前进度:
一期目标【100%】:分离图表代码和业务代码
二期目标【50%】:支持更多其他图表组件的适配工作,能适应app和小程序等非webview的原生环境
优化原则:
1、抽象组件功能,分离业务代码,分离父级方法
2、适配不同环境的同功能组件
优化思路:
1、分离业务流程代码,包括接口请求和数据处理
2、分离组件参数配置,包括初始化参数和主题配色
3、使用订阅发布模式,通知父级触发事件,避免父级向下传递无关组件逻辑的代码
4、使用适配器模式,抽象图表的组件功能,兼容各种api不同的图表和运行环境
优化流程:
tradingview的源码可以在官网提交申请表单,获得免费的github项目访问授权
源码主要有charting_library和datafeeds两个核心文件夹
charting_library是图表相关代码,没有提供源文件,可以直接引用charting_library.min.js
datafeeds是接口数据相关代码,提供了源文件有src、lib、dist三个核心文件夹,放到具体项目里开发的话,可以用lib里的文件,引用udf-compatible-datafeed.js
这里主要拆解datafeeds模块的修改:
requester.js是负责发起http接口,请求数据
history-provider.js是负责调用requester,请求历史数据
data-pulse-provider.js是负责动态获取实时数据
由于官方的代码里写死里请求接口的流程和路径名,所以requester需要整体重写,达到拦截并替换不同类型接口,或用ws代替http请求等需求
history-provider的history请求,需要增加symbolInfo的参数
data-pulse-provider需要去掉定时器的轮询请求方式
其他文件没有用到的话,可以保留源代码
其他:
1.15版是官方的最新稳定版,提升性能,修复bug
未发布稳定版的1.16版,支持移动端长按出十字星,此时滑动十字星,图表不动,可以达到查看每日指标数据的目的