mercury has some interesting ideas but they are not very practical at scale.
tonic is a lightweigth component system on top of web components that leverages
the browsers HTML parser for the heavy lifting instead of virtual-dom.
It comes with a set of components which help with building
apps more quickly by having some re-usable components out of the box.
Description
A truly modular frontend framework
To understand what I mean by truly modular just read the source
Examples
Hello world
'use strict';vardocument=require('global/document');varhg=require('mercury');varh=require('mercury').h;functionApp(){returnhg.state({value: hg.value(0),channels: {clicks: incrementCounter}});}functionincrementCounter(state){state.value.set(state.value()+1);}App.render=functionrender(state){returnh('div.counter',['The state ',h('code','clickCount'),' has value: '+state.value+'.',h('input.button',{type: 'button',value: 'Click me!','ev-click': hg.send(state.channels.clicks)})]);};hg.app(document.body,App(),App.render);
mercury is similar to react, however it's larger in scope,
it is better compared against om or
quiescent
mercury leverages virtual-dom which uses
an immutable vdom structure
mercury comes with observ-struct which uses
immutable data for your state atom
mercury is truly modular, you can trivially swap out
subsets of it for other modules
mercury source code itself is maintainable, the modules it
uses are all small, well tested and well documented.
You should not be afraid to use mercury in production
as it's easy to maintain & fix.
mercury encourages zero dom manipulation in your application code. As far as your application is concerned
elements do not exist. This means you don't need to reference DOM elements when rendering or when handling
events
mercury is compact, it's 11kb min.gzip.js, that's smaller than backbone.
mercury strongly encourages FRP techniques and discourages local mutable state.
mercury comes with FP features like time-travel / easy undo out of the box.
mercury is lean, it's an weekend's read at 2.5kloc. (virtual-dom is 1.1kloc, an evening's read.)
compared to react which is almost 20kloc (a month's read)
Modules
mercury is a small glue layer that composes a set of modules
that solves a subset of the frontend problem.
If mercury is not ideal for your needs, you should check out
the individual modules and see if you can re-use something.
Alternatively if the default set of modules in mercury doesn't
work for you, you can just require other modules. It's possible
to for example, swap out vtree with
react or swap out observ-struct
with backbone
WIP. In lieu of documentation please see examples :(
Installation
npm install mercury
Development
If you want to develop on mercury you can clone the code
git clone [email protected]:Raynos/mercury
cd mercury
npm install
npm test
npm run tasks
npm test runs the tests
npm run jshint will run jshint on the code
npm run disc will open discify (if globally installed)
npm run build will build the html assets for gh-pages
npm run examples will start a HTTP server that shows examples
npm run dist will create a distributed version of mercury
npm run modules-docs will (re)generate docs of mercury modules
Inspirations
A lot of the philosophy and design of mercury is inspired by
the following:
react for documenting and explaining the concept
of a virtual DOM and its diffing algorithm
om for explaining the concept and benefits of
immutable state and time travel.
elm for explaining the concept of FRP and having a
reference implementation of FRP in JavaScript. I wrote a
pre-cursor to mercury that was literally a
re-implementation of elm in javascript
(graphics)
reflex for demonstrating the techniques used to
implement dynamic inputs.
请发表评论