SkeLLLa / node-object-hash

Node.js object hash library with properties/arrays sorting to provide constant hashes. It also provides a method that returns sorted object strings that can be used for object comparison without hashes.
https://savelife.in.ua/en/donate-en/
MIT License
85 stars 20 forks source link

Support for node 4.3 #1

Closed OpherV closed 8 years ago

OpherV commented 8 years ago

This lib seems great! It's exactly what I need as well Is there a chance to have it compatible with node 4.3? What part of it is dependent on node 6.x?

SkeLLLa commented 8 years ago

Hello, @OpherV.

I'm not 100% sure, but as far as I remember node 4.X doesn't support destructruring (spread operator) like https://github.com/SkeLLLa/node-object-hash/blob/master/index.js#L20. I'll check it tomorrow.

SkeLLLa commented 8 years ago

@OpherV, hello again. I've checked the code and there are several issues that are not supported in node 4.X. There are spread operator, as I said before, and default function parameter values as well. So it will require some time to refactor all this things. So it may take couple of days to find some time to do that.

So you can wait some time or make a PR. As for alternative you can look to https://www.npmjs.com/package/object-hash library. It's author has fixed an issue with memory leak yesterday, that was one of the reason of writing this lib :).

OpherV commented 8 years ago

Thanks so much for taking the time to have a look! I appreciate that.

Actually I used your library over object-hash because of that exact memory leak issue, and also because of the improved performance.

If you ever get the time to make it compatible with 4.X that would be lovely - in the meantime I used babel to transpile an es5 version of it. Ugly, I know - but it works :)

SkeLLLa commented 8 years ago

@OpherV as a quick fix I can eliminate default options from a function, then you can use other stuff if you can run node with flags like --harmony. Also I think it will be also possible to run it on node 5.X after removing default function params.

SkeLLLa commented 8 years ago

@OpherV, for now added support of node 4.X.X with --harmony flag. You can try 0.2.0 if you want. May be a bit later I modify rest code to support 4th version without any flags.

OpherV commented 8 years ago

Brilliant! Thank you

SkeLLLa commented 8 years ago

Hi again, @OpherV. I've made some progress about supporting node version <=4.0.0. As a result I've done a complete rewrite of sorting mechanism. Good news - new hash lib is twice faster than current one. Bad news - due to rewriting of sorting mechanism new hashes will be different to previous ones :(.

As for benchmark for an array of 100000 random data objects: node-object-hash (current) = ~5.7s; Memory diff: (rss: 33 Mb, heap: 22 Mb) node-object-hash (v2) = ~2.9s; Memory diff: (rss: 1 Mb, heap: 40 Mb) object-hash (latest) = ~514s; Memory diff: (rss: 7 Mb, heap: 34 Mb)

I think I'll release it soon after writing some tests

OpherV commented 8 years ago

That's awesome to hear! Looking forwards :) In my case I don't mind about the hashes themselves changing.

SkeLLLa commented 8 years ago

Release 1.0.0 published to npm. Now you can try it without any flags. Closing this for now. If you have any troubles, feel free to reopen.