Created by shine on 2018/5/10.
总结:指标不治本。预览的同时准备导出图片,这个实现很难受,还是要抽空思考一下。todo@shine。
这边主要处理一件事情:高并发,开多个线程去请求图片,内存增大。
解决思路:
1.phantom资源需要排队等待,与其开多个线程到那边去等,不如在这边就排队。开的线程数等于phantom服务器数(一般是两个),就足够用了。
2.之前导出 prepare时候 把国际化js放到exportEvent里面去,占用内存,现在是只把国际化类型放到event里存着,真正请求图片时再获取js注入到options里面。
3.之前导出 prepare时候 生成options和dirty属性,这两个属性是设计器图表需要的,export不需要。
4.生成的图片 存到磁盘。
5.有空闲phantom的时候 找到第一个session有效的对头event。
6.杀手锏:因为队列里面的event.chartGlyph,如果排队很多,还是很占内存,这边设置一个允许最大排队数1000,超过1000,移除对头event,添加最新的到对尾。
6ps.1000不会出问题原因:真正导出用图片的时候,如果没有图片,会去再次向phantomjs请求图片的。
图表导出event排队等待导出。
本来以为判断一下有可用的phantom服务器,就开一个线程去请求图片就可以了。
但是发现 有可用的phantom服务器,到phantom服务器被占用,中间如果不断有event加入到队列,会开多个线程,到PhantomServerFactory那边去等待资源。
所以还是根据phantom服务个数,固定开几个线程(默认是两个),去请求图片。