docs: add opinions
This commit is contained in:
@@ -26,7 +26,7 @@ productive package.
|
|||||||
- [License](#license)
|
- [License](#license)
|
||||||
|
|
||||||
## Features
|
## Features
|
||||||
- __minimal size:__ weighing under `8kb`, `choo` is a tiny little framework
|
- __minimal size:__ weighing `7kb`, `choo` is a tiny little framework
|
||||||
- __single state:__ immutable single state helps reason about changes
|
- __single state:__ immutable single state helps reason about changes
|
||||||
- __small api:__ with only 6 methods, there's not a lot to learn
|
- __small api:__ with only 6 methods, there's not a lot to learn
|
||||||
- __minimal tooling:__ built for the cutting edge `browserify` compiler
|
- __minimal tooling:__ built for the cutting edge `browserify` compiler
|
||||||
@@ -227,8 +227,7 @@ app.model({
|
|||||||
## Rendering in Node
|
## Rendering in Node
|
||||||
Sometimes it's necessary to render code inside of Node; for serving first
|
Sometimes it's necessary to render code inside of Node; for serving first
|
||||||
requests, testing or other purposes. Applications that are capable of being
|
requests, testing or other purposes. Applications that are capable of being
|
||||||
rendered in both Node and the browser are called _[isomorphic
|
rendered in both Node and the browser are called _[isomorphic][isomorphic]_.
|
||||||
applications][isomorphic]_.
|
|
||||||
|
|
||||||
Rendering in Node is slightly different than in the browser. First off, to
|
Rendering in Node is slightly different than in the browser. First off, to
|
||||||
maintain performance all calls to `subscriptions`, `effects`, and `reducers`
|
maintain performance all calls to `subscriptions`, `effects`, and `reducers`
|
||||||
@@ -236,11 +235,9 @@ are disabled. That means you need to know what the state of your application is
|
|||||||
going to be _before_ you render it - no cheating!
|
going to be _before_ you render it - no cheating!
|
||||||
|
|
||||||
Secondly, the `send()` method inside `router` and `view` has been disabled. If
|
Secondly, the `send()` method inside `router` and `view` has been disabled. If
|
||||||
you call it your program will crash.
|
you call it your program will crash. Disabling all these things means that your
|
||||||
|
program will render [`O(n)`][big-o], which is super neat. Off to [10.000
|
||||||
Disabling all these things means that your program will render [`O(n)`][big-o]
|
QPS][qps] we go!
|
||||||
(computer science speak for "constant time"), which is super neat. Off to
|
|
||||||
[10.000 QPS][qps] we go!
|
|
||||||
|
|
||||||
To render in Node call the `.toString()` method instead of `.start()`. The
|
To render in Node call the `.toString()` method instead of `.start()`. The
|
||||||
first argument is the path that should be rendered, the second is the state:
|
first argument is the path that should be rendered, the second is the state:
|
||||||
@@ -311,10 +308,39 @@ Start the application. Returns a DOM element that can be mounted using
|
|||||||
|
|
||||||
## FAQ
|
## FAQ
|
||||||
### How does choo compare to X?
|
### How does choo compare to X?
|
||||||
- __react:__ [tbi]
|
Ah, so this is where I get to rant. `choo` (_chugga-chugga-chugga-choo-choo!_)
|
||||||
- __mithril:__ [tbi]
|
was built because other options didn't quite cut it for me, so instead of
|
||||||
- __preact:__ [tbi]
|
presenting some faux-objective chart with skewed benchmarks and checklists I'll
|
||||||
- __angular2:__ [tbi]
|
give you my opinions directly instead. Ready? Here goes:
|
||||||
|
- __react:__ `react` is kind of big (`155kb` was it?), has a lot of new, odd
|
||||||
|
words and does weird things with versioning. They also like classes a lot,
|
||||||
|
and enforce a _lot_ of abstractions. It also encourages the use of `JSX` and
|
||||||
|
`babel` which break _JavaScript, The Language™_. And all that without even
|
||||||
|
making clear how code should flow, which is bad in a team setting. I don't
|
||||||
|
like complicated things and in my view React is one of them. `react` is not
|
||||||
|
for me.
|
||||||
|
- __mithril:__ never used it, never will. I didn't like the API, but if you
|
||||||
|
like it maybe it's worth a shot - the API seems small enough. I wouldn't know
|
||||||
|
how pleasant it is past face value.
|
||||||
|
- __preact:__ a pretty cool idea; seems to fix most of what is wrong with
|
||||||
|
`react` - except what is broken by design (the API). It also doesn't fix the
|
||||||
|
large dependencies `react` seems to use (e.g. `react-router` and friends). If
|
||||||
|
`react` is your jam, and you will not budge, sitting at `3kb` this is
|
||||||
|
probably a welcome gift.
|
||||||
|
- __angular:__ definitely not for me. I like small things with a clear mental
|
||||||
|
model; `angular` doesn't tick any box in my book of nice things.
|
||||||
|
- __angular2:__ I'm not sure what's exactly changed, but I know the addition of
|
||||||
|
`TypeScript` and `RxJS` definitely hasn't made things simpler. Last I checked
|
||||||
|
it was `~200kb` in size before including some monstrous extra deps. I guess
|
||||||
|
`angular` and I will just never get along.
|
||||||
|
- __mercury:__ ah, `mercury` is an interesting one. It seemed like a brilliant
|
||||||
|
idea until I started using it - the abstractions felt heavy, and it took team
|
||||||
|
members a long time to pick up. In the end I think using `mercury` helped
|
||||||
|
greatly in getting `choo` where it is now.
|
||||||
|
- __deku:__ `deku` is fun. I even contributed a bit in the early days. It could
|
||||||
|
probably best be described as "a functional version of `react`". The
|
||||||
|
dependence on `JSX` isn't great, but give it a shot if you think it looks
|
||||||
|
neat.
|
||||||
|
|
||||||
### Which packages was choo built on?
|
### Which packages was choo built on?
|
||||||
- __views:__ [`yo-yo`](https://github.com/maxogden/yo-yo)
|
- __views:__ [`yo-yo`](https://github.com/maxogden/yo-yo)
|
||||||
|
|||||||
Reference in New Issue
Block a user