2017-01-31 4 views
0

私はChromiumをベースにしたElectronを使ってオフラインデスクトップアプリケーションを作成しています。サービスワーカーをアクティブにするための接続タイムアウトを作成する方法はありますか?

アプリケーションはリモートサイトを使用しており、サービスワーカーを使用してサイトの一部をオフラインにしています。私が「飛行機の無線LANの状況」と呼んでいる特定の状況を除いて、すべてがうまくいっています。

チャールズを使用して、ダウンロード帯域幅を100バイト/秒に制限しました。接続はwebview.loadURLによって行われ、最終的にChromiumのLoadURLWithParamsがコールされます。問題は、サービスワーカーが失敗することなくサービスワーカーをアクティブにすることです。要求が送信されると、応答を永遠に待ちます。

私の質問は、特定の時間が経過した後にリクエストをタイムアウトさせ、サービスワーカーからすべてのものをロードする方法です。

+1

[Jake Archibald](http://stackoverflow.com/users/123395/jaffa-the-cake)には[素晴らしい記事](https://jakearchibald.com/2014/offline-cookbook/)があります主題特に[キャッシュとネットワークの競合](https:// jakearchibald。[https://jakearchibald.com/2014/offline-cookbook/#serving-suggestions-responding-to-requests])があります。 com/2014/offline-cookbook /#cache-network-race)は、問題の正確な解決策です。 –

+0

ありがとうございましたウルム、いくつかの素晴らしいリンクがあります! –

答えて

1

これを自分で書く代わりに、サービスワーカーのルーティングとランタイムキャッシング戦略を提供するsw-toolboxライブラリを使用すると同時に、これらの種類の高度なユースケースを支援するオプションも組み込まれています。特に、networkTimeoutSeconds parameterを使用して、以前にキャッシュされた応答にフォールバックする前に、ネットワークからの応答を待つ時間を構成することをお勧めします。

あなたは、次のようにそれを使用することができます。

my-api.comを含むURLで GETの要求にマッチしたルートを設定し、自動的に以前にキャッシュされたレスポンスに落ちるネットワーク-最初の戦略を適用します
toolbox.router.get(
    new RegExp('my-api\\.com'), 
    toolbox.networkFirst, { 
    networkTimeoutSeconds: 10 
    } 
); 

10秒後に。

関連する問題