Submit Search
Upload
EMSCRIPTEN: 將應用快速 PORT 到 JAVASCRIPT 上的神物
•
13 likes
•
15,585 views
Wei-Ning Huang
Follow
Code & Beer #10 https://code-beer.hackpad.com/WtAf9qA1qOx
Read less
Read more
Report
Share
Report
Share
1 of 16
Download now
Download to read offline
Recommended
IKVM.NET 深入敵營的 Java
IKVM.NET 深入敵營的 Java
建興 王
Java bytecode
Java bytecode
申 艳超
Jvm独家剖析
Jvm独家剖析
li yan
網路技術心得分享
網路技術心得分享
Mux Baxer
Multi threading design pattern
Multi threading design pattern
Yan Wang
Node.js中间件 connect模块深入浅出
Node.js中间件 connect模块深入浅出
Eric Xiao
API Mocking
API Mocking
ChinMingKuo1
Java Basic(1)
Java Basic(1)
Brad Chao
Recommended
IKVM.NET 深入敵營的 Java
IKVM.NET 深入敵營的 Java
建興 王
Java bytecode
Java bytecode
申 艳超
Jvm独家剖析
Jvm独家剖析
li yan
網路技術心得分享
網路技術心得分享
Mux Baxer
Multi threading design pattern
Multi threading design pattern
Yan Wang
Node.js中间件 connect模块深入浅出
Node.js中间件 connect模块深入浅出
Eric Xiao
API Mocking
API Mocking
ChinMingKuo1
Java Basic(1)
Java Basic(1)
Brad Chao
ProjectTox: Free as in freedom Skype replacement
ProjectTox: Free as in freedom Skype replacement
Wei-Ning Huang
Chromium OS Introduction
Chromium OS Introduction
Wei-Ning Huang
Code & Beer Opening
Code & Beer Opening
Wei-Ning Huang
Go Lang Tutorial
Go Lang Tutorial
Wei-Ning Huang
Fund Case Study
Fund Case Study
pattybeeny
Mac OSX - Presentation for NEWLUG - Nov. 2010
Mac OSX - Presentation for NEWLUG - Nov. 2010
NEWLUG
Chromebook
Chromebook
hgascon
Running Code in the Android Stack at ELCE 2013
Running Code in the Android Stack at ELCE 2013
Opersys inc.
Integrity Protection for Embedded Systems
Integrity Protection for Embedded Systems
Samsung Open Source Group
Android 5.0 Lollipop platform change investigation report
Android 5.0 Lollipop platform change investigation report
hidenorly
Introducing Chromebooks
Introducing Chromebooks
Chad Mairn
JavaScript Engine and WebAssembly
JavaScript Engine and WebAssembly
Changhwan Yi
淺談 Groovy 與 AWS 雲端應用開發整合
淺談 Groovy 與 AWS 雲端應用開發整合
Kyle Lin
Google Chrome Operating System
Google Chrome Operating System
vardhaniam
An Introduction to WebAssembly
An Introduction to WebAssembly
Daniel Budden
Introduction To Google Chrome Os
Introduction To Google Chrome Os
Saurabh Jinturkar
那些年、我們還沒學會就已經過時的那些技術
那些年、我們還沒學會就已經過時的那些技術
鍾誠 陳鍾誠
LLVM 總是打開你的心:從電玩模擬器看編譯器應用實例
LLVM 總是打開你的心:從電玩模擬器看編譯器應用實例
National Cheng Kung University
淺談 Geb 網站自動化測試(JCConf 2014)
淺談 Geb 網站自動化測試(JCConf 2014)
Kyle Lin
Google chrome operating system
Google chrome operating system
kondalarao7
LLVM introduction
LLVM introduction
National Cheng Kung University
Compiler for Dummy 一點都不深入的了解 Compiler, Interpreter 和 VM
Compiler for Dummy 一點都不深入的了解 Compiler, Interpreter 和 VM
Li Hsuan Hung
More Related Content
Viewers also liked
ProjectTox: Free as in freedom Skype replacement
ProjectTox: Free as in freedom Skype replacement
Wei-Ning Huang
Chromium OS Introduction
Chromium OS Introduction
Wei-Ning Huang
Code & Beer Opening
Code & Beer Opening
Wei-Ning Huang
Go Lang Tutorial
Go Lang Tutorial
Wei-Ning Huang
Fund Case Study
Fund Case Study
pattybeeny
Mac OSX - Presentation for NEWLUG - Nov. 2010
Mac OSX - Presentation for NEWLUG - Nov. 2010
NEWLUG
Chromebook
Chromebook
hgascon
Running Code in the Android Stack at ELCE 2013
Running Code in the Android Stack at ELCE 2013
Opersys inc.
Integrity Protection for Embedded Systems
Integrity Protection for Embedded Systems
Samsung Open Source Group
Android 5.0 Lollipop platform change investigation report
Android 5.0 Lollipop platform change investigation report
hidenorly
Introducing Chromebooks
Introducing Chromebooks
Chad Mairn
JavaScript Engine and WebAssembly
JavaScript Engine and WebAssembly
Changhwan Yi
淺談 Groovy 與 AWS 雲端應用開發整合
淺談 Groovy 與 AWS 雲端應用開發整合
Kyle Lin
Google Chrome Operating System
Google Chrome Operating System
vardhaniam
An Introduction to WebAssembly
An Introduction to WebAssembly
Daniel Budden
Introduction To Google Chrome Os
Introduction To Google Chrome Os
Saurabh Jinturkar
那些年、我們還沒學會就已經過時的那些技術
那些年、我們還沒學會就已經過時的那些技術
鍾誠 陳鍾誠
LLVM 總是打開你的心:從電玩模擬器看編譯器應用實例
LLVM 總是打開你的心:從電玩模擬器看編譯器應用實例
National Cheng Kung University
淺談 Geb 網站自動化測試(JCConf 2014)
淺談 Geb 網站自動化測試(JCConf 2014)
Kyle Lin
Google chrome operating system
Google chrome operating system
kondalarao7
Viewers also liked
(20)
ProjectTox: Free as in freedom Skype replacement
ProjectTox: Free as in freedom Skype replacement
Chromium OS Introduction
Chromium OS Introduction
Code & Beer Opening
Code & Beer Opening
Go Lang Tutorial
Go Lang Tutorial
Fund Case Study
Fund Case Study
Mac OSX - Presentation for NEWLUG - Nov. 2010
Mac OSX - Presentation for NEWLUG - Nov. 2010
Chromebook
Chromebook
Running Code in the Android Stack at ELCE 2013
Running Code in the Android Stack at ELCE 2013
Integrity Protection for Embedded Systems
Integrity Protection for Embedded Systems
Android 5.0 Lollipop platform change investigation report
Android 5.0 Lollipop platform change investigation report
Introducing Chromebooks
Introducing Chromebooks
JavaScript Engine and WebAssembly
JavaScript Engine and WebAssembly
淺談 Groovy 與 AWS 雲端應用開發整合
淺談 Groovy 與 AWS 雲端應用開發整合
Google Chrome Operating System
Google Chrome Operating System
An Introduction to WebAssembly
An Introduction to WebAssembly
Introduction To Google Chrome Os
Introduction To Google Chrome Os
那些年、我們還沒學會就已經過時的那些技術
那些年、我們還沒學會就已經過時的那些技術
LLVM 總是打開你的心:從電玩模擬器看編譯器應用實例
LLVM 總是打開你的心:從電玩模擬器看編譯器應用實例
淺談 Geb 網站自動化測試(JCConf 2014)
淺談 Geb 網站自動化測試(JCConf 2014)
Google chrome operating system
Google chrome operating system
Similar to EMSCRIPTEN: 將應用快速 PORT 到 JAVASCRIPT 上的神物
LLVM introduction
LLVM introduction
National Cheng Kung University
Compiler for Dummy 一點都不深入的了解 Compiler, Interpreter 和 VM
Compiler for Dummy 一點都不深入的了解 Compiler, Interpreter 和 VM
Li Hsuan Hung
Lamp高性能设计
Lamp高性能设计
锐 张
Avm2虚拟机浅析与as3性能优化
Avm2虚拟机浅析与as3性能优化
Harvey Zhang
从无阻塞并行脚本加载(Lab.js)到浏览器消息模型
从无阻塞并行脚本加载(Lab.js)到浏览器消息模型
Jackson Tian
Proxmox 5.0
Proxmox 5.0
Chris Hsiang
使用NodeJS构建静态资源管理系统
使用NodeJS构建静态资源管理系统
Frank Xu
从无阻塞并行脚本加载(Lab.js)到浏览器消息模型
从无阻塞并行脚本加载(Lab.js)到浏览器消息模型
裕波 周
高性能的Java代码编写及常见问题排查
高性能的Java代码编写及常见问题排查
bluedavy lin
Avm2虚拟机浅析与as3性能优化(陈士凯)
Avm2虚拟机浅析与as3性能优化(陈士凯)
FLASH开发者交流会
[Flash开发者交流][2010.05.30]avm2虚拟机浅析与as3性能优化(陈士凯)
[Flash开发者交流][2010.05.30]avm2虚拟机浅析与as3性能优化(陈士凯)
Shanda innovation institute
Accelerating or Complicating PHP execution by LLVM Compiler Infrastructure
Accelerating or Complicating PHP execution by LLVM Compiler Infrastructure
National Cheng Kung University
2012 java two-desktop-appliction-using-j-ruby-with-swt
2012 java two-desktop-appliction-using-j-ruby-with-swt
tka
Asp.net mvc 6 新功能初探
Asp.net mvc 6 新功能初探
Gelis Wu
Nodejs部门分享
Nodejs部门分享
zffl
美团点评技术沙龙05 - 前后端联调方案探索与应用
美团点评技术沙龙05 - 前后端联调方案探索与应用
美团点评技术团队
千呼萬喚始出來的Java SE 7
千呼萬喚始出來的Java SE 7
javatwo2011
Jsp
Jsp
rdandy
为啥别读HotSpot VM的源码(2012-03-03)
为啥别读HotSpot VM的源码(2012-03-03)
Kris Mok
JavaScript 物件導向觀念入門 v.s. TypeScript 開發實戰 (微軟實戰課程日)
JavaScript 物件導向觀念入門 v.s. TypeScript 開發實戰 (微軟實戰課程日)
Will Huang
Similar to EMSCRIPTEN: 將應用快速 PORT 到 JAVASCRIPT 上的神物
(20)
LLVM introduction
LLVM introduction
Compiler for Dummy 一點都不深入的了解 Compiler, Interpreter 和 VM
Compiler for Dummy 一點都不深入的了解 Compiler, Interpreter 和 VM
Lamp高性能设计
Lamp高性能设计
Avm2虚拟机浅析与as3性能优化
Avm2虚拟机浅析与as3性能优化
从无阻塞并行脚本加载(Lab.js)到浏览器消息模型
从无阻塞并行脚本加载(Lab.js)到浏览器消息模型
Proxmox 5.0
Proxmox 5.0
使用NodeJS构建静态资源管理系统
使用NodeJS构建静态资源管理系统
从无阻塞并行脚本加载(Lab.js)到浏览器消息模型
从无阻塞并行脚本加载(Lab.js)到浏览器消息模型
高性能的Java代码编写及常见问题排查
高性能的Java代码编写及常见问题排查
Avm2虚拟机浅析与as3性能优化(陈士凯)
Avm2虚拟机浅析与as3性能优化(陈士凯)
[Flash开发者交流][2010.05.30]avm2虚拟机浅析与as3性能优化(陈士凯)
[Flash开发者交流][2010.05.30]avm2虚拟机浅析与as3性能优化(陈士凯)
Accelerating or Complicating PHP execution by LLVM Compiler Infrastructure
Accelerating or Complicating PHP execution by LLVM Compiler Infrastructure
2012 java two-desktop-appliction-using-j-ruby-with-swt
2012 java two-desktop-appliction-using-j-ruby-with-swt
Asp.net mvc 6 新功能初探
Asp.net mvc 6 新功能初探
Nodejs部门分享
Nodejs部门分享
美团点评技术沙龙05 - 前后端联调方案探索与应用
美团点评技术沙龙05 - 前后端联调方案探索与应用
千呼萬喚始出來的Java SE 7
千呼萬喚始出來的Java SE 7
Jsp
Jsp
为啥别读HotSpot VM的源码(2012-03-03)
为啥别读HotSpot VM的源码(2012-03-03)
JavaScript 物件導向觀念入門 v.s. TypeScript 開發實戰 (微軟實戰課程日)
JavaScript 物件導向觀念入門 v.s. TypeScript 開發實戰 (微軟實戰課程日)
EMSCRIPTEN: 將應用快速 PORT 到 JAVASCRIPT 上的神物
1.
EMSCRIPTEN 將應用快速 PORT 到
JAVASCRIPT 上的神物 Wei-Ning Huang (AZ)
2.
ABOUT THE SPEAKER Wei-Ning
Huang (a.k.a AZ Huang) Personal Website: http://azhuang.me TL; DR;
3.
Emscripten 是一個 LLVM
to Javascript 編譯器 將 LLVM bitcode 轉成 Javascript!
4.
WHAT IS LLVM? LLVM
是一個編譯器框架(Framework) 所以任何可以產生 LLVM bitcode 的語言,都可以被編譯成 Javascript
5.
PERFORMANCE? Javascript typed-array Int8Array Int16Array Emscripten 使用
Typed-Array 來當連續的記憶體使用 HEAP8, HEAP32 asm.js 由Mozilla 提出的規範,定義了一個可以很容易被優化的 Javascript 的子集 asm.js 定義的操作都非常低階,像是 Assembly 一樣 Operation are typed! 詳細的 spec 可以參考: http://asmjs.org/spec/latest/
6.
BENCHMARK source 幾乎只有原生(native)的兩倍慢!
7.
EXAMPLE hello.c #include <stdio.h> #include "console.h" void
say_hello() { console_log("Hello, World!n"); } console.h #ifndef __CONSOLE_H__ #define __CONSOLE_H__ void console_log(const char* str); #endif /* __CONSOLE_H__ */
8.
EXAMPLE post.js 把 say_hello 這個
function export 到 global say_hello = Module.cwrap('say_hello') console.js 我們想要將 console 輸出到網頁,而不是 console裡,所以 我們寫一個 Javascript 版本的 console_log 來取代原本的 C function var ConsoleLib = { console_log: function(str) { var el = document.getElementById("console"); el.innerHTML += Pointer_stringify(str); } }; mergeInto(LibraryManager.library, ConsoleLib);
9.
INVOKE EMCC $ emcc
hello.c -s EXPORTED_FUNCTIONS="['_say_hello']" --post-js post.js --js -library console.js -o hello.js --post-js: --js-library: 要使用的 Javascript library,取代原本的C library Emscripten 源始碼的 src 底下已經實做了多個常見的函式 庫,如: Xlib SDL egl, gl, glut, glew 改成使用 WebGL
10.
REDUCING JS SIZE 使用
Google 的 Closure compiler emcc --closure <on> Closure compiler 可能會造成 編出來的 code 爛掉,所以請小 心使用。 例: sql.js 使用emscripten compile完 (已minified),大小約5MB 使用 Closure compiler 後大約 2MB!
11.
OPTIMIZATION Optimization flags -O1 -O2
-O3 啟用 asm.js -s ASM_JS=1
12.
LIVE DEMO 在網頁中載入 hello.js
並呼叫 say_hello 原本輸出到 stdout 的內容被導入 <pre> 裡 源始碼可以在 GitHub 找到
13.
CASE STUDY 快速開發雲蝦米 桌面版的嘸蝦米輸入法使用 SQLite
做為資料庫,所以我有幾 種選擇: 使用純 Javascript 自己刻輸入法 寫一個 javascript="" 版的="" libsqlite 使用 Emscripten 將 libsqlite 編譯成 Javascript! Github: kripken / sql.js 最後實做的 Javascript 只有不到 200 行!
14.
CASE STUDY 雷神之鎚 網頁版:
QuakeJS 純 HTML5 由 Emscripten compile 而成
15.
CASE STUDY 還有各種神奇的專案: Mozilla B2G
的一些組件 jspinyin Qt Vim.js jschewing OpenPGP.js Broadway H.264 decoder Python, Ruby and Lua interpreter
16.
CONCLUSION 編譯技術真的 很重要 ! High-Level
Language VM 就算沒有 Byte Code,也可以變成 Runtime - Source-to-Source compilation ClojureScript: Clojure Processing.js: Processing Dart 有了 Emscripten,寫系統的人也可以寫 Web 了 CODE IN C , RUN EVERYWHERE !
Download now