2

私は生計を立てるためにゲームをプログラミングしており、Web アプリケーションではありません。

chrome.*Chrome 拡張 API (ファミリ) がほぼ完全にコールバック セッターで構成されている理由は何ですか? 私が話しているのは、一見クロージャを悪用しているように見えるこのプログラミング モデルです。

// do something with the Tab object of an activated tab
chrome.tabs.onActivated.addListener(function (activeInfo) {
    chrome.tabs.get(activeInfo.tabId, function(theTab) {
        foo(theTab);
    });
});

私は、getter が要求された値を単純に返すことに慣れており、これが興味深いと感じています。これは、これらすべてのメソッド (getLastFocusedここなど) が実際にはブラウザー エンジンの非同期タスクのみをスケジュールするためでしょうか?

4

3 に答える 3

4

私は似たようなことを考えていて、良い説明に出くわしました。おそらく、誰かが私と同じように役立つと思うでしょう:

[API でコールバックを使用する理由] は、Google Chrome のマルチプロセス アーキテクチャに関係しています。Web ページと JavaScript は、互いに独立したプロセスで実行されるだけでなく、ローカル ファイル システムへの読み取りや書き込みなどの機能を単独で実行できるメインのブラウザー プロセスからも分離されています。これは、Google Chrome の重要なセキュリティと安定性の機能です。このような呼び出しが同期的である場合、拡張機能はすべてを停止し、ブラウザー プロセスが要求に応答するのを待つ必要があります。その間ずっと、ユーザーは応答しなくなった拡張機能の UI を操作しようとしている可能性があります。非同期 API を使用することはより困難ですが、最高のユーザー エクスペリエンスを実現するためのものです。

これは、拡張 API 設計に関するこのビデオのトランスクリプトからのものです。

于 2015-07-19T01:36:02.627 に答える
1

これは、イベントハンドラーといくつかの非同期アクションの組み合わせです。さらに、javascriptでのスコープの動作は、少し難しい場合があります。クロージャを使用すると、別の方法では実行できなかったデータを渡すことができる信頼性の高いスコープが作成されます。

于 2012-09-29T17:25:02.823 に答える
0

私の見解では、API のほとんどのメソッドが非同期である理由の 1 つは、chrome.*通常、拡張機能がユーザー インタラクションを処理する必要があるためです。一般に、非同期 API を使用すると、アプリケーションの応答性が向上します。そのため、API の開発者は、chrome.*効率的な拡張機能を作成する簡単な方法を提供するだけで、Google Chrome の速度が低下してユーザーが失望することはありません。

于 2012-09-30T10:24:19.183 に答える