npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

nv-facutil-simple-test

v0.0.22

Published

nv-facutil-simple-test ====================== - nv-facutil-simple-test simple test tools

Downloads

17

Readme

nv-facutil-simple-test

  • nv-facutil-simple-test simple test tools

install

  • npm install nv-facutil-simple-test

usage

const {sync,async,Ahook} = require("nv-facutil-simple-test")

example

sync

function tst0(ary0,ary1) {
    ary0.concat(ary1)
}

> sync(10000000,tst0,[1,2],[3,4,5])
{ rounds: 10000000, f: [Function: tst0], costed: 2894.0468668937683 }
>

async

 function tst1(delay) {
     let p = new Promise(
         (rs,rj)=> {
             setTimeout(()=>{rs(true)},delay)
         }
     );
     return(p)
 }

 var p = async(5,tst1,3000)

 > p
 Promise { <pending> }
 > p
 Promise {
   { rounds: 5, f: [Function: tst1], costed: 15013.968754768372 }
 }
 >

compare for fastest

    class Cnode  {
        constructor(a,b) {
            this.a = a;
            this.b = b;
        }
    }

    function Fnode(a,b) {
        this.a = a;
        this.b = b;
    }

    class Anode extends Array {
        get a()  {return(this[0])}
        set a(v) {this[0]=v}
        get b()  {return(this[1])}
        set b(v) {this[1]=v}
    }

    var new_cnd = (a,b)=>new Cnode(a,b);
    var new_fnd = (a,b)=>new Fnode(a,b);
    var new_arynd = (a,b)=>new Anode(a,b);

    var obj_creat = (a,b) => {
        let nd = Object.create(Cnode.prototype)
        nd.a = a;
        nd.b = b;
        return(nd)
    }

    var nul_creat = (a,b) => {
        let nd = Object.create(null);
        nd.a = a;
        nd.b = b;
        return(nd)
    }


    var shape = { a:0,b:0}
    var plain_obj = (a,b) => ({a,b})


    var plain_ary = (a,b) => [a,b]

    var reflect = (a,b) => Reflect.construct(Fnode, [a,b]);

    class Priv {
        #a 
        #b 
        constructor(a,b) {
            this.#a = a;
            this.#b = b;
        }
    }

    var priv = (a,b) =>new Priv(a,b);


    var obj_with_gtst = (a,b) =>({
        "#a":100,
        "#b":200,
        get a() {return(this["#a"])},
        set a(v) {this["#a"] =v},
        get b() {return(this["#b"])},
        set b(v) {this["#b"] =v}
    })

    cmp(10000000,[new_cnd,new_fnd,obj_creat,nul_creat,plain_obj,new_arynd,plain_ary,reflect,priv,obj_with_gtst],111,222)

    /*
        [
          {
            rounds: 10000000,
            f: [Function: plain_obj],
            costed: 167.5416979789734
          },
          {
            rounds: 10000000,
            f: [Function: plain_ary],
            costed: 197.22762298583984
          },
          {
            rounds: 10000000,
            f: [Function: new_arynd],
            costed: 202.34725713729858
          },
          {
            rounds: 10000000,
            f: [Function: new_fnd],
            costed: 208.09321069717407
          },
          {
            rounds: 10000000,
            f: [Function: new_cnd],
            costed: 211.60849380493164
          },
          {
            rounds: 10000000,
            f: [Function: obj_creat],
            costed: 332.6821961402893
          },
          {
            rounds: 10000000,
            f: [Function: reflect],
            costed: 514.2599349021912
          },
          {
            rounds: 10000000,
            f: [Function: nul_creat],
            costed: 675.6858191490173
          },
          { rounds: 10000000, f: [Function: priv], costed: 2362.0123538970947 },
          {
            rounds: 10000000,
            f: [Function: obj_with_gtst],
            costed: 13023.659306049347
          }
        ]
    */

Ahook

  • only work in nodejs, coz it use async_hook

 var a = new Ahook();
 a.enable();

 > a.lst_
 {
   id: 222,
   type: 'TickObject',
   trigger: 5,
   resource: {
     callback: [Function: afterWriteTick],
     args: [ [Object] ],
     [Symbol(async_id_symbol)]: 222,
     [Symbol(trigger_async_id_symbol)]: 5
   }
 }
 > a.Timeout_
 [
   {
     id: 201,
     type: 'Timeout',
     trigger: 5,
     resource: Timeout {
       _idleTimeout: 15,
       _idlePrev: null,
       _idleNext: null,
       _idleStart: 75616,
       _onTimeout: [Function: flushHistory],
       _timerArgs: undefined,
       _repeat: null,
       _destroyed: true,
       [Symbol(refed)]: true,
       [Symbol(kHasPrimitive)]: false,
       [Symbol(asyncId)]: 201,
       [Symbol(triggerId)]: 5
     }
   },
   {
     id: 202,
     type: 'Timeout',
     trigger: 5,
     resource: {
       callback: [Function: maybeReadMore_],
       args: [Array],
       [Symbol(async_id_symbol)]: 202,
       [Symbol(trigger_async_id_symbol)]: 5
     }
   },
   ......
 ]

 a.disable();

METHODS

Ahook.prototype.enable
Ahook.prototype.disable
Ahook.prototype.clear

getter

