OpenWebGlobe源码剖析2:Closure Library

首先说明一下,我对这个库并不了解,只是因为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这些相关概念,方便后续相机的阐述。

时间: 2024-12-14 02:54:25

OpenWebGlobe源码剖析2:Closure Library的相关文章

OpenWebGlobe源码剖析1:环境&编译

OpenWebGlobe是一个非常不错的,通过WebGL技术实现的Web三维球,无需插件跨浏览器.里面有很多值得前端开发和GIS开发者借鉴的地方,主要是GIS和Web技术层面,个人打算最近在时间允许的情况下,和各位分享一下我所了解的这款开源工程,内容很多,比如里面的相机矩阵,网格剖分,纹理以及Shader,以及地形还有模型的渲染,还有billboard这类的效果,所以打算分为几个系列来详细介绍,当然也因为自己的时间精力有限. 首先呢,作为JS的开源工程,OpenWebGlobe的搭建环境相对有些

OpenWebGlobe源码剖析3:坐标系

OpenWebGlobe的相机主要在CameraNode和globenavigation这两个文件中,前者主要负责裁剪矩阵,project matrix,而后者主要是Model Matrix,虽然这两个脚本的代码不多,但要理解里面的矩阵计算,还得先从坐标系(Coordinate System)开始,通过坐标系,一步步的将我们的地理球(椭球体)转换成相机,程序可识别的虚拟地球. Geodetic Coordinate System 学过地理信息系统的应该不难理解,但我并不是地信专业的,所以说的并不

DICOM医学图像处理:storescp.exe与storescu.exe源码剖析,学习C-STORE请求

背景: 上一篇专栏博文中针对PACS终端(或设备终端,如CT设备)与RIS系统之间worklist查询进行了介绍,并着重对比分析了DICOM3.0中各部分对DICOM网络通讯服务的定义.此次通过结合早些时间的博文DICOM医学图像处理:基于DCMTK工具包学习和分析worklist,对DCMTK开源库中提供的storescp.exe和storescu.exe工具的源码进行剖析,从底层深入了解C-STORE服务的触发及响应. 分析思路: storescp.exe和storescu.exe分别充当着

《STL源码剖析》---stl_iterator.h阅读笔记

STL设计的中心思想是将容器(container)和算法(algorithm)分开,迭代器是容器(container)和算法(algorithm)之间的桥梁. 迭代器可以如下定义:提供一种方法,能够依序寻访某个容器内的所有元素,而又无需暴露该容器的内部表达方式. 在阅读代码之前,要先了解一个新概念:Traits编程技法 template <class T> struct MyIter { typedef T value_type //内嵌型别声明 T *ptr; MyIter(T *p = 0

GDAL源码剖析(一)(转载)

GDAL源码剖析(一) GDAL 前言:一直在使用和研究GDAL的相关东西,发现网上对GDAL的内容倒是不少,但是很少有系统的介绍说明,以及内部的一些结构说明,基于这些原因,将本人的一些粗浅的理解放在此处,形成一个系列,暂时名为<GDAL源码剖析>(名称有点大言不惭,欢迎大家口水吐之,板砖拍之),供大家交流参考,有什么错误之处,望大家不吝指正,本系列对于GDAL的使用均是在Windows平台下,对于Linux平台下的不在此系列讨论范围之内.此外,转载本博客内容,请注明出处,强烈鄙视转载后不注明

strlen源码剖析(可查看glibc和VC的CRT源代码)

学习高效编程的有效途径之一就是阅读高手写的源代码,CRT(C/C++ Runtime Library)作为底层的函数库,实现必然高效.恰好手中就有glibc和VC的CRT源代码,于是挑了一个相对简单的函数strlen研究了一下,并对各种实现作了简单的效率测试. strlen的函数原形如下: size_t strlen(const char *str); strlen返回str中字符的个数,其中str为一个以'\0'结尾的字符串(a null-terminated string). 1. 简单实现

通读《STL源码剖析》之后的一点读书笔记

[QQ群: 189191838,对算法和C++感兴趣可以进来] 直接逼入正题. Standard Template Library简称STL.STL可分为容器(containers).迭代器(iterators).空间配置器(allocator).配接器(adaptors).算法(algorithms).仿函数(functors)六个部分. 迭代器和泛型编程的思想在这里几乎用到了极致.模板或者泛型编程其实就是算法实现时不指定具体类型,而由调用的时候指定类型,进行特化.在STL中,迭代器保证了ST

Appuim源码剖析(Bootstrap)

Appuim源码剖析(Bootstrap) SkySeraph Jan. 26th 2017 Email:[email protected] 更多精彩请直接访问SkySeraph个人站点:www.skyseraph.com About Appuim Appium 是一个自动化测试开源工具,支持 iOS 平台和 Android 平台上的原生应用,web 应用和混合应用. 这里有很关键一点,跨平台.更多了解Appuim多平台支持相关信息,参考官方platform-support 相关概念 C/S 架

Python源码剖析笔记6-函数机制

Python的函数机制是很重要的部分,很多时候用python写脚本,就是几个函数简单解决问题,不需要像java那样必须弄个class什么的. 本文简书地址:http://www.jianshu.com/p/d00108741a18 1 函数对象PyFunctionObject PyFunctionObject对象的定义如下: typedef struct { PyObject_HEAD PyObject *func_code; /* A code object */ PyObject *func