Git Product home page Git Product logo

Comments (6)

vweevers avatar vweevers commented on September 2, 2024 1

I'm not even sure you'd save anything in the long run - Buffer gives extensive encoder support - that would have to be moved in level* if its not on the Buffer.

The answer for that is to not use level, which is a convenience module that is unlikely to drop buffer. Folks that don't want buffer should instead do something like:

const compose = require('level-compose')
const factory = compose(leveldown, levelup)
const db = factory('./db')

Which is to say, those folks won't get encodings, unless we write an alternative to encoding-down (see below). Down the line, once abstract-leveldown reaches feature parity with levelup, folks can use leveldown (or other) directly.

WIP list of tasks to make buffer optional (feel free to edit):

  • Replace Buffer.isBuffer with is-buffer (Level/abstract-leveldown@8f79234)
  • Determine what to do with asBuffer / keyAsBuffer / valueAsBuffer
  • Add db.supports.buffer (level-supports) and use that in abstract tests
  • Write a new module that, like level, exports either leveldown or level-js depending on environment. To get the same convenience as level but without buffer.
  • Write a new module similar to encoding-down but with bring-your-own codecs
  • Determine what to do in memdown, or write an alternative that is backed by typed arrays
  • Determine what to do in level-js, oh boy

from community.

vweevers avatar vweevers commented on September 2, 2024

Some nuance: buffer is 147 bytes minified and gzipped. Calling it "massive" isn't fair, especially considering the interoperability that it enables. That said, I understand the need to shave off bytes wherever possible.

Unfortunately, the level ecosystem does use buffer heavily. The dozens of modules probably only use a small part of buffer's API, that's true, but switching to typed arrays (or restricting ourselves to UInt8Array's API) is nevertheless a huge breaking change and a huge effort.

from community.

vweevers avatar vweevers commented on September 2, 2024

I'd like to keep this open as a reminder. And to allow folks to chime in; I don't want to give the signal "it's never gonna happen".

from community.

SilentCicero avatar SilentCicero commented on September 2, 2024

from community.

MeirionHughes avatar MeirionHughes commented on September 2, 2024

I'm not even sure you'd save anything in the long run - Buffer gives extensive encoder support - that would have to be moved in level* if its not on the Buffer.

If its something you're passionate about, I'd recommend forking abstract-leveldown and try passing a Buffer prototype through to its constructor, which would be used in-place of require'ing the existing Buffer ponyfill. doing it this way is the least painful approach I can think of - but give the user the option to pass a custom cut-down prototype explicit for their needs and stack.

I'm more concerned with multiple Buffer ponyfills more than anything - I'm pretty sure current build (webpack) is bundling another Buffer polyfill. Also better support for Uint8Array would be nice: in my custom encoder I have to wrap a Uint8Array in a Buffer else its re-encoded, for some reason.

from community.

vweevers avatar vweevers commented on September 2, 2024

Covered by #102 and https://github.com/Level/transcoder. It will be possible to use either Uint8Array, Buffer, or both, and to exclude the buffer shim from browser bundles if you choose to use Uint8Array.

from community.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.