Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

perf(core): filter rulesDynamic in resolveConfig #1534

Merged
merged 1 commit into from Sep 4, 2022
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
16 changes: 8 additions & 8 deletions README.md
Expand Up @@ -29,8 +29,8 @@ The instant on-demand Atomic CSS engine.
Inspired by [Windi CSS](http://windicss.org/), [Tailwind CSS](https://tailwindcss.com/), and [Twind](https://github.com/tw-in-js/twind), but:

- [Fully customizable](#configurations) - no core utilities, all functionalities are provided via presets.
- No parsing, no AST, no scanning, it's **INSTANT** (200x faster than Windi CSS or Tailwind JIT).
- ~5kb min+gzip - zero deps and browser friendly.
- No parsing, no AST, no scanning, it's **INSTANT** (5x faster than Windi CSS or Tailwind JIT).
- ~6kb min+brotli - zero deps and browser friendly.
- [Shortcuts](#shortcuts) - aliasing utilities, dynamically.
- [Attributify mode](https://github.com/unocss/unocss/tree/main/packages/preset-attributify/) - group utilities in attributes.
- [Pure CSS Icons](https://github.com/unocss/unocss/tree/main/packages/preset-icons/) - use any icon as a single class.
Expand All @@ -45,13 +45,13 @@ Inspired by [Windi CSS](http://windicss.org/), [Tailwind CSS](https://tailwindcs
###### Benchmark

```
2022/7/2 08:38:12 PM
1656 utilities | x50 runs (min build time)
2022/9/3 22:40:50
1656 utilities | x200 runs (75% build time)

none 5.87 ms / delta. 0.00 ms
unocss v0.43.0 9.17 ms / delta. 3.30 ms (x1.00)
tailwindcss v3.1.4 497.24 ms / delta. 491.37 ms (x148.70)
windicss v3.5.5 869.47 ms / delta. 863.60 ms (x261.35)
none 20.01 ms / delta. 0.00 ms
unocss v0.45.14 199.76 ms / delta. 179.75 ms (x1.00)
tailwindcss v3.1.8 875.51 ms / delta. 855.50 ms (x4.76)
windicss v3.5.6 1342.37 ms / delta. 1322.36 ms (x7.36)
```

## Installation
Expand Down
2 changes: 1 addition & 1 deletion bench/build.mjs
Expand Up @@ -17,7 +17,7 @@ function BuildTimePlugin(name) {
buildStart() {
start = performance.now()
},
buildEnd() {
closeBundle() {
result[name].time = performance.now() - start
},
}
Expand Down
17 changes: 11 additions & 6 deletions bench/gen.mjs
Expand Up @@ -81,14 +81,12 @@ export const classes = [
]

export async function writeMock() {
const content1 = `document.getElementById('app').className = "${shuffle(classes).join(' ')}"`
const content2 = `document.getElementById('app').className = "${shuffle(classes).join(' ')}"`
const content3 = `document.getElementById('app').className = "${shuffle(classes).join(' ')}"`
const content = () => `document.getElementById('app').innerHTML = \`${chunk(shuffle(classes)).map(c => `<div class="${c.join(' ')}" />`).join('\n')}\``
if (!existsSync(join(dir, 'source')))
await fs.mkdir(join(dir, 'source'))
await fs.writeFile(join(dir, 'source/gen1.js'), content1, 'utf-8')
await fs.writeFile(join(dir, 'source/gen2.js'), content2, 'utf-8')
await fs.writeFile(join(dir, 'source/gen3.js'), content3, 'utf-8')
await fs.writeFile(join(dir, 'source/gen1.js'), content(), 'utf-8')
await fs.writeFile(join(dir, 'source/gen2.js'), content(), 'utf-8')
await fs.writeFile(join(dir, 'source/gen3.js'), content(), 'utf-8')
await fs.writeFile(join(dir, 'source/gen.js'), 'import "./gen1";import "./gen2";import "./gen3";', 'utf-8')
return classes
}
Expand All @@ -110,3 +108,10 @@ export function shuffle(array) {

return array
}

export function chunk(array, size = 15) {
const chunks = []
for (let i = 0; i < array.length; i += size)
chunks.push(array.slice(i, i + size))
return chunks
}