A JSDOM alternative with focus on performance.
Happy DOM aim to support the most common functionality of a web browser.
Read more about how to use Happy DOM
-
Custom Elements (Web Components)
-
Shadow Root (Shadow DOM)
-
Mutation Observer
-
Tree Walker
-
Fetch
And much more..
This repository is a Monorepo. Each package lives under packages/<package>
.
This package contains the core functionality of Happy DOM.
This package makes it possible to use Happy DOM with Jest.
This package makes it easier to setup servering side rendering of web components by handling the setup of the Node VM Context for you.
A utility that registers Happy DOM globally, which makes it possible to use Happy DOM for testing in a Node environment.
Operation | JSDOM | Happy DOM |
---|---|---|
Import / Require | 333 ms | 45 ms |
Parse HTML | 256 ms | 26 ms |
Serialize HTML | 65 ms | 8 ms |
Render custom element | 214 ms | 19 ms |
querySelectorAll('tagname') | 4.9 ms | 0.7 ms |
querySelectorAll('.class') | 6.4 ms | 3.7 ms |
querySelectorAll('[attribute]') | 4.0 ms | 1.7 ms |
querySelectorAll('[class~="name"]') | 5.5 ms | 2.9 ms |
querySelectorAll(':nth-child(2n+1)') | 10.4 ms | 3.8 ms |
See how the test was done here
- The methods window.whenAsyncComplete() and window.cancelAsync() has been moved to window.happyDOM.whenAsyncComplete() and window.happyDOM.cancelAsync()
-
Lerna is used for managing all packages within a single repository
-
Full support for querySelector() and querySelectorAll()
-
Server side rendering has been split out to its own package
-
All functionality is now covered by unit tests
-
Automated release process by publishing to NPM automatically when a pull request is merged
-
Release notes are generated automatically by using Github Releases
-
A lot of minor bug fixes