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

ビルドツールViteの最適化を図りましょう #1122

Open
KATO-Hiro opened this issue Aug 15, 2024 · 5 comments
Open

ビルドツールViteの最適化を図りましょう #1122

KATO-Hiro opened this issue Aug 15, 2024 · 5 comments

Comments

@KATO-Hiro
Copy link
Collaborator

KATO-Hiro commented Aug 15, 2024

Background

  • コンポーネントが増えてきたためか、ローカルサーバのリロードがかなり遅くなってきた
    • 待ち時間を少しでも減らしたいので、高速に処理できるツールが望ましい
    • 移行をスムーズにするため、Viteやvitestとの互換性があって欲しい

WHAT

  • Viteの設定を見直すのが先では? + PCの買い替えも検討
    • SvleteKitを採用したことのデメリットとして、各種ツールのサポートが受けられないケースが多い
    • 互換性が担保できないのが痛い

See

https://vitejs.dev/guide/performance

@KATO-Hiro

This comment was marked as outdated.

@KATO-Hiro
Copy link
Collaborator Author

KATO-Hiro commented Aug 18, 2024

代替ツール

@KATO-Hiro KATO-Hiro changed the title ビルドツールをViteから「Farm」に移行しましょう ビルドツールをViteからより高速なツールに移行しましょう Aug 18, 2024
@KATO-Hiro
Copy link
Collaborator Author

KATO-Hiro commented Aug 18, 2024

SvelteKitアプリでビルド速度を向上させるための方法

1. 依存関係の最適化

Viteは依存関係を事前にバンドルすることでビルド速度を向上させます。optimizeDepsオプションを使用して、依存関係の事前バンドルを設定します。

// vite.config.js
import { defineConfig } from 'vite';
import { sveltekit } from '@sveltejs/kit/vite';

export default defineConfig({
  plugins: [sveltekit()],
  optimizeDeps: {
    include: ['some-large-dependency'],
    exclude: ['some-unnecessary-dependency']
  }
});

2. キャッシュの利用

Viteはデフォルトでキャッシュを利用しますが、キャッシュの設定を見直すことでビルド速度を向上させることができます。

// vite.config.js
import { defineConfig } from 'vite';
import { sveltekit } from '@sveltejs/kit/vite';

export default defineConfig({
  plugins: [sveltekit()],
  cacheDir: 'node_modules/.vite_cache'
});

3. コードスプリッティング

コードスプリッティングを使用して、アプリケーションを複数のチャンクに分割することで、初期ロード時間を短縮できます。

// vite.config.js
import { defineConfig } from 'vite';
import { sveltekit } from '@sveltejs/kit/vite';

export default defineConfig({
  plugins: [sveltekit()],
  build: {
    rollupOptions: {
      output: {
        manualChunks: {
          vendor: ['some-large-dependency']
        }
      }
    }
  }
});

4. 開発サーバーの設定

開発サーバーの設定を見直すことで、パフォーマンスを向上させることができます。

// vite.config.js
import { defineConfig } from 'vite';
import { sveltekit } from '@sveltejs/kit/vite';

export default defineConfig({
  plugins: [sveltekit()],
  server: {
    fs: {
      strict: true
    },
    watch: {
      usePolling: true,
      interval: 100
    }
  }
});

5. プラグインの最適化

不要なプラグインを削除したり、プラグインの設定を見直すことでビルド速度を向上させることができます。

6. ホットモジュールリプレースメント(HMR)の設定

HMRの設定を見直すことで、開発中のビルド速度を向上させることができます。

// vite.config.js
import { defineConfig } from 'vite';
import { sveltekit } from '@sveltejs/kit/vite';

export default defineConfig({
  plugins: [sveltekit()],
  server: {
    hmr: {
      overlay: false
    }
  }
});

7. 依存関係のアップデート

依存関係を最新バージョンにアップデートすることで、パフォーマンスが向上する場合があります。

npm update

8. Esbuildの利用

Viteは内部でEsbuildを使用していますが、設定を見直すことでさらにパフォーマンスを向上させることができます。

// vite.config.js
import { defineConfig } from 'vite';
import { sveltekit } from '@sveltejs/kit/vite';

export default defineConfig({
  plugins: [sveltekit()],
  esbuild: {
    target: 'esnext',
    minify: true
  }
});

9. ファイルの監視設定

ファイルの監視設定を見直すことで、リロードのパフォーマンスを向上させることができます。

// vite.config.js
import { defineConfig } from 'vite';
import { sveltekit } from '@sveltejs/kit/vite';

