360°全景影像优化建议
传送门 ☞ 轮子的专栏 ☞ 转载请注明 ☞ http://blog.csdn.net/leverage_1229
1FlexViewer
1.1index.mxml
它是整个Flex Viewer框架的入口,Flash Player运行时会调用该文件所对应的flash文件来启动整个系统。Index首页加载缓慢,该页面包含大量动态组件,在其加载过程中,这些组件都要经历构建、属性处理、测量、布置和绘制等过程。
建议:
能否提取其中相对静态或变化频率较低的组件直接使用读取xml或文本配置文件方式进行加载。也就是我们常说的CMS模式。
1.2QuanJingMapComponent.mxml
代码片段
_TextureStrings = new Array(new Vector.<String>,new Vector.<String>); // 一级切片 for(var i:int=0;i<8;i++) { var str:String = url + "_"+ i.toString(); _TextureStrings[0].push(str); } // 二级切片 for(i = 0;i<32;i++) { var str2:String = url + "_"+ i.toString(); _TextureStrings[1].push(str2); } // 将来有三级切片,那么代码会像下面这样 for(i = 0;i<128;i++) { var str3:String = url + "_"+ i.toString(); _TextureStrings[2].push(str3); }
目前程序中使用的切片等级有两级,我们以一张全景图像的切片为例,名为TextureStrings的二维数组在存储数据时,会将该图像一级切片的八张图片的名称放置于二维数组的第一行(该行8列),将该图像二级切片的名称放置于二维数组的第二行(该行32列)。第二行前面的8列与第一行8列的数据完全相同。如果扩展到三级切片,那么二维数组的第三行(该行128列)与第二行32列的数据也将是重复的。 TextureStrings这个二维数组用于存放各级切片的图片名称,目前这种做法数据冗余较高,且在onChangeImage函数和onOpenQuanJing函数都会执行。
建议:
(1)能否使用API提供的静态方法,对Array数据进行直接拷贝操作代替当前的For循环。
(2)增加切片级别标示,根据此标示动态使用TextureStrings存储以减少For循环次数。
(3)点击全景影像的交互点(方向箭头)实现全景影像与底层地图的联动,目前延迟时间较长,能否在Load()☞onLoadImage()☞onLoadComp()☞Load()这一基于Complete消息驱动的循环流程中增加线程,进行线程池化管理,以提升全景图像切片的绘制速率。
2WebService
代码片段
string strSQL = @"SELECT SLICE_ID ,SLICE_NAME ,PIC_ID ,ALPHA_MAX ,ALPHA_MIN ,BETA_MAX ,BETA_MIN ,Z_MAX ,Z_MIN ,SLICE_CONTENT FROM PIC_SLICE_" + strTableKey + " where SLICE_ID = '" + strID + "'";… // 获取影像源数据 imageData = (byte[])dt.Rows[0]["SLICE_CONTENT"]; Response.ContentType = "application/binary;"; // 将影像源数据写入到客户端FlexViewer Response.BinaryWrite(imageData); …
当前WebServices接收客户端请求传递而来的tableKey和sliceId,然后根据这两个参数检索Oracle数据库中全景影像切片PIC_SLICE_1(PIC_SLICE_2、PIC_SLICE_3)表中全部字段,最终将SLICE_CONTENT字段对应的Blob类型的影像数据以二进制的方式返回给客户端实现绘制。
建议:
(1)返回给客户端的数据只是SLICE_CONTENT字段对应的数据,所以没有必要检索切片表中所有字段。
(2)能否为此端增设缓存磁盘系统。采用LRU算法,以减少该构件与数据库的交互次数。
(3)WebServices与Flex Viewer使用Http协议连接,有没有考虑到连接超时、请求超时等连接设置因素所导致的客户端页面假死现象。
(4)能否使用遵循.net平台规范的rest服务框架为底层来构建此WebService。因为在传递大数据或海量数据时,过于基础的技术所构建的服务往往不能有效支撑特殊场景业务数据。
3数据库
当数据量大时,引入ASM(Automatic Storage Management,自动存储服务)机制管理全景影像数据和POI数据。