Ahook.prototype.FSEVENTWRAP_          Ahook.prototype.FSREQCALLBACK_
Ahook.prototype.GETADDRINFOREQWRAP_   Ahook.prototype.GETNAMEINFOREQWRAP_
Ahook.prototype.HTTPCLIENTREQUEST_    Ahook.prototype.HTTPINCOMINGMESSAGE_
Ahook.prototype.Immediate_            Ahook.prototype.JSSTREAM_
Ahook.prototype.Microtask_            Ahook.prototype.PBKDF2REQUEST_
Ahook.prototype.PIPECONNECTWRAP_      Ahook.prototype.PIPEWRAP_
Ahook.prototype.PROCESSWRAP_          Ahook.prototype.PROMISE_
Ahook.prototype.QUERYWRAP_            Ahook.prototype.RANDOMBYTESREQUEST_
Ahook.prototype.SHUTDOWNWRAP_         Ahook.prototype.SIGNALWRAP_
Ahook.prototype.SSLCONNECTION_        Ahook.prototype.STATWATCHER_
Ahook.prototype.TCPCONNECTWRAP_       Ahook.prototype.TCPSERVERWRAP_
Ahook.prototype.TCPWRAP_              Ahook.prototype.TLSWRAP_
Ahook.prototype.TTYWRAP_              Ahook.prototype.TickObject_
Ahook.prototype.Timeout_              Ahook.prototype.UDPSENDWRAP_
Ahook.prototype.UDPWRAP_              Ahook.prototype.WRITEWRAP_
Ahook.prototype.ZLIB_                 

Ahook.prototype.all_
Ahook.prototype.length_               
Ahook.prototype.lst_

API

  • sync(rounds,f,...args)
  • async(rounds,f,...args)
  • cmp(rounds,func_ary,...args)
  • acmp(rounds,func_ary,...args)
  • fastest(rounds,func_ary,...args)
  • afastest(rounds,func_ary,...args)

TESTS

++ VS i =i+1

    > var i =0
    > var f0 = ()=>i++                 //a little little slightly faster,can be ignored
    > var f1 = ()=>i=i+1

    > const {sync} = require("nv-facutil-simple-test");
    > sync(10000000,f0)
    { rounds: 10000000, f: [Function: f0], costed: 127.74292135238647 }
    > sync(10000000,f1)
    { rounds: 10000000, f: [Function: f1], costed: 130.06517267227173 }
    > sync(10000000,f0)
    { rounds: 10000000, f: [Function: f0], costed: 139.97180604934692 }
    > sync(10000000,f1)
    { rounds: 10000000, f: [Function: f1], costed: 130.97596168518066 }
    > sync(10000000,f0)
    { rounds: 10000000, f: [Function: f0], costed: 132.0758399963379 }
    > sync(10000000,f1)
    { rounds: 10000000, f: [Function: f1], costed: 144.76730298995972 }
    >
    > sync(100000000,f0)
    { rounds: 100000000, f: [Function: f0], costed: 1218.9988231658936 }
    > sync(100000000,f1)
    { rounds: 100000000, f: [Function: f1], costed: 1279.4322390556335 }
    > sync(100000000,f0)
    { rounds: 100000000, f: [Function: f0], costed: 1324.279109954834 }
    > sync(100000000,f1)
    { rounds: 100000000, f: [Function: f1], costed: 1343.4789361953735 }
    >
    > sync(100000000,f0)
    { rounds: 100000000, f: [Function: f0], costed: 1257.3673729896545 }
    > sync(100000000,f1)
    { rounds: 100000000, f: [Function: f1], costed: 1372.1064085960388 }
    >

gt

    > var f0 = (a,b)=>a>b;
    > var f1 = (i)=>i++;


    > sync(10000000,f0,100,200)
    { rounds: 10000000, f: [Function: f0], costed: 215.06074380874634 }
    > sync(10000000,f1,3)
    { rounds: 10000000, f: [Function: f1], costed: 236.30819702148438 }
    
    
    > i =0
    0
    > var f2 = ()=>i++;
    > sync(10000000,f2)
    > sync(10000000,f0,100,200)
    { rounds: 10000000, f: [Function: f0], costed: 209.85319900512695 }
    >

    { rounds: 10000000, f: [Function: f2], costed: 235.23615026474 }

array

    const x = require("nv-facutil-simple-test")  

push AND shift

    function push_and_then_shift(arr,v) {
        arr.push(v)
        arr.shift()
    }

    function just_move_ele(arr,v) {
        let lngth = arr.length;
        for(let i=0;i<lngth-1;i++) {
            arr[i]= arr[i+1]
        }
        arr[lngth-1] = v
    }


    > push_and_then_shift(arr0,8888)
    > arr0
    [ 20, 30, 40, 8888 ]
    >
    > just_move_ele(arr0,7777)
    > arr0
    [ 30, 40, 8888, 7777 ]
    >
mini size 0~6 pppnext pprev prev current next nnext nnnext
    //seemed  just_move_ele MAYBE  faster

    var arr = [10,20,30,40]

    > x.fastest(10000000,[push_and_then_shift,just_move_ele],arr0,8888)
    {
      rounds: 10000000,
      f: [Function: just_move_ele],
      costed: 161.05021619796753
    }
    >


    > x.cmp(10000000,[push_and_then_shift,just_move_ele],arr0,8888)
    [
      {
        rounds: 10000000,
        f: [Function: just_move_ele],
        costed: 162.34449529647827
      },
      {
        rounds: 10000000,
        f: [Function: push_and_then_shift],
        costed: 385.70706367492676
      }
    ]
    > x.sync(10000000,just_move_ele,arr0,888)
    {
      rounds: 10000000,
      f: [Function: just_move_ele],
      costed: 202.35962390899658
    }
    > x.sync(10000000,push_and_then_shift,arr0,888)
    {
      rounds: 10000000,
      f: [Function: push_and_then_shift],
      costed: 382.8467917442322
    }
    >

