了解Emscripten/ASM.js和浏览器沙盒
Understanding Emscripten/ASM.js and the browser sandbox
很抱歉这里有一个基本的问题。我正试着把我的头绕在Emscripten, ASM.js和编译低级语言到javascript。
这是我不明白的地方。你可以在原生C程序中做一些你不能(也不应该)在基于浏览器的js中做的事情。例如,在本地应用程序中,您可以访问或文件系统或关闭计算机。假设我写了一个C程序,读取/etc/passwd,然后关闭计算机。然后,我将该程序编译为js并将其弹出到<script>
标记中。当我访问包含<script>
标签的页面时会发生什么?显然,它不会关闭计算机,但它甚至可以编译吗?
在我看来,在浏览器中运行的javascript与低级语言相比是如此有限,我无法看到任何有意义的应用程序如何简单地编译成js而不完全破坏它。
查看Emscripten文档。例如,它说:
用Emscripten编译的应用程序通常需要同步I/O,所以Emscripten本身提供了完全同步的文件系统接口。
然而,由于JavaScript的事件驱动性质,大多数持久存储选项只提供异步接口。Emscripten提供可以使用FS.mount()挂载多个文件系统,以帮助处理与持久性取决于执行上下文。
如果你往下滚动,你会发现这个:
我相信这应该能回答你的问题。在一天结束时,Emscripten/ASM将尝试用基于javascript的填充来模拟低级细节。MEMFS
这是运行时挂载在/上的默认文件系统初始化。所有文件严格存在于内存中,所有写入的数据也严格存在于内存中当页面重新加载时,对它们的访问将丢失。
相关文章:
- 有没有任何方法可以使用node-js从不同的机器打开浏览器
- JS和three.JS,在浏览器中进行参数测试
- 当浏览器位置更改时重新渲染React.js
- 通过浏览器加载页面时触发加载脚本(js或jQuery)'s”;返回“;作用
- 浏览器坚持使用旧的html和JS缓存
- 跨浏览器JS文件系统API
- iOS在safari中打开URL,而不是在应用浏览器JS、HTML中打开Facebook
- 如何通过从浏览器 js 控制台触发的 require.js 重新加载文件
- 在 Node.js 中运行浏览器 JS
- 在离开站点跨浏览器 (JS) 之前确认消息
- 使用 Microsoft Kinect 控制 Web 浏览器 JS 组件
- 如何在浏览器 JS 控制台中包含脚本时覆盖内容安全策略
- 跨浏览器JS/jQuery将当前URL复制到剪贴板
- 跨浏览器Js监听器
- 在浏览器JS中禁用缩放
- 带有浏览器.js的 Babel,获取未捕获的语法错误:正则表达式无效
- 如何修改/“;Spoof“;运行时的标准浏览器JS DOM对象(Window.location)
- 将curl请求从浏览器js匹配到NancyFx服务
- 非浏览器JS库
- 节省服务器端的磁盘空间.在浏览器(JS)中解压缩“gz”