`
chaoslawful
  • 浏览: 198546 次
  • 性别: Icon_minigender_1
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

google closure js压缩器编译为本地码可执行文件的尝试

 
阅读更多

最近 @定球呀球 抱怨说 google closure 作为 java 命令行应用启动速度暴慢,什么都不做运行一次也要 1s 多,有大量 js 文件要处理时为每个文件都运行一次是要死人的。想起 gcj 作为 gcc 的 java 前端是可以将 java 代码编译为本地码执行的,于是好奇地尝试了一把,过程如下,较为曲折……

 

  1. 首先要 patch google closure 源码。由于 gcj 及其整合的 gnu classpath 基础类库实现目前只支持 java 5 的部分特征,所以先要把源码中不支持的部分绕过去。补丁见附件,下载至 google closure 源码根目录并 patch < closure-gcj.patch 即可。主要的修改点为:去除命令行解析逻辑中 gcj 不支持的 annotation 语法;从 OpenJDK 中补充了 gnu classpath 未实现的正则转义方法 Pattern.quote();去除了 gnu classpath 未实现的 Math.copySign() 方法
  2. 原来的命令行解析逻辑不能用了,只好增加一个简单的命令行启动入口类,见附件中的 NativeRunner.java,将其放置到 google closure 源码目录中的 src/com/google/javascript/jscomp/ 子目录中
  3. 在 google closure 源码目录中执行 ant 重新编译打包,拿到 build/ 子目录中的结果 compiler.jar
  4. 用如下 gcj 命令行将 compiler.jar 转换为本地码可执行文件:
gcj -findirect-dispatch --main=com.google.javascript.jscomp.NativeRunner -o closure compiler.jar -Wl,-Bsymbolic

 

最后编译出的可执行文件约 33MB 大,但测试后大失所望,和直接用 java -jar 启动速度相差无几,运行速度还慢了几乎 50%,估计是因为 gcj 还利用不了 gcc 4.6 新的 SSA 优化链的缘故吧,不过本来对 java 来说,稍有利用动态特性的地方 AOT 编译器就要大费周张地搞复杂的机制来兼容,很难赶上 JIT 编译生成代码的紧凑程度了。

 

话说回来,若你的 java 程序基本上是 java 1.4 兼容的,且没有使用太多动态特性,想在 C/C++ 程序中复用这些代码,那么 gcj 编译应该是最理想的解决方案了吧,呵呵。

 

0
11
分享到:
评论

相关推荐

    JS压缩工具

    - **UglifyJS**:一款强大的JavaScript压缩器,支持ES6语法,提供了更多自定义选项。 - **Google Closure Compiler**:谷歌提供的压缩工具,可以处理复杂的JavaScript代码,提供高级优化功能。 - **Terser**:源自...

    js css文件压缩工具

    常用的JavaScript压缩工具有UglifyJS、Terser和Google Closure Compiler等。这些工具不仅能压缩代码,还能进行死代码检测和消除,进一步优化文件大小。 二、CSS(css)压缩 CSS压缩与JavaScript压缩类似,也是去除...

    JS CSS压缩工具

    常见的JS压缩工具有 UglifyJS、Terser 和 Google 的 Closure Compiler。这些工具不仅能压缩代码,还能在一定程度上优化代码结构,提高执行效率。 UglifyJS 是一个广泛使用的 JavaScript 压缩工具,支持 ES6 及以下...

    js和css批量压缩工具

    常见的 JS 压缩工具有 Google 的 Closure Compiler、UglifyJS 和 Terser。这些工具都提供了命令行接口,可以方便地集成到构建流程中,实现批量处理。 ### CSS 压缩 CSS 压缩与 JS 类似,主要通过删除空格、换行和...

    closure:用于Google Closure Tools开发的项目结构工作流程和Grunt构建

    在JavaScript的世界里,Closure Tools是由Google提供的一套强大的开发工具,包括了编译器、库、测试框架等,旨在帮助开发者编写高效、可维护的代码。这个名为"closure:用于Google Closure Tools开发的项目结构工作...

    closure-library:Google Closure 库的 Shim 存储库

    Closure Library是Google开发的一个开源JavaScript库,它为构建大型、高性能的Web应用程序提供了强大的工具集。这个库以其严谨的编程风格、高效的代码优化和广泛的功能闻名,尤其适合那些对性能和可维护性有高要求的...

    用yuicompressor和Ant压缩Ext的CSS文件

    yuicompressor是一款由Yahoo开发的JavaScript和CSS压缩工具,它能够删除代码中的空格、注释以及简化CSS选择器,从而减小文件大小,提高网页加载速度。而Ant是Apache组织开发的一款Java构建工具,它通过XML配置文件来...

    Google JavaScript 编码规范指南

    - **代码优化**:利用现代JavaScript编译工具,如Babel、Closure Compiler等,进行代码压缩和优化,提升运行效率。 #### 五、结论 Google JavaScript编码规范指南不仅是Google内部项目的技术标准,也是广大...

    webrtc depot_tools 工具(windows)

    6. **Closure Compiler**:Google的JavaScript压缩工具,用于优化和压缩JavaScript代码。 7. **PDFium**:一个开源PDF阅读器引擎,可用于查看PDF文件。 8. **v8**:Google的JavaScript引擎,用于执行JavaScript...

    googleajax

    GWT的亮点在于其编译器,它能将Java代码转换为高效的浏览器可执行代码,减少了手动优化JavaScript的需要。 ### 3. Google AJAX APIs Google还提供了一系列基于Ajax的Web服务API,如Google Maps API、Google ...

    JAVA上百实例源码以及开源项目源代码

    Java数据压缩与传输实例 1个目标文件 摘要:Java源码,文件操作,数据压缩,文件传输 Java数据压缩与传输实例,可以学习一下实例化套按字、得到文件输入流、压缩输入流、文件输出流、实例化缓冲区、写入数据到文件、...

    前端开源库-ngmin

    4. **配合使用其他工具**:通常,ngmin会与UglifyJS或Google Closure Compiler等压缩工具结合使用,先用ngmin处理代码,然后再进行压缩,以确保代码的完整性和效率。 ### ngmin与AngularJS的最佳实践 1. **保持...

    java开源包1

    利用Google:maps JSP标签库就能够在你的Web站点上实现GoogleMaps的所有功能而且不需要javascript或AJAX编程。它还能够与JSTL相结合生成数据库驱动的动态Maps。 OAuth 实现框架 Agorava Agorava 是一个实现了 OAuth ...

    java开源包11

    利用Google:maps JSP标签库就能够在你的Web站点上实现GoogleMaps的所有功能而且不需要javascript或AJAX编程。它还能够与JSTL相结合生成数据库驱动的动态Maps。 OAuth 实现框架 Agorava Agorava 是一个实现了 OAuth ...

    java开源包2

    利用Google:maps JSP标签库就能够在你的Web站点上实现GoogleMaps的所有功能而且不需要javascript或AJAX编程。它还能够与JSTL相结合生成数据库驱动的动态Maps。 OAuth 实现框架 Agorava Agorava 是一个实现了 OAuth ...

    java开源包3

    利用Google:maps JSP标签库就能够在你的Web站点上实现GoogleMaps的所有功能而且不需要javascript或AJAX编程。它还能够与JSTL相结合生成数据库驱动的动态Maps。 OAuth 实现框架 Agorava Agorava 是一个实现了 OAuth ...

    java开源包6

    利用Google:maps JSP标签库就能够在你的Web站点上实现GoogleMaps的所有功能而且不需要javascript或AJAX编程。它还能够与JSTL相结合生成数据库驱动的动态Maps。 OAuth 实现框架 Agorava Agorava 是一个实现了 OAuth ...

    java开源包5

    利用Google:maps JSP标签库就能够在你的Web站点上实现GoogleMaps的所有功能而且不需要javascript或AJAX编程。它还能够与JSTL相结合生成数据库驱动的动态Maps。 OAuth 实现框架 Agorava Agorava 是一个实现了 OAuth ...

    java开源包10

    利用Google:maps JSP标签库就能够在你的Web站点上实现GoogleMaps的所有功能而且不需要javascript或AJAX编程。它还能够与JSTL相结合生成数据库驱动的动态Maps。 OAuth 实现框架 Agorava Agorava 是一个实现了 OAuth ...

    java开源包4

    利用Google:maps JSP标签库就能够在你的Web站点上实现GoogleMaps的所有功能而且不需要javascript或AJAX编程。它还能够与JSTL相结合生成数据库驱动的动态Maps。 OAuth 实现框架 Agorava Agorava 是一个实现了 OAuth ...

Global site tag (gtag.js) - Google Analytics