export default defineConfig({
  plugins: [sveltekit()],
  server: {
    watch: {
      ignored: ['**/node_modules/**', '**/.git/**']
    }
  }
});

10. モジュールの分割

大きなモジュールを小さなモジュールに分割することで、ビルド時間を短縮できます。これにより、変更があった部分だけを再ビルドすることができます。

11. SSR(サーバーサイドレンダリング)の設定

SSRを使用する場合、設定を見直すことでビルド速度を向上させることができます。

// svelte.config.js
import adapter from '@sveltejs/adapter-node';
import preprocess from 'svelte-preprocess';

export default {
  preprocess: preprocess(),
  kit: {
    adapter: adapter(),
    target: '#svelte',
    ssr: {
      noExternal: ['some-large-dependency']
    }
  }
};

まとめ

SvelteKitアプリのビルド速度を向上させるためには、依存関係の最適化、キャッシュの利用、コードスプリッティング、開発サーバーの設定、プラグインの最適化、HMRの設定、依存関係のアップデート、Esbuildの利用、ファイルの監視設定、モジュールの分割、SSRの設定など、さまざまな方法があります。これらの対策を組み合わせることで、ビルド速度を大幅に改善することができます。

@KATO-Hiro
Copy link
Collaborator Author

SvelteKitアプリでViteを利用している場合に、画面のリロードが遅くなる一般的な原因と対策。

原因と対策

  1. 大量のコンポーネント

    • コンポーネントが多いと、ビルドやホットリロードの際に処理が遅くなることがあります。
  2. 依存関係の多さ

    • 多くの依存関係があると、ビルド時間が長くなることがあります。
  3. Viteの設定

    • Viteの設定が最適化されていない場合、ビルドやリロードが遅くなることがあります。

高速化のための方法

  1. Viteのキャッシュを有効にする

    • Viteはデフォルトでキャッシュを利用しますが、設定を確認してキャッシュが有効になっていることを確認します。
  2. 依存関係の最適化

    • 不要な依存関係を削除し、必要な依存関係のみをインストールします。
  3. Viteの設定を最適化する

    • vite.config.jsファイルを最適化します。以下に例を示します。
import { defineConfig } from 'vite';
import svelte from '@sveltejs/vite-plugin-svelte';

export default defineConfig({
  plugins: [svelte()],
  optimizeDeps: {
    include: ['some-large-dependency'],
    exclude: ['some-unnecessary-dependency']
  },
  build: {
    sourcemap: false, // ソースマップを無効にすることでビルド時間を短縮
    minify: 'esbuild', // esbuildを使用してビルドを高速化
    target: 'esnext' // 最新のJavaScript仕様をターゲットにする
  },
  server: {
    hmr: {
      overlay: false // HMRのオーバーレイを無効にする
    }
  }
});
  1. TypeScriptの設定を最適化する
    • tsconfig.jsonファイルを最適化します。以下に例を示します。
{
  "extends": "./.svelte-kit/tsconfig.json",
  "compilerOptions": {
    "allowJs": true,
    "checkJs": true,
    "esModuleInterop": true,
    "forceConsistentCasingInFileNames": true,
    "incremental": true,
    "isolatedModules": true,
    "moduleResolution": "bundler",
    "outDir": "build",
    "resolveJsonModule": true,
    "skipLibCheck": true,
    "sourceMap": false, // ソースマップを無効にする
    "strict": true
  },
  "include": ["src/**/*.d.ts", "src/*", "src/**/*.ts", "src/**/*.svelte"],
  "exclude": ["node_modules"]
}
  1. ホットモジュールリプレースメント(HMR)の最適化

    • HMRの設定を最適化することで、リロード時間を短縮できます。
  2. 依存関係のバンドル

    • 大きな依存関係を事前にバンドルすることで、ビルド時間を短縮できます。

まとめ

これらの対策を実施することで、SvelteKitアプリのビルドやリロード時間を短縮し、開発体験を向上させることができます。まずは、ViteとTypeScriptの設定を見直し、不要な依存関係を削除することから始めると良いでしょう。

@KATO-Hiro KATO-Hiro changed the title ビルドツールをViteからより高速なツールに移行しましょう ビルドツールをViteの最適化を図りましょう Aug 20, 2024
@KATO-Hiro KATO-Hiro changed the title ビルドツールをViteの最適化を図りましょう ビルドツールViteの最適化を図りましょう Aug 20, 2024
@KATO-Hiro
Copy link
Collaborator Author

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

1 participant