当前位置: 首页 > 工具软件 > OpenWebGlobe > 使用案例 >

OpenWebGlobe源码剖析2:Closure Library

凤伟泽
2023-12-01

首先说明一下,我对这个库并不了解,只是因为OpenWebGlobe用到了这个库作为他的框架,所以才有所了解,因此了解的深度有限,只是基于足够在OpenWebGlobe中使用和扩展一些自定义的文件,并且压缩打包js脚本,这些比较基础的功能。

       上网了解了一下这个Closure,简单说就是Google Javascript SDK,提供了一个js的framework,方便用户的扩展,closure 使用library来提升开发效率,使用侵入性极强的 compiler 来去除无用代码,保证执行效率缩减 js 的大小,看来一下这个库的一些博文,觉得写的还是很有收获的,特别是这一篇:http://www.cnblogs.com/justinw/archive/2009/12/07/1618500.html,当然我主要是看API,这里简单说一下在OWG里面用到的地方。

       第一,我觉得最有意义的是closure提供了工作空间这个概念,以往JS都是全局形式的,而通过goog.provide和goog.require,从而实现了这个功能,为大规模的JS框架提供了很大的便利。如上所述,provide类似export,而require类似import

       第二,提供了closure compiler工具,可以实现高效的混淆打包,提高js的效率,而且非常方便,具有语法纠错的功能,将你的代码隐患提前暴露,也免去了你自己进行打包的工作量。

       第三,对第三方的插件支持的不够好,当然我觉得closure不推荐大家使用第三方的插件,比如作为初学,我开始不知道closure原来也有xml parser的方法,所以引入了jquery,源码形式下都还好,能够运行,但混淆后对jquery的关键字进行了压缩更改,导致jquery无法使用,后来才发现,需要用goog.getObjectByName()这个方式,才能保证不被替换,从而能够兼容,不过还是稍微有点绕。

       第四,有一个需要注意的就是你在增加自己的类时,需要将依赖关系整理清晰,避免循环依赖的可能性,这在js里面是无法通过语法解决的,而且由于prototype是浅拷贝,所以在涉及到类的继承时,对于Object的处理也比较麻烦,closure是采用inherits方法来实现继承的,这个是有区分的,所以根据你的设计需要选择不同的方法来实现。

       第五,用到的goog.exportSymbol和goog.exportProperty算是指定接口可以在外部调用的函数和属性,不然因为打包压缩会讲命名替换,所以如果你的接口打算对外开发就需要指定,如果只是内部使用则不需要声明。

      其他,goog.events.listen,顾名思义就是一些事件监听封装,比如窗口变化,鼠标键盘等事件,如果需要则可以使用,其他的

什么isnull之类的我也没有查。

       总之在OWG中,使用了closure的基础功能,同时采用compiler压缩脚本,这样的一个框架,至此,前期的准备工作结束,下面,开始代码部分,下一节主要讲OWG的相机这块,因为比较复杂,所以先从坐标系开始讲,主要涉及大地坐标系,NED坐标系和body coordinate system这些相关概念,方便后续相机的阐述。

转载于:https://www.cnblogs.com/luguowei/p/4703031.html

 类似资料: