私は Javascript 言語の 2 つの (比較的) 新しい概念、Web Workers と John Resig の素晴らしい Processing.js (実際には新しい「Javascript の概念」ではありませんが、私の考えはわかります) について読んでいます。両方の優れた例がインターネットを徘徊していますが、両方の手法を効果的に使用する例をまだ見つけていません。私にはかなり面白くて強力に見えるので、試してみようと思いました。
しかし、この 2 つを統合するための最適なスクリプト設計を実際に把握することはできません... 通常、Processing.js を使用する場合、「処理アプリケーション」内でいくつかのクラスが定義されているように思えます。これにより、Java のような構文を使用してこれを行うことができます。ただし、これらのクラスは Processing-application 内でしかアクセスできません。これは明らかです。しかし、次に Workers を取得します...この驚くべき例では、Javascript 関数オブジェクトが最初に別のスクリプトで定義されます。Worker の使用が必要な場合は、Worker スクリプトがそのオブジェクトのプロトタイプと種類の「ボルト」をインポートします。それ自体。
Worker スクリプトを使用している場合、Processing-application で定義したクラスにアクセスできないという点で、この 2 つは「互換性がある」とは思えません。おそらく、Processing に似たクラスは Javascript にあまり似ていないため、おそらく理由があります。私が見る限り、Worker スクリプトで (新しい関数プロトタイプの形式で) クラスの同様の定義を作成する必要があります。これは保守性にあまり良くなく、ひどく悪い設計のように思えます。私はまだこの件に関しては初心者ですが。
私は何かを見落としていますか?本来あるべきではないものが欲しいですか?それとも、いくつかの基本的な概念を誤解しているだけですか?
助けてくれてありがとう!
編集:
Worker のプロトタイプをいじって、それが機能するはずのオブジェクトのようにそれを「形作る」ことを試みましたが、すぐにこれが進むべき道ではないことに気付きました。
動作するアウトラインを試してみましょう: 私はクラス 'Ball' を持っていますが、これは 2 次元の位置を保存すること以外はほとんど何もしません。draw()
Processing.js はすべてのサイクルでそのupdate()
メソッドを呼び出し、Ball に新しい位置を採用させます。その後、display()
メソッドが呼び出され、Ball が現在の位置に小さな円を描画します。
最初から複雑なことは何もありません。ここで、ボールの新しい位置を特定するのはかなりコストのかかる操作であると仮定します。たとえば、「複雑な」重力場をボールが移動する場合などです。この計算を描画の前に毎回実行する必要がある場合、少なくともいくらかの遅延が発生します。ただし、これらを同時に行うことができれば、よりスムーズに実行できる可能性があります。そこで、Ball クラスのプロパティ リストに追加の 'positions' 配列を与えることができると考えました。これにより、連続するすべての位置が保持されます。Ball がインスタンス化されると、位置の計算を開始する新しい Worker が作成され、位置の計算が完了するたびに、新しい 2 次元位置を含むメッセージが Ball にポストバックされます。次に、ボールはこれを位置配列にプッシュします。
全体として、良いアイデアか悪いアイデアか?良い場合、これを設計する方法について何か提案はありますか?