nuxt-optimization-plugin
Version:
Perform performance optimization of nuxt projects
157 lines (117 loc) • 4.48 kB
Markdown
# Nuxt Delay Hydration
[![npm version][npm-version-src]][npm-version-href]
[![npm downloads][npm-downloads-src]][npm-downloads-href]
[![License][license-src]][license-href]
[![Nuxt][nuxt-src]][nuxt-href]
Improve your Nuxt.js Google Lighthouse score by delaying hydration ⚡️
## Features
- 🚀 **Performance Boost** - Significantly improve your Lighthouse performance score
- 🎯 **Smart Hydration** - Multiple hydration strategies (init, mount, manual)
- 📱 **Device Aware** - Different timeout settings for mobile and desktop
- 🎮 **Event Driven** - Trigger hydration on user interactions
- 🔄 **Event Replay** - Replay user interactions after hydration
- 🐛 **Debug Mode** - Built-in debugging for development
- 🔧 **Highly Configurable** - Fine-tune every aspect of the delay behavior
## Quick Setup
1. Add `nuxt-optimization-plugin` dependency to your project
```bash
# Using npm
npm install nuxt-optimization-plugin
# Using yarn
yarn add nuxt-optimization-plugin
# Using pnpm
pnpm add nuxt-optimization-plugin
```
2. Add `nuxt-optimization-plugin` to the `modules` section of `nuxt.config.ts`
That's it! You can now use Nuxt Delay Hydration in your Nuxt app ✨
## Configuration
### Advanced Configuration
```js
// nuxt.config.ts
export default defineNuxtConfig({
modules: ["nuxt-optimization-plugin"],
delayHydration: {
mode: "mount",
hydrateOnEvents: ["click", "touchstart"], // Only on user interaction
postIdleTimeout: {
mobile: 8000, // Longer delay on mobile
desktop: 4000,
},
replayClick: true, // Replay user clicks
debug: process.env.NODE_ENV === "development",
},
});
```
### Manual Hydration
```js
// nuxt.config.ts
export default defineNuxtConfig({
modules: ["nuxt-optimization-plugin"],
delayHydration: {
mode: "manual",
},
});
```
```vue
<!-- In your component -->
<template>
<div>
<button @click="triggerHydration">Load Interactive Content</button>
</div>
</template>
<script setup>
const triggerHydration = () => {
// Manually trigger hydration
if (process.client && window.$delayHydration) {
window.$delayHydration.hydrate();
}
};
</script>
```
## How It Works
This module delays the hydration process of your Nuxt.js application, which can significantly improve your initial page load performance and Lighthouse scores. Here's what happens:
1. **Initial Load**: The page loads with static HTML/CSS, providing immediate visual feedback
2. **Delayed Hydration**: JavaScript hydration is delayed based on your chosen strategy
3. **Smart Triggering**: Hydration occurs when users interact with the page or after specified timeouts
4. **Event Replay**: User interactions can be replayed after hydration completes
## Performance Benefits
- ⚡ **Faster First Contentful Paint (FCP)**
- 🎯 **Improved Largest Contentful Paint (LCP)**
- 📊 **Better Lighthouse Performance Score**
- 🚀 **Reduced Time to Interactive (TTI)**
- 📱 **Enhanced Mobile Performance**
## Development
```bash
# Install dependencies
pnpm install
# Generate type stubs
pnpm run stub
# Develop with the playground
pnpm run dev
# Build the module
pnpm run build
# Run ESLint
pnpm run lint
# Run tests
pnpm run test
```
## Contributing
Contributions are welcome! Please read the [contributing guidelines](CONTRIBUTING.md) first.
1. Fork the repository
2. Create your feature branch (`git checkout -b feature/amazing-feature`)
3. Commit your changes (`git commit -m 'Add some amazing feature'`)
4. Push to the branch (`git push origin feature/amazing-feature`)
5. Open a Pull Request
## License
[MIT License](./LICENSE)
## Credits
Made with ❤️ by [Harlan Wilton](https://github.com/harlan-zw)
<!-- Badges -->
[npm-version-src]: https://img.shields.io/npm/v/nuxt-optimization-plugin/latest.svg?style=flat&colorA=18181B&colorB=28CF8D
[npm-version-href]: https://npmjs.com/package/nuxt-optimization-plugin
[npm-downloads-src]: https://img.shields.io/npm/dm/nuxt-optimization-plugin.svg?style=flat&colorA=18181B&colorB=28CF8D
[npm-downloads-href]: https://npmjs.com/package/nuxt-optimization-plugin
[license-src]: https://img.shields.io/npm/l/nuxt-optimization-plugin.svg?style=flat&colorA=18181B&colorB=28CF8D
[license-href]: https://npmjs.com/package/nuxt-optimization-plugin
[nuxt-src]: https://img.shields.io/badge/Nuxt-18181B?logo=nuxt.js
[nuxt-href]: https://nuxt.com