small size 128

    //seemed push_and_then_shift MAYBE faster

    var arr0 = Array.from({length:128}).map((r,i)=>i)
   

    > x.fastest(10000000,[push_and_then_shift,just_move_ele],arr0,8888)
    {
      rounds: 10000000,
      f: [Function: push_and_then_shift],
      costed: 1024.305088043213
    }
    > x.cmp(10000000,[push_and_then_shift,just_move_ele],arr0,8888)
    [
      {
        rounds: 10000000,
        f: [Function: push_and_then_shift],
        costed: 947.6514468193054
      },
      {
        rounds: 10000000,
        f: [Function: just_move_ele],
        costed: 1104.9360208511353
      }
    ]
    >
    > x.sync(10000000,just_move_ele,arr0,888)
    {
      rounds: 10000000,
      f: [Function: just_move_ele],
      costed: 1109.8695631027222
    }
    > x.sync(10000000,push_and_then_shift,arr0,888)
    {
      rounds: 10000000,
      f: [Function: push_and_then_shift],
      costed: 999.6719512939453
    }
    >
  

other size

    var arr0 = Array.from({length:2**26}).map((r,i)=>i)

    x.fastest(100,[push_and_then_shift,just_move_ele],arr0,8888)
    > x.fastest(100,[push_and_then_shift,just_move_ele],arr0,8888)
    {
      rounds: 100,
      f: [Function: push_and_then_shift],
      costed: 6895.157344341278
    }

    var arr0 = Array.from({length:2**16}).map((r,i)=>i)

    > x.fastest(100000,[push_and_then_shift,just_move_ele],arr0,8888)
    {
      rounds: 100000,
      f: [Function: push_and_then_shift],
      costed: 2241.0950689315796
    }
    >

    var arr0 = Array.from({length:2**15}).map((r,i)=>i)

    x.fastest(1000000,[push_and_then_shift,just_move_ele],arr0,8888)

    > x.fastest(1000000,[push_and_then_shift,just_move_ele],arr0,8888)
    {
      rounds: 1000000,
      f: [Function: push_and_then_shift],
      costed: 9688.172526836395
    }
    >


    > var arr0 = Array.from({length:2**14}).map((r,i)=>i)

    >
    > x.fastest(1000000,[push_and_then_shift,just_move_ele],arr0,8888)
    {
      rounds: 1000000,
      f: [Function: push_and_then_shift],
      costed: 4321.872590065002
    }
    >

    var arr0 = Array.from({length:2**13}).map((r,i)=>i)

    x.fastest(1000000,[push_and_then_shift,just_move_ele],arr0,8888)

    > var arr0 = Array.from({length:2**13}).map((r,i)=>i)
    >
    > x.fastest(1000000,[push_and_then_shift,just_move_ele],arr0,8888)
    {
      rounds: 1000000,
      f: [Function: push_and_then_shift],
      costed: 113.6801929473877
    }
    >


    var arr0 = Array.from({length:2**12}).map((r,i)=>i)

    x.fastest(1000000,[push_and_then_shift,just_move_ele],arr0,8888)

    > x.fastest(1000000,[push_and_then_shift,just_move_ele],arr0,8888)
    {
      rounds: 1000000,
      f: [Function: push_and_then_shift],
      costed: 139.2634081840515
    }


    var arr0 = Array.from({length:2**11}).map((r,i)=>i)

    x.fastest(1000000,[push_and_then_shift,just_move_ele],arr0,8888)
    > x.fastest(1000000,[push_and_then_shift,just_move_ele],arr0,8888)
    {
      rounds: 1000000,
      f: [Function: push_and_then_shift],
      costed: 112.35720729827881
    }


    var arr0 = Array.from({length:2**10}).map((r,i)=>i)

    x.fastest(1000000,[push_and_then_shift,just_move_ele],arr0,8888)

    > x.fastest(1000000,[push_and_then_shift,just_move_ele],arr0,8888)
    {
      rounds: 1000000,
      f: [Function: push_and_then_shift],
      costed: 109.84335327148438
    }
    >

    var arr0 = Array.from({length:2**9}).map((r,i)=>i)
    x.fastest(1000000,[push_and_then_shift,just_move_ele],arr0,8888)

    /*
    > x.fastest(1000000,[push_and_then_shift,just_move_ele],arr0,8888)
    {
      rounds: 1000000,
      f: [Function: push_and_then_shift],
      costed: 104.96030282974243
    }
    > x.cmp(1000000,[push_and_then_shift,just_move_ele],arr0,8888)
    [
      {
        rounds: 1000000,
        f: [Function: push_and_then_shift],
        costed: 109.10006427764893
      },
      {
        rounds: 1000000,
        f: [Function: just_move_ele],
        costed: 354.9349093437195
      }
    ]
    >

    */

    var arr0 = Array.from({length:2**8}).map((r,i)=>i)
    x.fastest(10000000,[push_and_then_shift,just_move_ele],arr0,8888)
    x.cmp(10000000,[push_and_then_shift,just_move_ele],arr0,8888)

    /*
    > x.fastest(10000000,[push_and_then_shift,just_move_ele],arr0,8888)
    {
      rounds: 10000000,
      f: [Function: push_and_then_shift],
      costed: 965.2179284095764
    }
    > x.cmp(10000000,[push_and_then_shift,just_move_ele],arr0,8888)
    [
      {
        rounds: 10000000,
        f: [Function: push_and_then_shift],
        costed: 1006.8404927253723
      },
      {
        rounds: 10000000,
        f: [Function: just_move_ele],
        costed: 1912.6992869377136
      }
    ]
    >

    */


    var arr0 = Array.from({length:2**7}).map((r,i)=>i)
    x.fastest(10000000,[push_and_then_shift,just_move_ele],arr0,8888)
    x.cmp(10000000,[push_and_then_shift,just_move_ele],arr0,8888)

    /*
    > var arr0 = Array.from({length:2**7}).map((r,i)=>i)
    > x.fastest(10000000,[push_and_then_shift,just_move_ele],arr0,8888)
    {
      rounds: 10000000,
      f: [Function: push_and_then_shift],
      costed: 975.0886740684509
    }
    > x.cmp(10000000,[push_and_then_shift,just_move_ele],arr0,8888)
    [
      {
        rounds: 10000000,
        f: [Function: push_and_then_shift],
        costed: 1021.1277914047241
      },
      {
        rounds: 10000000,
        f: [Function: just_move_ele],
        costed: 1123.0839891433716
      }
    ]
    >
    */


    var arr0 = Array.from({length:2**6}).map((r,i)=>i)
    x.fastest(10000000,[push_and_then_shift,just_move_ele],arr0,8888)
    x.cmp(10000000,[push_and_then_shift,just_move_ele],arr0,8888)


    /*
    > x.fastest(10000000,[push_and_then_shift,just_move_ele],arr0,8888)
    {
      rounds: 10000000,
      f: [Function: push_and_then_shift],
      costed: 506.3333601951599
    }
    > x.cmp(10000000,[push_and_then_shift,just_move_ele],arr0,8888)
    [
      {
        rounds: 10000000,
        f: [Function: push_and_then_shift],
        costed: 634.4168033599854
      },
      {
        rounds: 10000000,
        f: [Function: just_move_ele],
        costed: 697.2383561134338
      }
    ]
    >

    */


    var arr0 = Array.from({length:2**5}).map((r,i)=>i)
    x.fastest(10000000,[push_and_then_shift,just_move_ele],arr0,8888)
    x.cmp(10000000,[push_and_then_shift,just_move_ele],arr0,8888)

    /*
    > var arr0 = Array.from({length:2**5}).map((r,i)=>i)
    undefined
    > x.fastest(10000000,[push_and_then_shift,just_move_ele],arr0,8888)
    {
      rounds: 10000000,
      f: [Function: push_and_then_shift],
      costed: 270.8724579811096
    }
    > x.cmp(10000000,[push_and_then_shift,just_move_ele],arr0,8888)
    [
      {
        rounds: 10000000,
        f: [Function: push_and_then_shift],
        costed: 266.78145694732666
      },
      {
        rounds: 10000000,
        f: [Function: just_move_ele],
        costed: 378.65622091293335
      }
    ]
    >

    */


    var arr0 = Array.from({length:2**4}).map((r,i)=>i)
    x.fastest(10000000,[push_and_then_shift,just_move_ele],arr0,8888)
    x.cmp(10000000,[push_and_then_shift,just_move_ele],arr0,8888)

    /*
    > x.fastest(10000000,[push_and_then_shift,just_move_ele],arr0,8888)
    {
      rounds: 10000000,
      f: [Function: push_and_then_shift],
      costed: 228.02108192443848
    }
    > x.cmp(10000000,[push_and_then_shift,just_move_ele],arr0,8888)
    [
      {
        rounds: 10000000,
        f: [Function: push_and_then_shift],
        costed: 259.8764510154724
      },
      {
        rounds: 10000000,
        f: [Function: just_move_ele],
        costed: 264.2375192642212
      }
    ]
    >
    */

    var arr0 = Array.from({length:2**3}).map((r,i)=>i)
    x.fastest(100000000,[push_and_then_shift,just_move_ele],arr0,8888)
    x.cmp(100000000,[push_and_then_shift,just_move_ele],arr0,8888)

    /*
    > x.fastest(100000000,[push_and_then_shift,just_move_ele],arr0,8888)
    {
      rounds: 100000000,
      f: [Function: just_move_ele],
      costed: 1979.1184711456299
    }
    > x.cmp(100000000,[push_and_then_shift,just_move_ele],arr0,8888)
    [
      {
        rounds: 100000000,
        f: [Function: just_move_ele],
        costed: 2022.5493369102478
      },
      {
        rounds: 100000000,
        f: [Function: push_and_then_shift],
        costed: 2156.524836063385
      }
    ]
    >

    */

