SIMD(Single Instruction Multiple
Data))即单指令多数据流,它是一种采用一个控制器来控制多个处理器,同时对一组数据(又称“数据矢量”)中的每一个分别执行相同的操作从而实现空间上的并行性的技术。该技术在图形处理、音频处理、编码、物理仿真、加密等领域中都得到了广泛应用,已成为现代CPU处理器最重要的功能设计,然而对于现代网页相当重要的JavaScript代码,却一直没有以处理器的SIMD指令集来提升性能。
目前SIMD.js主要支持具有SSE
的x86平台和具有NEON的ARM平台,而MIPS、Power等其他平台的支持还在考虑中。SIMD.js正快速演变为更通用的API。SIMD.js
API正处于活跃的开发之中,已经进行到草案阶段,且为其它阶段的准备工作也在进行中,正向最终API一步步靠近。另外,在支持Firefox
Nightly版本中SIMD.js正处于积极的开发之中,Internet Explorer已考虑加入SIMD.js。同时,在Chromium(Chrome浏览器的引擎)的分支中,也有一个原型的实现。在Firefox
Nightly版本中启用SIMD后的测试结果显示,JavaScript计算曼德尔布罗特集合的速度提升至4倍
未来,SIMD.js将会提供更广泛的功能,并提升更大范围应用的性能,尤其如游戏、视频、音频操控、科学模拟等对性能要求比较高的应用。另外,Emscripten也将使用流行的SIMD来编译C++,以生成优化后的SIMD.js代码;长短SIMD风格的API将能够相互合作
Hack News上关于SIMD.js讨论已经有数百条,多数人肯定了开发SIMD.js提升JavaScript效率举措,还有人提出了新增对WebCL的支持的建议。有人认为把SIMD应用到一个编程语言中是不合适的,做了不该属于自己该做的事情,而最好的方式是使用增强类型接口和编译技术,并添加语言原语以帮助代码的生成。另外还指出曼德尔布罗特集合计算例子是一个通用的例子,不能充分证明SIMD.js对JavaScript加速效果。
基于 AngularJS 的拖拽指令支持 GPU 加速
支持边界限制
支持设置拖拽把柄
移动端与 PC 端通用
使用
支持使用 script 标签或者 webpack、requirejs、seajs 调用:
script
调用
script src="lib/angular.js"></script>
<script src="dist/angular-drag.js"></script>
<script>
var app = angular.module('app', ['angular-drag'])
</script>
webpack
安装
npm install angular-drag
调用
require('angular-drag')
var app = angular.module('app', ['angular-drag'])
angular-drag 依赖 angular 与 jquery 两个全局模块
指令
drag 被拖拽的元素
drag-handle 触发拖拽的把柄(可选)
示例
简单的可拖拽元素
<div drag class="example">
hello world
</div>
自定义拖拽的把柄
<div drag class="example">
<div drag-handle></div>
<p>hello world</p>
</div>
需要为Chrome加入一些启动参数Chrome浏览器的用户请找到Chrome浏览器的快捷方式,如果没有就创建一个快捷方式(右键点击chrome.exe,选择“创建快捷方式”或者“发送到”→“桌面快捷方式”),右键点击快捷方式,选择属性。
在目标框内,双引号的后边,加入以下内容:
--enable-webgl --ignore-gpu-blacklist --allow-file-access-from-files
关闭目前开启的所有Chrome窗口,然后用此快捷方式启动Chrome浏览器。
其中:
--enable-webgl 表示开启WebGL支持
--ignore-gpu-blacklist 表示忽略GPU黑名单,也就是说有一些显卡GPU因为过于陈旧等原因,不建议运行WebGL,这个参数可以让浏览器忽略这个黑名单,强制运行WebGL
--allow-file-access-from-files 表示允许从本地载入资源,如果你不是WebGL的开发者,不需要开发调试WebGL,只是想要看一下WebGL的Demo,那你可以不添加这个参数