初次接触 WebAssembly 以及一些 tricks

这周从事一些需求分析工作,因此有机会接触到一些尚未了解的技术,看看是否能解决需求。

WebAssembly

有关 wasm 的资料现在很多了,简而言之就是将代码编译为特定的二进制代码,供浏览器去执行,MDN 上介绍了详细的概念, 包括目标以及三种编写方式。Wasm 并不是传统意义上的汇编语言,它只是充分利用了 JavaScript VM,类似于 .Net 或者 Java 编译后的中间代码。报道说,eBay 使用 WebAssembly 给 WebApp 提升了 50 倍的性能。这里有更多 use cases 可供参考,以及 FAQ 我试用的是使用 emscripten 编译 C/C++ 代码:

安装过程不是很顺利,参见下文 Tricks 的部分。

示例代码似乎也不是完美执行,了解 wasm 的初衷是尝试调用系统 API,来突破浏览器的限制,然而我的猜想是错误的。代码依然执行在浏览器的沙盒里,比如文件系统 API,fopen 并不能直接访问本地文件,仅能编译打包后产生的一个运行时虚拟路径。其他的 API就未必可以调用了,例如 system

Tricks

Python 脚本里偶尔需要从一些因为众所周知的原因无法访问的网站下载文件,如果使用的 urllib2 的话,可以使用这种方式:

import urllib2

proxies = { 'https': 'http://127.0.0.1:8118', 'http': 'http://127.0.0.1:8118' }
proxy = urllib2.ProxyHandler(proxies)
opener = urllib2.build_opener(proxy)
urllib2.install_opener(opener)
print(urlopen('http://www.example.com').read());

其他

本文基于署名 2.5 中国大陆许可协议发布,欢迎转载,演绎或用于商业目的,但是必须保留本文的署名 IronBlood(包含链接)。