先看下对比:
测试结果根据具体机器而不同
JPG 5572 x 3715
| Program | Time(ms) |
|---|---|
| cquant | 14-15 ms |
| image-palette | N/A |
N/A: crashed.....
JPG 1920 x 1280
| Program | Time(ms) |
|---|---|
| cquant | 3ms |
| image-palette | 950ms |
起因
最近需要用到提取主题色,结果呵呵呵,我的Main Loop被疯狂Block. 难道Node就不能异步进行CPU-bound任务吗???
JS不能,C++能. 一番调查之后发现Node的原生拓展(node addon)是能够支持
“多线程”,其实Node本身就是多线程的呀,只是JS接触不到. 了解了n-api 和node addon api之后发现node-addon-api 是真的简单.
实现
node-api-api 提供了一个超棒的类:Napi::AsyncWorker,我们只需要继承这个类,然后重写Execute函数Node就可以自动帮我们分配线程来运行,完全不用担心阻塞啦。
// 片段
void Execute() {
counter = (size_t *)malloc(sizeof(size_t) * max_color);
// pix_median_cut_quant MMCQ 耗时任务
cmap = pix_median_cut_quant(pix, max_color, 5, 0, counter);
}
复制代码
具体的细节可以查阅我的项目。
使用
既然这么好我咋在npm上没看到呢???
因为项目还没完全测试,有些细节还没实现,现在基本可用.所以本着不祸害别人的基本原则,还是先不上传
cquant项目地址
更多
写这个项目也学到很多东西,准备写几篇博客分别介绍吧。
TBC...
转载于:https://juejin.im/post/5c3d21c76fb9a049e412f28e
最后
以上就是不安外套最近收集整理的关于CQuant: 也许是Node下最快的主题色提取包了的全部内容,更多相关CQuant:内容请搜索靠谱客的其他文章。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复