polyfill-prototype-1, 实验 WebAssembly polyfill库和工具

分享于 

4分钟阅读

GitHub

  繁體 雙語
Experimental WebAssembly polyfill library and tools
  • 源代码名称:polyfill-prototype-1
  • 源代码网址:http://www.github.com/lukewagner/polyfill-prototype-1
  • polyfill-prototype-1源代码文档
  • polyfill-prototype-1源代码下载
  • Git URL:
    git://www.github.com/lukewagner/polyfill-prototype-1.git
    Git Clone代码到本地:
    git clone http://www.github.com/lukewagner/polyfill-prototype-1
    Subversion代码到本地:
    $ svn co --depth empty http://www.github.com/lukewagner/polyfill-prototype-1
    Checked out revision 1.
    $ cd repo
    $ svn up trunk
    
    WebAssembly Polyfill ( Prototype )

    repo 包含一个 Prototype,用来演示 WebAssembly polyfill的可行性。 其他仓库正在进行,以设计实际的标准二进制格式。 这个Prototype也不尝试调用原生浏览器解码,因此它实际上不是 polyfill,而是纯JS库。

    演示

    请参见 FAQ

    它是如何工作

    真正的( 非 Prototype ) polyfill将钩子到 ES6 MODULE 加载程序 polyfill,这样加载一个 WebAssembly MODULE 就会工作。 这里描述的方案只是polyfill如何避免大量复制。字符串操作和垃圾处理的概念的一个证明。

    • 在主线程上,客户机通过调用 loadWebAssembly 启动一个 URL,并接收一个 Promise<Function>
    • 在polyfill库启动一个包含从 unpack.cpp 编译的asm.js 代码与 load-wasm-worker.js 中的粘合代码连接的worker。
    • 工人胶水代码通过XHR获取二进制代码,然后将结果复制到 asm.js 堆中。
    • asm.js 代码在 asm.js 堆的单独区域中将二进制文件解码为 asm.js 字节的形式。
    • 工人胶水代码从 asm.js UTF8字节的视图创建一个 Blob ( 只读副本)。
    • 返回到主线程的Blob,其中它作为一个脚本元素加载 script.src = URL.getObjectURL(blob)
    • 执行 asm.js 脚本时,它将 asm.js MODULE 函数对象传递给一个回调,该回调解析步骤 1中的promise。

    生成指令

    jslib/ 中的库应该准备好使用,只复制文件并调用 loadWebAssembly()

    运行 make 将 C++ 实现编译为 jslib/ 中的文件,并将它的编译为 tools/ 中的本机可执行文件。 ( 生成文件当前是超级 unportable。 抱歉欢迎使用补丁程序 !

    将 asm.js-打包为二进制格式

    polyfill还带有一个工具( tools/pack-asmjs ),它将单个JS文件( 仅包含 asm.js ) 编译成由库解码的( 实验) WebAssembly格式。 给定现有 asm.js 应用程序,可以通过以下步骤来试验这里 polyfill ( 执行直接大小/加载时间比较):

    • 将 asm.js MODULE 分离为单独的文件。
    • 运行 tools/pack-asmjs 以生成 .wasm 文件。
    • 重构调用 asm.js MODULE的代码,而调用 loadWebAssembly() (。返回解析为未链接的asm.js MODULE 函数的promise )。

    的未来工作

    • 下载时解码( 使用 HTTP Range 请求或者分割成单独的文件)
    • .wasm 文件(。比如,lzham 提供了比 gzip 更高的24%个增强) 上执行一般压缩。

    WEB  tool  EXP  
    相关文章