prop OR key size

    const {sync,mem_change} = require("nv-facutil-simple-test")

    class GPS0 {
        constructor(lat,lon,alt) {
            this.latitude   = lat;
            this.longitude  = lon;
            this.altitude   = alt;
        }
    }


    class GPS1 {
        constructor(lat,lon,alt) {
            this.x  = lat;
            this.y  = lon;
            this.z  = alt;
        }
        get latitude_()  {return(this.x)}
        get longitude_() {return(this.y)}
        get altitude_()  {return(this.z)}
    }



    function f0() {return(new GPS0(100,100,100))}
    function f1() {return(new GPS1(100,100,100))}

    sync(5000000,f0)
    sync(5000000,f1)

    /* creat speed nearly same
    > sync(5000000,f0)
    { rounds: 5000000, f: [Function: f0], costed: 88.10719192028046 }
    > sync(5000000,f1)
    { rounds: 5000000, f: [Function: f1], costed: 86.56737101078033 }
    >
    > sync(5000000,f0)
    { rounds: 5000000, f: [Function: f0], costed: 87.2494729757309 }
    > sync(5000000,f1)
    { rounds: 5000000, f: [Function: f1], costed: 89.2833321094513 }
    >

    */


    > process.memoryUsage()
    {
      rss: 46972928,
      heapTotal: 8511488,
      heapUsed: 6355072,
      external: 1058023,
      arrayBuffers: 17147
    }
    >
    > mem_change()
    {
      rss: -2600960,
      heapTotal: -3145728,
      heapUsed: -1426304,
      external: 4,
      arrayBuffers: -15
    }

    > mem_change()
    { rss: 0, heapTotal: 0, heapUsed: 83224, external: 4, arrayBuffers: 4 }
    >


    var arr0 = Array.from({length:1000000})
    var arr1 = Array.from({length:1000000})



    > mem_change()
    {
      rss: 14991360,
      heapTotal: 16277504,
      heapUsed: 15118816,
      external: -1823,
      arrayBuffers: -1056
    }
    >




    arr0.forEach((r,i)=>{arr0[i]=f0()})



    >  mem_change()
    {
      rss: 72437760,
      heapTotal: 63700992,
      heapUsed: 47852128,
      external: -1138,
      arrayBuffers: 1
    }
    >


    arr1.forEach((r,i)=>{arr0[i]=f1()})

    >  mem_change()
    {
      rss: 35741696,
      heapTotal: 31457280,
      heapUsed: 33430368,           //
      external: 35,
      arrayBuffers: 36
    }
    >

