Skip to content

Commit

Permalink
Improve performances
Browse files Browse the repository at this point in the history
Following #444, I bring perf improvements from @smooth-ui/system into styled-system.
The goal is to make this library the best one and the universal one.

What have changed?

- I switched to the core of @smooth-ui/system, more performant
especially with multiple compose. Composition is now flat, it means you
can compose 10 times and it will not be slower. We are probably in O(n),
where "n" is the number of props.
- I splitted the logic in several files to make it clearer
- I switched to rollup in order to optimize build, provide umd and
improve tree shaking

What are the breaking changes?

- We now rely on the order of props. ES2015 is here and we can rely on
it, see this tweet for context: https://twitter.com/ianstormtaylor/status/1115680037875752963.
- We are more strict in breakpoints, we don't accept a non-existing
breakpoint
- We don't export utilities like get, themeGet, etc...
- PropTypes are no longer included, they can be generated from meta
- We don't return array, just an object with all props merged
- Properties that default to pixels unit (like margin, padding) no
longer include it
  • Loading branch information
gregberge committed Apr 28, 2019
1 parent 9eac078 commit 00ed38e
Show file tree
Hide file tree
Showing 29 changed files with 2,684 additions and 770 deletions.
17 changes: 3 additions & 14 deletions .npmignore
@@ -1,14 +1,3 @@
.DS_Store
.prettierrc
.nyc_output
.travis.yml
coverage
coverage.lcov
bench
docs
src
examples
babel.config.js
test
CONTRIBUTING.md
CODE_OF_CONDUCT.md
/*
!/dist/**/*.js
!/props.js
41 changes: 14 additions & 27 deletions babel.config.js
@@ -1,29 +1,16 @@
module.exports = {
env: {
test: {
presets: [
[ '@babel/env', { loose: true } ],
'@babel/react'
],
plugins: [
'@babel/transform-runtime'
]
},
cjs: {
presets: [
[ '@babel/env', { loose: true } ]
],
plugins: [
'@babel/transform-runtime'
]
},
esm: {
presets: [
[ '@babel/env', { loose: true, modules: false } ]
],
plugins: [
['@babel/transform-runtime', { useESModules: true }]
]
},
module.exports = function getConfig(api) {
const isRollup = api.caller(
caller => caller && caller.name === 'rollup-plugin-babel'
)
if (!isRollup)
return {
presets: [['@babel/preset-env', { loose: true }], '@babel/react'],
}
return {
presets: [['@babel/preset-env', { loose: true, modules: false }]],
plugins: [
'babel-plugin-annotate-pure-calls',
['@babel/transform-runtime', { useESModules: true }],
],
}
}
40 changes: 40 additions & 0 deletions benchmarks/index.js
@@ -0,0 +1,40 @@
/* eslint-disable no-console, import/no-unresolved */
const Benchmark = require('benchmark')

const libs = [
{
name: 'actual',
module: require('../dist/styled-system.cjs'),
},
{
name: 'v4',
module: require('./v4.1.0'),
},
].map(({ name, module: { compose, fontSize, space } }) => {
const system = compose(
fontSize,
space
)
const run = () => system({ p: [10, 20], mt: 10, m: '20px', fontSize: 10 })
return { name, run }
})

const suite = new Benchmark.Suite()

console.log('Initial run...')

libs.forEach(lib => {
console.log(lib.name, lib.run())
suite.add(lib.name, lib.run)
})

console.log('Run suite...')

suite
.on('cycle', event => {
console.log(String(event.target))
})
.on('complete', function onComplete() {
console.log(`Fastest is ${this.filter('fastest').map('name')}`)
})
.run({ async: true })

0 comments on commit 00ed38e

Please sign in to comment.