Coaction - 高性能のマルチスレッド Web アプリケーションを構築するための効率的で柔軟な状態管理ライブラリです。
リポジトリ: https://github.com/unadlib/coaction
最新の Web アプリケーションはますます複雑になり、ブラウザーでできることの限界を押し広げています。シングルスレッドの JavaScript は強力ではありますが、洗練された UI、リアルタイムの対話、データ集約型の計算の要求に応えるのに苦労することがよくあります。このボトルネックは、パフォーマンスの問題、インターフェイスの遅延や応答の鈍さ、リクエスト接続の制限、そして最終的にはユーザー エクスペリエンスの低下につながります。
Web Worker (または SharedWorker) は、並列処理とパフォーマンスの向上への道を提供しますが、新たな一連の課題ももたらします。スレッド全体の状態を管理し、データを効率的に同期し、一貫したアプリケーション ロジックを維持することは、すぐに困難な作業になる可能性があります。既存の状態管理ソリューションは、ワーカー スレッドとの結合が強すぎたり、開発者の生産性を妨げる複雑な抽象化を導入したりすることにより、これらの特定のニーズに対応できないことがよくあります。
Coaction は、最新の Web アプリケーションのマルチスレッドの性質を真に受け入れる状態管理ソリューションの必要性から作成されました。 Coaction は、パフォーマンスと開発者のエクスペリエンスが相互に排他的であるべきではないことを認識しています。 Web ワーカーと共有ワーカーの機能を活用することで、Coaction を使用すると、開発者は計算集約型のタスクと状態管理ロジックをワーカー スレッドからオフロードできるようになり、その結果、より応答性が高く流動的なユーザー インターフェイスが実現します。
Coaction は単なるパフォーマンスではなく、複雑なアプリケーションに対してよりスケーラブルで保守可能なアーキテクチャを実現することを目的としています。 Zustand からインスピレーションを得たライブラリの直感的な API により、スムーズな学習曲線と生産的な開発ワークフローが保証されます。スライス、名前空間、計算されたプロパティのサポートにより、モジュール性とコード構成が促進され、大規模で進化するコードベースの管理が容易になります。
Coaction とデータ トランスポートの統合により、状態同期の新たなレベルの柔軟性が解放されます。 汎用トランスポート プロトコルをサポートすることで、さまざまな通信パターンとアーキテクチャの可能性が広がり、さまざまなアプリケーションの固有のニーズに対応します.
本質的に、Coaction は、開発者がパフォーマンス、開発者のエクスペリエンス、アーキテクチャの整合性を犠牲にすることなく、次世代の Web アプリケーションを構築できるようにします。 これは、Web アプリケーションの複雑さの増大と、効率的なアプリケーションのニーズとの間のギャップを埋めます。 、保守可能でパフォーマンスの高いスレッド間での状態管理。これは、並列処理と応答性がもはやオプションではなく必須となっている世界で、優れたユーザー エクスペリエンスを作成しようと努めている開発者向けに設計されたツールです。リモート同期もサポートしているため、CRDT アプリケーションの構築にも適しています。
Coaction は、Web アプリケーションのマルチスレッド環境 (Web ワーカー、共有ワーカー、さらにはプロセスやデバイス間) で状態を共有および同期するための安全で効率的なソリューションを提供することを目的としています。
主な機能は次のとおりです:
このライブラリは 2 つの主なモードで動作します:
共有モードでは、ライブラリはトランスポート パラメータに基づいて実行コンテキストを自動的に決定し、同期スレッドをシームレスに処理します。
アプリケーションで Coaction を簡単に使用して、複数のタブ、マルチスレッド、またはマルチ処理をサポートできます。
たとえば、複数のタブで共有されている 3D シーンの場合、Coaction を使用して状態管理を簡単に処理できます。
https://github.com/user-attachments/assets/9eb9f4f8-8d47-433a-8eb2-85f044d6d8fa
sequenceDiagram participant Client as Webpage Thread (Client) participant Main as Worker Thread (Main) activate Client Note over Client: Start Worker Thread activate Main Client ->> Main: Trigger fullSync event after startup activate Main Main -->> Client: Synchronize data (full state) deactivate Main Note over Client: User triggers a UI event Client ->> Main: Send Store method and parameters activate Main Main ->> Main: Execute the corresponding method Main -->> Client: Synchronize state (patches) Note over Client: Render new state Main -->> Client: Asynchronously respond with method execution result deactivate Main deactivate Client
10K 配列を更新するために (ops/秒) を測定します。大きいほど良いです (ソースを表示)。
Library | Test Name | Ops/sec |
---|---|---|
@coaction/mobx | bigInitWithoutRefsWithoutAssign | 37.07 |
mobx | bigInitWithoutRefsWithoutAssign | 37.50 |
coaction | bigInitWithoutRefsWithoutAssign | 19,910 |
mobx-keystone | bigInitWithoutRefsWithoutAssign | 7.88 |
@coaction/mobx | bigInitWithoutRefsWithAssign | 1.53 |
mobx | bigInitWithoutRefsWithAssign | 10.77 |
coaction | bigInitWithoutRefsWithAssign | 3.01 |
mobx-keystone | bigInitWithoutRefsWithAssign | 0.13 |
@coaction/mobx | bigInitWithRefsWithoutAssign | 14.66 |
mobx | bigInitWithRefsWithoutAssign | 16.11 |
coaction | bigInitWithRefsWithoutAssign | 152 |
mobx-keystone | bigInitWithRefsWithoutAssign | 2.44 |
@coaction/mobx | bigInitWithRefsWithAssign | 0.98 |
mobx | bigInitWithRefsWithAssign | 8.81 |
coaction | bigInitWithRefsWithAssign | 3.83 |
mobx-keystone | bigInitWithRefsWithAssign | 0.11 |
@coaction/mobx | init | 37.34 |
mobx | init | 42.98 |
coaction | init | 3,524 |
mobx-keystone | init | 40.48 |
この表は、大規模な初期化タスクに関するさまざまな状態管理ライブラリのベンチマークを示しています。 Coaction は劇的に際立っており、特定のシナリオでは少なくとも数百倍高速に実行されます。たとえば、「bigInitWithoutRefsWithoutAssign」テストでは、Coaction は Mobx の 37.5 ops/秒と比較して、約 19,910 ops/秒を達成しており、500 倍以上高速です。同様に、「init」テストでは、Coaction は約 3,524 ops/秒に達するのに対し、Mobx の 42.98 ops/秒は約 80 倍の増加です。これらの結果は、大規模なデータの初期化を処理する際の Coaction の優れた効率を強調しています。
さらに完全なベンチマークも提供する予定です。
npm、yarn、または pnpm 経由で React アプリケーションの @coaction/react をインストールできます。
sequenceDiagram participant Client as Webpage Thread (Client) participant Main as Worker Thread (Main) activate Client Note over Client: Start Worker Thread activate Main Client ->> Main: Trigger fullSync event after startup activate Main Main -->> Client: Synchronize data (full state) deactivate Main Note over Client: User triggers a UI event Client ->> Main: Send Store method and parameters activate Main Main ->> Main: Execute the corresponding method Main -->> Client: Synchronize state (patches) Note over Client: Render new state Main -->> Client: Asynchronously respond with method execution result deactivate Main deactivate Client
フレームワークなしでコア ライブラリを使用したい場合は、npm、yarn、または pnpm 経由で coaction をインストールできます。
npm install coaction @coaction/react
npm install coaction
counter.js:
import { create } from '@coaction/react'; const useStore = create((set, get) => ({ count: 0, increment: () => set((state) => state.count++) })); const CounterComponent = () => { const store = useStore(); return ( <div> <p>Count: {store.count}</p> <button onClick={store.increment}>Increment</button> </div> ); };
worker.js:
import { create } from '@coaction/react'; export const counter = (set) => ({ count: 0, increment: () => set((state) => state.count++) });
import { create } from '@coaction/react'; import { counter } from './counter'; const useStore = create(counter);
import { create } from '@coaction/react'; const worker = new Worker(new URL('./worker.js', import.meta.url)); const useStore = create(counter, { worker }); const CounterComponent = () => { const store = useStore(); return ( <div> <p>Count in Worker: {store.count}</p> <button onClick={store.increment}>Increment</button> </div> ); };
本質的に、Coaction は、開発者がパフォーマンス、開発者のエクスペリエンス、アーキテクチャの整合性を犠牲にすることなく、次世代の Web アプリケーションを構築できるようにします。 これは、Web アプリケーションの複雑さの増大と、効率的なアプリケーションのニーズとの間のギャップを埋めます。 、保守可能でパフォーマンスの高いスレッド間での状態管理。これは、並列処理と応答性がもはやオプションではなく必須となっている世界で、優れたユーザー エクスペリエンスを作成しようと努めている開発者向けに設計されたツールです。リモート同期もサポートしているため、CRDT アプリケーションの構築にも適しています。
リポジトリ: https://github.com/unadlib/coaction
以上がマルチプロセッシングのロックを解除して Web アプリケーションをよりスムーズにの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。