instanceof VS constructor.name

    var u8a = new Uint8Array(4);
    var f0 = (o)=>(o instanceof Uint8Array);
    var f1 = (o)=>o.constructor.name === 'Uint8Array';

    > f0(u8a)
    true
    > f1(u8a)
    true
    >
    > x.sync(10000000,f0,u8a)
    { rounds: 10000000, f: [Function: f0], costed: 148.99506187438965 }
    >
    > x.sync(10000000,f1,u8a)
    { rounds: 10000000, f: [Function: f1], costed: 385.277530670166 }
    > x.sync(20000000,f0,u8a)
    { rounds: 20000000, f: [Function: f0], costed: 294.7771701812744 }
    >
    > x.sync(20000000,f1,u8a)
    { rounds: 20000000, f: [Function: f1], costed: 673.4802875518799 }
    >

getter speed test

    const {sync} = require("../index");

    var ra = ["v0","v1"]

    const get_from_rawa_with_index  = ()=>[ra[0],ra[1]]

    sync(10000000,get_from_rawa_with_index)


    /*
    > sync(10000000,get_from_rawa_with_index)
    {
      rounds: 10000000,
      f: [Function: get_from_rawa_with_index],
      costed: 210.45516967773438
    }
    > sync(10000000,get_from_rawa_with_index)
    {
      rounds: 10000000,
      f: [Function: get_from_rawa_with_index],
      costed: 211.53196907043457
    }
    > sync(10000000,get_from_rawa_with_index)
    {
      rounds: 10000000,
      f: [Function: get_from_rawa_with_index],
      costed: 208.35104370117188
    }
    > sync(10000000,get_from_rawa_with_index)
    {
      rounds: 10000000,
      f: [Function: get_from_rawa_with_index],
      costed: 216.23346519470215
    }
    >
    */


    class EA extends Array {
        constructor(v0,v1) {
            super();
                this.push(v0,v1)
            }
            get v0() {return(this[0])}
            get v1() {return(this[1])}
    }

    var ea   = new EA("v0","v1")

    const get_from_ea_with_index  = ()=>[ea[0],ea[1]]

    sync(10000000,get_from_ea_with_index)

    /*
    > sync(10000000,get_from_ea_with_index)
    {
      rounds: 10000000,
      f: [Function: get_from_ea_with_index],
      costed: 202.84191703796387
    }
    > sync(10000000,get_from_ea_with_index)
    {
      rounds: 10000000,
      f: [Function: get_from_ea_with_index],
      costed: 215.38772010803223
    }
    > sync(10000000,get_from_ea_with_index)
    {
      rounds: 10000000,
      f: [Function: get_from_ea_with_index],
      costed: 214.39294815063477
    }
    > sync(10000000,get_from_ea_with_index)
    {
      rounds: 10000000,
      f: [Function: get_from_ea_with_index],
      costed: 210.52841758728027
    }
    >
    */

    const get_from_ea_with_getter = ()=>[ea.v0,ea.v1]
    sync(10000000,get_from_ea_with_getter)
    /*
    > sync(10000000,get_from_ea_with_getter)
    {
      rounds: 10000000,
      f: [Function: get_from_ea_with_getter],
      costed: 208.8599624633789
    }
    > sync(10000000,get_from_ea_with_getter)
    {
      rounds: 10000000,
      f: [Function: get_from_ea_with_getter],
      costed: 199.53731155395508
    }
    > sync(10000000,get_from_ea_with_getter)
    {
      rounds: 10000000,
      f: [Function: get_from_ea_with_getter],
      costed: 205.06519317626953
    }
    > sync(10000000,get_from_ea_with_getter)
    {
      rounds: 10000000,
      f: [Function: get_from_ea_with_getter],
      costed: 209.24454879760742
    }
    >
    */



    var rd   = {v0:"v0",v1:"v1"}

    const get_from_rd = ()=> [rd.v0,rd.v1]

    sync(10000000,get_from_rd)

    /*
    > sync(10000000,get_from_rd)
    {
      rounds: 10000000,
      f: [Function: get_from_rd],
      costed: 201.54963493347168
    }
    > sync(10000000,get_from_rd)
    {
      rounds: 10000000,
      f: [Function: get_from_rd],
      costed: 203.9611873626709
    }
    > sync(10000000,get_from_rd)
    {
      rounds: 10000000,
      f: [Function: get_from_rd],
      costed: 211.65743827819824
    }
    >
    */


    var mp  = new Map(Object.entries(rd));

    const get_from_mp = () =>[mp.get("v0"),mp.get("v1")]


    sync(10000000,get_from_mp)

    /*
    > sync(10000000,get_from_mp)
    {
      rounds: 10000000,
      f: [Function: get_from_mp],
      costed: 431.3168029785156
    }
    > sync(10000000,get_from_mp)
    {
      rounds: 10000000,
      f: [Function: get_from_mp],
      costed: 436.4684009552002
    }
    > sync(10000000,get_from_mp)
    {
      rounds: 10000000,
      f: [Function: get_from_mp],
      costed: 453.76171684265137
    }
    > sync(10000000,get_from_mp)
    {
      rounds: 10000000,
      f: [Function: get_from_mp],
      costed: 470.9776554107666
    }
    >
    */


    class D {
        v0="v0"
        v1="v1"
    }

    var d = new D()

    const get_from_d = ()=> [d.v0,d.v1]
    /*
    > sync(10000000,get_from_d)
    {
      rounds: 10000000,
      f: [Function: get_from_d],
      costed: 201.63967323303223
    }
    > sync(10000000,get_from_d)
    {
      rounds: 10000000,
      f: [Function: get_from_d],
      costed: 200.51382064819336
    }
    > sync(10000000,get_from_d)
    {
      rounds: 10000000,
      f: [Function: get_from_d],
      costed: 201.8022174835205
    }
    > sync(10000000,get_from_d)
    {
      rounds: 10000000,
      f: [Function: get_from_d],
      costed: 228.96243858337402
    }
    >
    */



    class PA extends Array {
        constructor(v0,v1) {
            super();
            this.push(v0,v1)
        }
    }

    Object.defineProperty(PA.prototype,"v0",{get:function(){return(this[0])}})
    Object.defineProperty(PA.prototype,"v1",{get:function(){return(this[1])}})


    var pa = new PA("v0","v1")
    /*
    > pa
    PA(2) [ 'v0', 'v1' ]
    >
    */

    const get_from_pa_with_index   = ()=>[pa[0],pa[1]]
    /*
    > sync(10000000,get_from_pa_with_index)
    {
      rounds: 10000000,
      f: [Function: get_from_pa_with_index],
      costed: 207.52319526672363
    }
    > sync(10000000,get_from_pa_with_index)
    {
      rounds: 10000000,
      f: [Function: get_from_pa_with_index],
      costed: 212.59967613220215
    }
    > sync(10000000,get_from_pa_with_index)
    {
      rounds: 10000000,
      f: [Function: get_from_pa_with_index],
      costed: 211.38087272644043
    }
    > sync(10000000,get_from_pa_with_index)
    {
      rounds: 10000000,
      f: [Function: get_from_pa_with_index],
      costed: 222.359037399292
    }
    >
    */
    const get_from_pa_with_getter  = ()=>[pa.v0,pa.v1]

    /*
    > sync(10000000,get_from_pa_with_getter)
    {
      rounds: 10000000,
      f: [Function: get_from_pa_with_getter],
      costed: 207.68007278442383
    }
    > sync(10000000,get_from_pa_with_getter)
    {
      rounds: 10000000,
      f: [Function: get_from_pa_with_getter],
      costed: 208.297456741333
    }
    > sync(10000000,get_from_pa_with_getter)
    {
      rounds: 10000000,
      f: [Function: get_from_pa_with_getter],
      costed: 223.48654747009277
    }
    > sync(10000000,get_from_pa_with_getter)
    {
      rounds: 10000000,
      f: [Function: get_from_pa_with_getter],
      costed: 226.50678253173828
    }
    > sync(10000000,get_from_pa_with_getter)
    {
      rounds: 10000000,
      f: [Function: get_from_pa_with_getter],
      costed: 211.12835502624512
    }
    >
    */

    var a = ["v0","v1"]

    var px = new Proxy(
        a,
        {
            get: function(target, property, receiver) {
                 if(property === "v0") {
                      return(Reflect.get(target,0))
                 } else if(property === "v1") {
                      return(Reflect.get(target,1))
                 } else {
                      return(Reflect.get(target,property))
                 }
            }
        }
    )

    /*
    > px.v0
    'v0'
    > px.v1
    'v1'
    > px[0]
    'v0'
    > px[1]
    'v1'
    >
    */

    const get_from_px_with_index  = ()=>[px[0],px[1]]
    /*
    > sync(10000000,get_from_px_with_index)
    {
      rounds: 10000000,
      f: [Function: get_from_px_with_index],
      costed: 6042.160470962524
    }
    > sync(10000000,get_from_px_with_index)
    {
      rounds: 10000000,
      f: [Function: get_from_px_with_index],
      costed: 6012.279012680054
    }
    >

    */

    const get_from_px_with_prop  = ()=>[px.v0,px.v1]
    /*
    > sync(10000000,get_from_px_with_prop)
    {
      rounds: 10000000,
      f: [Function: get_from_px_with_prop],
      costed: 1954.2461643218994
    }
    > sync(10000000,get_from_px_with_prop)
    {
      rounds: 10000000,
      f: [Function: get_from_px_with_prop],
      costed: 1921.415605545044
    }
    > sync(10000000,get_from_px_with_prop)
    {
      rounds: 10000000,
      f: [Function: get_from_px_with_prop],
      costed: 1951.849027633667
    }
    >
    */

