foop
Version:
interfaces that describe their intentions.
112 lines (91 loc) • 11.3 kB
JavaScript
// fastest object OR typed array hash OR hashmap OR keyval js
//
// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Indexed_collections
//
// http://www.mojavelinux.com/articles/javascript_hashes.html
// https://leftshift.io/4-javascript-optimisations-you-should-know
// http://www.html5gamedevs.com/topic/1188-javascript-hashmap-with-fast-keyvalues-iteration/
// totally wrong
// https://davidwalsh.name/object-array-index
//
// ---
// http://www.shamasis.net/2009/09/fast-algorithm-to-find-unique-items-in-javascript-array/
// test perf of wrapping methods instead and see gzip size with .call probably better
// really good
// http://jayconrod.com/posts/52/a-tour-of-v8-object-representation
// aight
// https://developer.mozilla.org/en-US/docs/Web/API/DOMString/Binary
// https://stackoverflow.com/questions/26264956/convert-object-array-to-hash-map-indexed-by-an-attribute-value-of-the-object
// https://stackoverflow.com/questions/13328658/are-the-advantages-of-typed-arrays-in-javascript-is-that-they-work-the-same-or-s
// https://stackoverflow.com/questions/2002923/javascript-using-integer-as-key-in-associative-array
// !!!!
// https://developer.mozilla.org/en-US/Add-ons/Code_snippets/StringView
// https://github.com/madmurphy/stringview.js
// http://bajiecc.cc/questions/1511775/trying-to-get-asm-js-to-return-a-typed-array
// http://oocms.org/question/1200278/are-the-advantages-of-typed-arrays-in-javascript-is-that-they-work-the-same-or-s
// ----- SUPER LOTS OF CODE ---
// https://github.com/WebKit/webkit/tree/master/JSTests/microbenchmarks
// general perf
// https://github.com/v8/v8/wiki/Design%20Elements
// https://www.smashingmagazine.com/2012/11/writing-fast-memory-efficient-javascript/
//-> REMOXING CLASSES http://jsperf.com/prototypal-performance/54
// gives me an idea to add `hasOwnProperty` method on chainable
// so when it is called, then I can check the `store`
// http://ryanmorr.com/true-hash-maps-in-javascript/
// Google SoundScript: faster OOP for JavaScript
// http://2ality.com/2015/02/soundscript.html
// https://v8project.blogspot.ca/
// https://github.com/rwaldron/tc39-notes/blob/master/es6/2015-01/JSExperimentalDirections.pdf
// https://github.com/RefineryJS/SaneScript
// https://www.reddit.com/r/javascript/comments/2uzueu/new_js_experiments_by_the_google_v8_team/
// https://github.com/rwaldron/tc39-notes/blob/master/es6/2015-01/JSExperimentalDirections.pdf
// data structures!
// interesting methods for chainable - best ones shit
// http://www.timdown.co.uk/jshashtable/
// http://www.collectionsjs.com/fast-set
// https://thestorefront.github.io/DataCollection.js/
// https://github.com/pluma0/ordered-hashmap
// http://www.i-programmer.info/programming/javascript/1441-javascript-data-structures-the-associative-array.html
// http://www.objis.com/formationextjs/lib/extjs-4.0.0/docs/api/Ext.util.HashMap.html
// https://github.com/d3/d3-collection
// https://mobx.js.org/refguide/map.html
// holy moley
// https://www.scala-js.org/doc/sjs-for-js/es6-to-scala-part2.html
// https://ariya.io/2013/07/sequences-using-javascript-array
// https://forums.anandtech.com/threads/constructors-controllers-instantiation-and-hashes-in-js-and-angularjs.2371137/
// http://cljs.info/cheatsheet/
// https://github.com/emberjs/ember.js/blob/v2.14.1/packages/ember-metal/lib/map.js#L219
//
// kind of interesting, lame version, could be helpful with graphql?
// http://www.samtobia.com/?tag=schematypes
// https://github.com/balderdashy/waterline-schema/blob/master/lib/waterline-schema/schema.js
// looks solid, but rather large
// https://takuyaa.github.io/kuromoji.js/jsdoc/TokenInfoDictionary.js.html
// v8
// https://chromium.googlesource.com/external/v8/+/master/src/
//
//
// name for map/set: collection
// https://chromium.googlesource.com/external/v8/+/master/src/collection.js
// trie
// https://johnresig.com/blog/javascript-trie-performance-analysis/
// utils, IZZES
// https://github.com/riot/riot/blob/master/riot%2Bcompiler.js#L52
// https://github.com/wycats/handlebars.js/blob/master/lib/handlebars/utils.js
// https://github.com/emberjs/ember.js/tree/master/packages/ember-utils/lib
//
//
// meh
// https://github.com/krakenjs/kraken-js
// https://github.com/wycats/handlebars.js/
// hash fns
// http://algs4.cs.princeton.edu/34hash/
// http://robl.co/implement-your-own-hashmap/
//
// info?
// https://codereview.stackexchange.com/questions/57614/convert-object-array-to-hash-map-using-lodash
// off-code-topic, google code interview
// https://www.interviewcake.com/concept/java/hash-map
// also off topic, java
// https://haxe.org/manual/std-Map.html
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiSGFzaE1hcC5qcyIsInNvdXJjZXMiOlsiSGFzaE1hcC5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBmYXN0ZXN0IG9iamVjdCBPUiB0eXBlZCBhcnJheSBoYXNoIE9SIGhhc2htYXAgT1Iga2V5dmFsIGpzXG4vL1xuLy8gaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSmF2YVNjcmlwdC9HdWlkZS9JbmRleGVkX2NvbGxlY3Rpb25zXG4vL1xuLy8gaHR0cDovL3d3dy5tb2phdmVsaW51eC5jb20vYXJ0aWNsZXMvamF2YXNjcmlwdF9oYXNoZXMuaHRtbFxuLy8gaHR0cHM6Ly9sZWZ0c2hpZnQuaW8vNC1qYXZhc2NyaXB0LW9wdGltaXNhdGlvbnMteW91LXNob3VsZC1rbm93XG4vLyBodHRwOi8vd3d3Lmh0bWw1Z2FtZWRldnMuY29tL3RvcGljLzExODgtamF2YXNjcmlwdC1oYXNobWFwLXdpdGgtZmFzdC1rZXl2YWx1ZXMtaXRlcmF0aW9uL1xuXG4vLyB0b3RhbGx5IHdyb25nXG4vLyBodHRwczovL2Rhdmlkd2Fsc2gubmFtZS9vYmplY3QtYXJyYXktaW5kZXhcbi8vXG4vLyAtLS1cbi8vIGh0dHA6Ly93d3cuc2hhbWFzaXMubmV0LzIwMDkvMDkvZmFzdC1hbGdvcml0aG0tdG8tZmluZC11bmlxdWUtaXRlbXMtaW4tamF2YXNjcmlwdC1hcnJheS9cblxuLy8gdGVzdCBwZXJmIG9mIHdyYXBwaW5nIG1ldGhvZHMgaW5zdGVhZCBhbmQgc2VlIGd6aXAgc2l6ZSB3aXRoIC5jYWxsIHByb2JhYmx5IGJldHRlclxuXG4vLyByZWFsbHkgZ29vZFxuLy8gaHR0cDovL2pheWNvbnJvZC5jb20vcG9zdHMvNTIvYS10b3VyLW9mLXY4LW9iamVjdC1yZXByZXNlbnRhdGlvblxuXG4vLyBhaWdodFxuLy8gaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL0RPTVN0cmluZy9CaW5hcnlcbi8vIGh0dHBzOi8vc3RhY2tvdmVyZmxvdy5jb20vcXVlc3Rpb25zLzI2MjY0OTU2L2NvbnZlcnQtb2JqZWN0LWFycmF5LXRvLWhhc2gtbWFwLWluZGV4ZWQtYnktYW4tYXR0cmlidXRlLXZhbHVlLW9mLXRoZS1vYmplY3Rcbi8vIGh0dHBzOi8vc3RhY2tvdmVyZmxvdy5jb20vcXVlc3Rpb25zLzEzMzI4NjU4L2FyZS10aGUtYWR2YW50YWdlcy1vZi10eXBlZC1hcnJheXMtaW4tamF2YXNjcmlwdC1pcy10aGF0LXRoZXktd29yay10aGUtc2FtZS1vci1zXG4vLyBodHRwczovL3N0YWNrb3ZlcmZsb3cuY29tL3F1ZXN0aW9ucy8yMDAyOTIzL2phdmFzY3JpcHQtdXNpbmctaW50ZWdlci1hcy1rZXktaW4tYXNzb2NpYXRpdmUtYXJyYXlcblxuLy8gISEhIVxuLy8gaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvQWRkLW9ucy9Db2RlX3NuaXBwZXRzL1N0cmluZ1ZpZXdcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9tYWRtdXJwaHkvc3RyaW5ndmlldy5qc1xuXG4vLyBodHRwOi8vYmFqaWVjYy5jYy9xdWVzdGlvbnMvMTUxMTc3NS90cnlpbmctdG8tZ2V0LWFzbS1qcy10by1yZXR1cm4tYS10eXBlZC1hcnJheVxuLy8gaHR0cDovL29vY21zLm9yZy9xdWVzdGlvbi8xMjAwMjc4L2FyZS10aGUtYWR2YW50YWdlcy1vZi10eXBlZC1hcnJheXMtaW4tamF2YXNjcmlwdC1pcy10aGF0LXRoZXktd29yay10aGUtc2FtZS1vci1zXG5cbi8vIC0tLS0tIFNVUEVSIExPVFMgT0YgQ09ERSAtLS1cbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9XZWJLaXQvd2Via2l0L3RyZWUvbWFzdGVyL0pTVGVzdHMvbWljcm9iZW5jaG1hcmtzXG5cbi8vIGdlbmVyYWwgcGVyZlxuLy8gaHR0cHM6Ly9naXRodWIuY29tL3Y4L3Y4L3dpa2kvRGVzaWduJTIwRWxlbWVudHNcbi8vIGh0dHBzOi8vd3d3LnNtYXNoaW5nbWFnYXppbmUuY29tLzIwMTIvMTEvd3JpdGluZy1mYXN0LW1lbW9yeS1lZmZpY2llbnQtamF2YXNjcmlwdC9cbi8vLT4gUkVNT1hJTkcgQ0xBU1NFUyBodHRwOi8vanNwZXJmLmNvbS9wcm90b3R5cGFsLXBlcmZvcm1hbmNlLzU0XG5cbi8vIGdpdmVzIG1lIGFuIGlkZWEgdG8gYWRkIGBoYXNPd25Qcm9wZXJ0eWAgbWV0aG9kIG9uIGNoYWluYWJsZVxuLy8gc28gd2hlbiBpdCBpcyBjYWxsZWQsIHRoZW4gSSBjYW4gY2hlY2sgdGhlIGBzdG9yZWBcbi8vIGh0dHA6Ly9yeWFubW9yci5jb20vdHJ1ZS1oYXNoLW1hcHMtaW4tamF2YXNjcmlwdC9cblxuLy8gR29vZ2xlIFNvdW5kU2NyaXB0OiBmYXN0ZXIgT09QIGZvciBKYXZhU2NyaXB0XG4vLyBodHRwOi8vMmFsaXR5LmNvbS8yMDE1LzAyL3NvdW5kc2NyaXB0Lmh0bWxcbi8vIGh0dHBzOi8vdjhwcm9qZWN0LmJsb2dzcG90LmNhL1xuLy8gaHR0cHM6Ly9naXRodWIuY29tL3J3YWxkcm9uL3RjMzktbm90ZXMvYmxvYi9tYXN0ZXIvZXM2LzIwMTUtMDEvSlNFeHBlcmltZW50YWxEaXJlY3Rpb25zLnBkZlxuLy8gaHR0cHM6Ly9naXRodWIuY29tL1JlZmluZXJ5SlMvU2FuZVNjcmlwdFxuLy8gaHR0cHM6Ly93d3cucmVkZGl0LmNvbS9yL2phdmFzY3JpcHQvY29tbWVudHMvMnV6dWV1L25ld19qc19leHBlcmltZW50c19ieV90aGVfZ29vZ2xlX3Y4X3RlYW0vXG4vLyBodHRwczovL2dpdGh1Yi5jb20vcndhbGRyb24vdGMzOS1ub3Rlcy9ibG9iL21hc3Rlci9lczYvMjAxNS0wMS9KU0V4cGVyaW1lbnRhbERpcmVjdGlvbnMucGRmXG5cbi8vIGRhdGEgc3RydWN0dXJlcyFcbi8vIGludGVyZXN0aW5nIG1ldGhvZHMgZm9yIGNoYWluYWJsZSAtIGJlc3Qgb25lcyBzaGl0XG4vLyBodHRwOi8vd3d3LnRpbWRvd24uY28udWsvanNoYXNodGFibGUvXG4vLyBodHRwOi8vd3d3LmNvbGxlY3Rpb25zanMuY29tL2Zhc3Qtc2V0XG4vLyBodHRwczovL3RoZXN0b3JlZnJvbnQuZ2l0aHViLmlvL0RhdGFDb2xsZWN0aW9uLmpzL1xuLy8gaHR0cHM6Ly9naXRodWIuY29tL3BsdW1hMC9vcmRlcmVkLWhhc2htYXBcbi8vIGh0dHA6Ly93d3cuaS1wcm9ncmFtbWVyLmluZm8vcHJvZ3JhbW1pbmcvamF2YXNjcmlwdC8xNDQxLWphdmFzY3JpcHQtZGF0YS1zdHJ1Y3R1cmVzLXRoZS1hc3NvY2lhdGl2ZS1hcnJheS5odG1sXG4vLyBodHRwOi8vd3d3Lm9iamlzLmNvbS9mb3JtYXRpb25leHRqcy9saWIvZXh0anMtNC4wLjAvZG9jcy9hcGkvRXh0LnV0aWwuSGFzaE1hcC5odG1sXG4vLyBodHRwczovL2dpdGh1Yi5jb20vZDMvZDMtY29sbGVjdGlvblxuLy8gaHR0cHM6Ly9tb2J4LmpzLm9yZy9yZWZndWlkZS9tYXAuaHRtbFxuXG4vLyBob2x5IG1vbGV5XG4vLyBodHRwczovL3d3dy5zY2FsYS1qcy5vcmcvZG9jL3Nqcy1mb3ItanMvZXM2LXRvLXNjYWxhLXBhcnQyLmh0bWxcblxuLy8gaHR0cHM6Ly9hcml5YS5pby8yMDEzLzA3L3NlcXVlbmNlcy11c2luZy1qYXZhc2NyaXB0LWFycmF5XG4vLyBodHRwczovL2ZvcnVtcy5hbmFuZHRlY2guY29tL3RocmVhZHMvY29uc3RydWN0b3JzLWNvbnRyb2xsZXJzLWluc3RhbnRpYXRpb24tYW5kLWhhc2hlcy1pbi1qcy1hbmQtYW5ndWxhcmpzLjIzNzExMzcvXG4vLyBodHRwOi8vY2xqcy5pbmZvL2NoZWF0c2hlZXQvXG4vLyBodHRwczovL2dpdGh1Yi5jb20vZW1iZXJqcy9lbWJlci5qcy9ibG9iL3YyLjE0LjEvcGFja2FnZXMvZW1iZXItbWV0YWwvbGliL21hcC5qcyNMMjE5XG4vL1xuLy8ga2luZCBvZiBpbnRlcmVzdGluZywgbGFtZSB2ZXJzaW9uLCBjb3VsZCBiZSBoZWxwZnVsIHdpdGggZ3JhcGhxbD9cbi8vIGh0dHA6Ly93d3cuc2FtdG9iaWEuY29tLz90YWc9c2NoZW1hdHlwZXNcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9iYWxkZXJkYXNoeS93YXRlcmxpbmUtc2NoZW1hL2Jsb2IvbWFzdGVyL2xpYi93YXRlcmxpbmUtc2NoZW1hL3NjaGVtYS5qc1xuXG4vLyBsb29rcyBzb2xpZCwgYnV0IHJhdGhlciBsYXJnZVxuLy8gaHR0cHM6Ly90YWt1eWFhLmdpdGh1Yi5pby9rdXJvbW9qaS5qcy9qc2RvYy9Ub2tlbkluZm9EaWN0aW9uYXJ5LmpzLmh0bWxcblxuLy8gdjhcbi8vIGh0dHBzOi8vY2hyb21pdW0uZ29vZ2xlc291cmNlLmNvbS9leHRlcm5hbC92OC8rL21hc3Rlci9zcmMvXG4vL1xuLy9cbi8vIG5hbWUgZm9yIG1hcC9zZXQ6IGNvbGxlY3Rpb25cbi8vIGh0dHBzOi8vY2hyb21pdW0uZ29vZ2xlc291cmNlLmNvbS9leHRlcm5hbC92OC8rL21hc3Rlci9zcmMvY29sbGVjdGlvbi5qc1xuXG4vLyB0cmllXG4vLyBodHRwczovL2pvaG5yZXNpZy5jb20vYmxvZy9qYXZhc2NyaXB0LXRyaWUtcGVyZm9ybWFuY2UtYW5hbHlzaXMvXG5cbi8vIHV0aWxzLCBJWlpFU1xuLy8gaHR0cHM6Ly9naXRodWIuY29tL3Jpb3QvcmlvdC9ibG9iL21hc3Rlci9yaW90JTJCY29tcGlsZXIuanMjTDUyXG4vLyBodHRwczovL2dpdGh1Yi5jb20vd3ljYXRzL2hhbmRsZWJhcnMuanMvYmxvYi9tYXN0ZXIvbGliL2hhbmRsZWJhcnMvdXRpbHMuanNcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9lbWJlcmpzL2VtYmVyLmpzL3RyZWUvbWFzdGVyL3BhY2thZ2VzL2VtYmVyLXV0aWxzL2xpYlxuLy9cbi8vXG4vLyBtZWhcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9rcmFrZW5qcy9rcmFrZW4tanNcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS93eWNhdHMvaGFuZGxlYmFycy5qcy9cblxuLy8gaGFzaCBmbnNcbi8vIGh0dHA6Ly9hbGdzNC5jcy5wcmluY2V0b24uZWR1LzM0aGFzaC9cbi8vIGh0dHA6Ly9yb2JsLmNvL2ltcGxlbWVudC15b3VyLW93bi1oYXNobWFwL1xuLy9cblxuLy8gaW5mbz9cbi8vIGh0dHBzOi8vY29kZXJldmlldy5zdGFja2V4Y2hhbmdlLmNvbS9xdWVzdGlvbnMvNTc2MTQvY29udmVydC1vYmplY3QtYXJyYXktdG8taGFzaC1tYXAtdXNpbmctbG9kYXNoXG5cbi8vIG9mZi1jb2RlLXRvcGljLCBnb29nbGUgY29kZSBpbnRlcnZpZXdcbi8vIGh0dHBzOi8vd3d3LmludGVydmlld2Nha2UuY29tL2NvbmNlcHQvamF2YS9oYXNoLW1hcFxuLy8gYWxzbyBvZmYgdG9waWMsIGphdmFcbi8vIGh0dHBzOi8vaGF4ZS5vcmcvbWFudWFsL3N0ZC1NYXAuaHRtbFxuIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OzsifQ==