新聞中心
介紹
Hamsters是一個能讓JavaScript代碼并行執(zhí)行的原生庫,它可以讓你面向高性能的JavaScript編程,它是一個開源項目,Github上標(biāo)星4k+。它的目的就是讓你更加容易的利用多線程的強大功能來并行編程實現(xiàn)性能的提升!

成都創(chuàng)新互聯(lián)是一家集網(wǎng)站建設(shè),盈江企業(yè)網(wǎng)站建設(shè),盈江品牌網(wǎng)站建設(shè),網(wǎng)站定制,盈江網(wǎng)站建設(shè)報價,網(wǎng)絡(luò)營銷,網(wǎng)絡(luò)優(yōu)化,盈江網(wǎng)站推廣為一體的創(chuàng)新建站企業(yè),幫助傳統(tǒng)企業(yè)提升企業(yè)形象加強企業(yè)競爭力??沙浞譂M足這一群體相比中小企業(yè)更為豐富、高端、多元的互聯(lián)網(wǎng)需求。同時我們時刻保持專業(yè)、時尚、前沿,時刻以成就客戶成長自我,堅持不斷學(xué)習(xí)、思考、沉淀、凈化自己,讓我們?yōu)楦嗟钠髽I(yè)打造出實用型網(wǎng)站。
Github
https://github.com/austinksmith/Hamsters.js
特性
- 多功能,通過跨多個線程來最大限度地提高性能。
- 自動數(shù)據(jù)聚合,自動將問題分解成較小的部分,并與單個輸出并行執(zhí)行。
- 自動分類,按字母順序或數(shù)字自動排序輸出。
- LEGACY 支持。
- 備忘,計算一次后不再浪費 cpu 周期做同樣的工作
- 開放源代碼,100%開源代碼庫,根據(jù)Artistic License 2.0發(fā)布
支持的環(huán)境
- 所有主流瀏覽器、IE9 +
- 現(xiàn)有 Web workers
- Javascript shell 環(huán)境
- React Native
- Node.js
如何使用?
安裝使用
- bower install WebHamsters
- //OR
- npm install hamsters.js
- 1、普通HTMl項目中使用
- 2、React Native
- import hamsters from 'path/to/hamsters';
- import Worker from '...';
- import hamsters from 'hamsters.js';
- hamsters.init({
- Worker: Worker
- });
- 3、Nodejs
- var hamsters = require('hamsters.js');
- var Worker = require('...').Worker;
- var hamsters = require('hamsters.js');
- hamsters.init({
- Worker: Worker
- });
- 4、入門使用
第一個要理解的是Hamsters.js是一個傳遞interfafce的消息,因此在使用庫調(diào)用函數(shù)時,我們需要通過將params對象(消息)傳遞給庫來指示庫如何操作。
- var params = {
- bar: 'foo'
- };
- hamsters.run(params, ....);
我們將使用的下一個參數(shù)將是我們想要在一個線程或線程中執(zhí)行的邏輯,我們之前傳遞的params對象將在我們的函數(shù)的上下文中可訪問?,F(xiàn)在應(yīng)該能夠看到如何確??梢栽诰€程中訪問變量和函數(shù)等不同的東西。
- hamsters.run(params, function() {
- var foo = params.bar;
- });
第三個也是最后一個參數(shù)將是我們的onSuccess回調(diào)方法,此函數(shù)所需的唯一參數(shù)是輸出。
- hamsters.run(params, function() {
- var foo = params.bar;
- }, function(results) {
- console.log(results);
- });
回到原始的params對象,為了從庫中獲得最佳性能和可靠性,需遵循一些約定。Hamsters.js的構(gòu)建目標(biāo)是并行而不是并發(fā),盡管庫很好地實現(xiàn)了并行執(zhí)行的主要目標(biāo)。由于這樣做的各種設(shè)計決策是為了幫助實現(xiàn)這一目標(biāo),其中一個決定是庫如何在線程之間分割數(shù)據(jù)以便執(zhí)行,因此您希望在多個線程中訪問的任何數(shù)組必須在您的參數(shù)內(nèi)具有數(shù)組索引賓語。
- var params = {
- array: [1, 2, 3, 4];
- };
- hamsters.run(params, function() {
- for(var i = 0; i < params.array; i++) {
- rtn.data.push(params.array[i] * 4);
- }
- }, function(results) {
- });
使用此約定,通過簡單地更改params對象中的一個選項,可以非常簡單地并行化上述方法。現(xiàn)在使用下面的方法,4個線程將完成相同的任務(wù),每個線程僅在數(shù)組的一個數(shù)字上運行。
- var params = {
- array: [1, 2, 3, 4];
- threads: 4
- };
- hamsters.run(params, function() {
- for(var i = 0; i < params.array; i++) {
- rtn.data.push(params.array[i] * 4);
- }
- }, function(results) {
- });
更進(jìn)一步,庫使用一個名為rtn的內(nèi)部返回對象,這個rtn對象對于庫具有一致的方式來處理線程輸出是至關(guān)重要的。因此,當(dāng)我們想要從線程返回一個值時,我們需要將結(jié)果推送到rtn.data數(shù)組中。或者你可以讓你的rtn.data輸出,但只有當(dāng)你的輸出已經(jīng)是一個數(shù)組。
- hamsters.run(params, function() {
- rtn.data.push(params.bar);
- }, function(results) {
- console.log(results); // 'foo';
- });
通過以上代碼來看下它傳遞的參數(shù):
- var params = {
- threads: Integer,
- aggregate: Boolean,
- dataType: String,
- memoize: Boolean
- sort: String,
- };
1、threads這個可選參數(shù)將告訴庫執(zhí)行先前聲明的函數(shù)的線程數(shù),這允許在非常簡單的級別上更改您執(zhí)行的線程數(shù)。如果您在此處未提供值,則庫默認(rèn)值為1。
2、aggregate此可選參數(shù)將告訴庫我們是否要在執(zhí)行后將各個線程輸出聚合在一起,這僅在您跨多個線程執(zhí)行并且默認(rèn)為相關(guān)時才相關(guān)false。
3、dataType此可選參數(shù)將通知庫我們的數(shù)據(jù)數(shù)組是JavaScript的類型化數(shù)組之一,在使用此參數(shù)時,庫將自動格式化輸出以匹配指定的輸出dataType。
4、memoize此可選參數(shù)旨在與memoization模式結(jié)合使用,當(dāng)啟用memoization模式時,此參數(shù)允許用戶控制單個函數(shù)級別是否緩存該函數(shù)的結(jié)果,其默認(rèn)值為false。
5、sort此可選參數(shù)將告訴庫按字母順序或數(shù)字順序自動對最終輸出進(jìn)行排序,此參數(shù)的默認(rèn)值為,null并且可以使用排序選項進(jìn)行配置。
params對象中包含的任何其他內(nèi)容都可以在線程的執(zhí)行上下文或多個線程中訪問,具體取決于您使用庫的方式。
除了以上基本使用方式,你可以查看官方的相關(guān)文檔,有詳細(xì)的介紹和使用方式,如Promise、排序、memoization、可轉(zhuǎn)移對象、persistence、線程池、限制、設(shè)備等
總結(jié)
多線程和并行編程在Javascript中本身不是一件容易的事情,但是可借助第三方原生庫來彌補它,能讓你更加方便的進(jìn)行多線程的編程,筆者可能并未介紹的非常清楚,如果你有這方面的需求,可以去查案Hamsters.js的相關(guān)文檔來體驗這種編程,希望對你有所幫助!
文章題目:100%原生的JavaScript多線程和并行執(zhí)行庫:Hamsters.js
網(wǎng)頁路徑:http://fisionsoft.com.cn/article/cccdjoi.html


咨詢
建站咨詢