big fixed data length speed test

        const rnd_sen = require("nv-random-sentence");


        var D = {}
        const creat_frag = (D,idx) =>{
            let d = {}
            for(let i=0;i<500000;i++) {
               let k = rnd_sen.NVN_
               d[k]  = rnd_sen.NVN_
                   D[k]  = d[k]
            }   
                fs.writeFileSync(`frag${idx}.json`,JSON.stringify(d))
        }


        for(let idx=0;idx<10;idx++) {
            creat_frag(D,idx)
        }

        TEST# ls -l
        total 275796
        -rw-r--r-- 1 root root 28234445 Oct 19 15:33 frag0.json
        -rw-r--r-- 1 root root 28243940 Oct 19 15:33 frag1.json
        -rw-r--r-- 1 root root 28241764 Oct 19 15:33 frag2.json
        -rw-r--r-- 1 root root 28240741 Oct 19 15:33 frag3.json
        -rw-r--r-- 1 root root 28245468 Oct 19 15:33 frag4.json
        -rw-r--r-- 1 root root 28239630 Oct 19 15:33 frag5.json
        -rw-r--r-- 1 root root 28240529 Oct 19 15:33 frag6.json
        -rw-r--r-- 1 root root 28239675 Oct 19 15:34 frag7.json
        -rw-r--r-- 1 root root 28232199 Oct 19 15:34 frag8.json
        -rw-r--r-- 1 root root 28237992 Oct 19 15:34 frag9.json
        TEST# 


        > Object.keys(D).length
        5000000
        > 

        const len = (D)=>Object.keys(D).length;

        /*
        > sync(10,len,D)
        { rounds: 10, f: [Function: len], costed: 41091.69201660156 }       //計算一個length就需要4秒
        > 
        */

        const get = (k)=>D[k];

        > get('dialyzer_chouse_brill')
        'callboard_imitate_estaminet'
        > 

        > sync(10000000,get,'dialyzer_chouse_brill')
        { rounds: 10000000, f: [Function: get], costed: 253.25781440734863 }
        > 

        .exit



        var entries = Array(5000000);
        for(let i=0;i<5000000;i++) {
            entries[i] = ['','']
        }

        var c = 0
        for(let idx=0;idx<10;idx++) {
            let frag = JSON.parse(fs.readFileSync(`frag${idx}.json`).toString());
                for(let k in frag) {
                     entries[c] = [k,frag[k]]
                         c=c+1;
                }
        }

        > entries.length                                                    
        5000000



        const len = (es)=>es.length;
        > sync(10,len,entries)
        { rounds: 10, f: [Function: len], costed: 0.028247833251953125 }    //計算length基本不需要時間
        > 





        > entries[2500000]
        [ 'dialyzer_chouse_brill', 'callboard_imitate_estaminet' ]
        > 

        const get = (k)=> {
            for(let i=0;i<5000000;i++) {
                    if(entries[i][0] === k) {
                            return(entries[i][1])
                        }
                }
        }

        > get('dialyzer_chouse_brill')
        'callboard_imitate_estaminet'
        > 

        > sync(10,get,'dialyzer_chouse_brill')
        { rounds: 10, f: [Function: get], costed: 263.88294410705566 }             //耗時不可接受 單次需要25毫秒
        > 

        .exit 




        var mp = new Map();
        for(let idx=0;idx<10;idx++) {
            let frag = JSON.parse(fs.readFileSync(`frag${idx}.json`).toString());
                for(let k in frag) {
                     mp.set(k,frag[k])
                }
        }

        const len = (mp)=>mp.size;
        > sync(10,len,mp)
        { rounds: 10, f: [Function: len], costed: 0.009061813354492188 }       //計算length基本不需要時間
        > 

        const get = (k)=> {
             return(mp.get(k))
        }
        > get('dialyzer_chouse_brill')
        'callboard_imitate_estaminet'
        > 

        > sync(10000000,get,'dialyzer_chouse_brill')
        { rounds: 10000000, f: [Function: get], costed: 390.18969535827637 }          //1千萬次調用get 400ms,單次耗時忽略不記
        > 


        .exit


        var entries = Array(5000000);
        for(let i=0;i<5000000;i++) {
            entries[i] = ['','']
        }

        var c = 0
        for(let idx=0;idx<10;idx++) {
            let frag = JSON.parse(fs.readFileSync(`frag${idx}.json`).toString());
                for(let k in frag) {
                     entries[c] = [k,frag[k]]
                         entries[k] = frag[k]
                         c=c+1;
                }
        }

ary_destructor IF you sure the right-hand IS a array with the default iterator-implement

	var PAIR_WITH_ARY_TYPE_MARK = [100,200];

	var FST;
	var SND;


	var f0 = () => {
	    [FST,SND] = PAIR_WITH_ARY_TYPE_MARK;
	}

	var f1 = () => {
	    FST = PAIR_WITH_ARY_TYPE_MARK[0];
	    SND = PAIR_WITH_ARY_TYPE_MARK[1];
	}


	console.log(sync(100000000,f0))
	console.log(sync(100000000,f1))

	/*
	> console.log(sync(100000000,f0))
	{ rounds: 100000000, f: [Function: f0], costed: 1398.456472992897 }

	> console.log(sync(100000000,f1))
	{ rounds: 100000000, f: [Function: f1], costed: 1185.4215869903564 }
	   //---  this is because , the destrotor need to call iterator
	*/


	var ary = [1,2,3,4,5,6];
	var FST;
	var SND;
	var TRD;
	var QUA;
	var PNT;
	var HEX;

	var f0 = () => {[FST,SND,TRD,QUA,PNT,HEX] = ary;}
	var f1 = () => {
	    FST = ary[0];
	    SND = ary[1];
	    TRD = ary[2];
	    QUA = ary[3];
	    PNT = ary[4];
	    HEX = ary[5];
	}


	console.log(sync(100000000,f0))
	console.log(sync(100000000,f1))

	/*
	{ rounds: 100000000, f: [Function: f0], costed: 1607.1520830392838 }
	{ rounds: 100000000, f: [Function: f1], costed: 897.0708520412445 }  
	   // 被解構的結構越複雜 這個差異越明顯

	*/

for-loop-on-64k-string

	10000
	{
	  rounds: 65536,
	  f: [Function: using_char_code_at],
	  costed: 5297.109977960587
	}
	{
	  rounds: 65536,
	  f: [Function: using_many_if],
	  costed: 6676.725782871246
	}
	{
	  rounds: 65536,
	  f: [Function: using_many_case],
	  costed: 6721.5950429439545
	}
	{ rounds: 65536, f: [Function: using_tbl], costed: 18946.27202105522 }

BigUInt64Array

	const make_using_u16a = (dt=new Date) => {
	    let mts = dt.getTime();
	    let r0  = mts %   4294967296;
	    let q0  = (mts - r0)/4294967296;
	    let r1  = r0 % (65536);
	    let  q1 = (r0-r1) /65536;
		let u16a = new Uint16Array(4);
		u16a[3] = 0x7ffa;
	    u16a[2]=q0;
	    u16a[1]=q1;
	    u16a[0]=r1;
	    return(new Uint8Array(u16a.buffer))
	}
	const make_using_u32a = (dt=new Date) => {
	    let mts = dt.getTime();
	    let r0  = mts %   4294967296;
	    let q0  = (mts - r0)/4294967296;
		let u32a = new Uint32Array(2);
	    u32a[1] = 0x7ffa0000 | q0;
		u32a[0] = r0 ;
	    return(new Uint8Array(u32a.buffer))
	}
	const make_using_u64a = (dt=new Date) => {
	    let mts = dt.getTime();
	    let u64a = new BigUint64Array(1);
	    u64a[0]        = BigInt(mts);
	    let u16a = new Uint16Array(u64a.buffer);
	    u16a[3]  = 0x7ffa;
	    return(new Uint8Array(u64a.buffer))
	}


	const {sync} = require("nv-facutil-simple-test");


	console.log(sync(10000000,make_using_u16a))
	console.log(sync(10000000,make_using_u32a))
	console.log(sync(10000000,make_using_u64a))


	/*
	{
	  rounds: 10000000,
	  f: [Function: make_using_u16a],
	  costed: 6253.4816637039185
	}
	{
	  rounds: 10000000,
	  f: [Function: make_using_u32a],
	  costed: 6245.351312637329
	}
	{
	  rounds: 10000000,
	  f: [Function: make_using_u64a],
	  costed: 7142.871691703796
	}
	*/

updt

	class V {
	    _v =888
		set v(val) { console.log("setter enter");this._v=val;    console.log("setter exit");} 
		get v()    { console.log("getter enter");return(this._v);}
	}

	/*


	> ++v.v
	getter enter
	setter enter
	setter exit
	889
	> v
	V { _v: 889 }
	> 
	> v.v++
	getter enter
	setter enter
	setter exit
	889
	> v
	V { _v: 890 }

	> v.v = 0
	setter enter
	setter exit
	0

	*/

	/*
	> (1+v.v++)
	getter enter
	setter enter
	setter exit
	1
	> v.v = 0
	setter enter
	setter exit
	0
	> 
	*/

	/*
	> (1+ ++v.v)
	getter enter
	setter enter
	setter exit
	2
	> (((v.v)))++
	getter enter
	setter enter
	setter exit
	1
	> 
	*/


			class V1 {
                _v =888
                    set v(val) { this._v=val;}
                    get v()    { return(this._v);}
            }

            var v  = 888;
            var v1 = new V1();
			var v2 = {v:888}

            var f0 = ()=>++v;
            var f1 = ()=>++v1.v;
			var f2 = ()=>++v2.v;

            console.log(sync(1000000000,f0))
			//{ rounds: 1000000000, f: [Function: f0], costed: 12089.421229362488 }
            console.log(sync(1000000000,f1))
			//{ rounds: 1000000000, f: [Function: f1], costed: 12359.855974197388 }
			console.log(sync(1000000000,f2))
			//{ rounds: 1000000000, f: [Function: f2], costed: 7612.168771743774 }
            /*
               > v
               1000000888
               > v1
               V1 { _v: 1000000888 }
               > v2
               { v: 1000000888 }
               > 
			*/
			
			console.log(sync(1000000000,f0))
			//{ rounds: 1000000000, f: [Function: f0], costed: 7590.657766342163 }
			console.log(sync(1000000000,f1))
			//{ rounds: 1000000000, f: [Function: f1], costed: 7561.783745765686 }
			console.log(sync(1000000000,f2))
			//{ rounds: 1000000000, f: [Function: f2], costed: 11850.260585784912 }
			
			console.log(sync(1000000000,f0))
			//{ rounds: 1000000000, f: [Function: f0], costed: 19522.066294670105 }
			console.log(sync(1000000000,f1))
			//{ rounds: 1000000000, f: [Function: f1], costed: 9180.399136543274 }
			console.log(sync(1000000000,f2))
			//{ rounds: 1000000000, f: [Function: f2], costed: 13682.482397079468 }
			
			console.log(sync(1000000000,f0))
			console.log(sync(1000000000,f1))
			console.log(sync(1000000000,f2))
			
            >                               console.log(sync(1000000000,f0))
            
            { rounds: 1000000000, f: [Function: f0], costed: 28632.76893234253 }
            >                               console.log(sync(1000000000,f1))
            
            { rounds: 1000000000, f: [Function: f1], costed: 9588.860234260559 }
            >                               console.log(sync(1000000000,f2))
            
            { rounds: 1000000000, f: [Function: f2], costed: 14136.279594421387 }

LICENSE

  • ISC