序文問題はこれです。最近、現在のネットワーク速度を判定し、フロントエンドでのリクエストの範囲を制御して、段階的に大きなファイルをリクエストするライブラリを作成しようとしました。私はまだこれについて 1 行もコードを書いていません。この要件のアイデアが少し非現実的であることに突然気付いただけでなく、フロントエンドはネットワーク速度をどのように決定すればよいのかと突然自問したからです。 ???! ネットワーク速度のフロントエンド判定原理のまとめ(注: 以下のネットワーク速度のデフォルトの単位は KB/S です) 関連情報を調べると、アイデアは主に次のカテゴリに分かれていることがわかりました。 1. img を読み込むか Ajax リクエストを開始してネットワーク速度を計算するサーバーと同じドメインにある画像などのファイルを要求すると、要求の開始と応答の受信の 2 つの時点が Date.now でマークされます。これは、Date.now が 1970 年 1 月 1 日 (UTC) から現在の時刻までのミリ秒数であるためです。そのため、end - start を使用して時間差 (ms) を見つけ、次のように計算します。
ネットワーク速度(KB/S)を計算できます。 ファイルを要求するには、img 経由で読み込む方法と AJAX 経由で読み込む方法の 2 つがあります。
2.window.navigator.connection.downlink ネットワーク速度クエリまた、いくつかの高度な H5 API を通じてこれを実現することもできます。たとえば、ここでは window.navigator.connection.downlink を使用してクエリを実行できますが、ご存知のように、この種の API には独自の特性、つまり古い互換性の問題があるため、通常は予備手段として使用し、機能検出を通じて、使用できる場合は使用し、使用できない場合は他の方法を使用します。なお、ダウンリンクの単位はmbpsであり、これをKB/Sに変換する式は次のようになります。
1024 を掛けるのはわかりますが、その後になぜ 8 で割る必要があるのでしょうか?これは、mbps の「b」がビットを表し、KB/s の「B」がバイトを表すためです。1 バイト (b) = 8 ビットなので、8 で割る必要があります。 3. 一般的に、ネットワーク速度はファイルのリクエストによって測定されます1 回のリクエストではエラーが発生する可能性があるため、複数回リクエストして平均を計算することができます。 ネットワーク速度を判断するためのフロントエンド方式とその長所と短所
画像読み込み速度テスト関数 getSpeedWithImg(imgUrl, ファイルサイズ) { 新しい Promise を返します ((resolve, reject) => { start = null とします。 end = null とします。 img = document.createElement('img'); とします。 開始 = 新しい Date().getTime(); img.onload = 関数 (e) { end = 新しい Date().getTime(); 定数速度 = ファイルサイズ * 1000 / (終了 - 開始) 解決(速度); } テキストファイル img.src }).catch(err => { throw err }); } Ajax スピードテスト 関数 getSpeedWithAjax(url) { 新しい Promise を返します ((resolve, reject) => { start = null とします。 end = null とします。 開始 = 新しい Date().getTime(); const xhr = 新しい XMLHttpRequest(); xhr.onreadystatechange = 関数 () { xhr.readyState === 4の場合{ end = 新しい Date().getTime(); 定数サイズ = xhr.getResponseHeader('コンテンツの長さ') / 1024; 定数速度 = サイズ * 1000 / (終了 - 開始) 解決(速度); } } xhr.open('GET', url); xhr.send(); }).catch(err => { throw err }); } ダウンリンク速度テスト 関数 getSpeedWithDnlink() { // ダウンリンクはネットワーク速度を計算します const connection = window.navigator.connection; if (接続 && connection.downlink) { connection.downlink * 1024 / 8 を返します。 } } 総合的な速度テスト 関数 getNetSpeed(url, times) { // ダウンリンクはネットワーク速度を計算します const connection = window.navigator.connection; if (接続 && connection.downlink) { connection.downlink * 1024 / 8 を返します。 } //速度を複数回測定して平均値を求めます。const arr = []; (i = 0 とします; i < 回; i++) { arr.push(getSpeedWithAjax(url)); } Promise.all(arr).then(speeds => { を返します。 合計を 0 とします。 速度.forEach(速度 => { 合計 += 速度; }); 合計/回数を返します。 }) } 上記のコードのnpmパッケージを公開しました。ダウンロードはこちらから。 npm i ネットワーク速度テスト 使い方 'network-speed-test' から * をインポートします。 getSpeedWithImg("upload/2022/web/mPJ2iq.jpg", 8.97) を実行してから( 速度 => { console.log(速度); } ) getSpeedWithAjax('./speed.jpg').then(speed => { console.log(速度); }); getNetSpeed('./speed.jpg', 3).then(speed => { console.log(速度); }); スピードリンクを取得します。 npm パッケージ アドレスhttps://www.npmjs.com/package/network-speed-test Githubアドレスhttps://github.com/penghuwan/ネットワークスピードテスト 上記は、JavaScript を使用してネットワーク速度を測定する方法の詳細です。JavaScript を使用してネットワーク速度を測定する方法の詳細については、123WORDPRESS.COM の他の関連記事に注目してください。 以下もご興味があるかもしれません:
|
<<: Ubuntu システムログで /var/log/messages を設定する方法
>>: MySQL サーバー コミュニティ バージョン MySQL 5.7.22 winx64 を win10 にインストールする方法
コンテナにネットワークインターフェースを追加する1 デフォルトのネットワークモードでコンテナを実行す...
目次1. リソースのダウンロード2. ソフトウェアを解凍する2.1 場所を選択する2.2 名前を変更...
1|0 カーネルをコンパイルする(1)uname -rコマンドを実行してカーネルバージョンを表示しま...
1. HTML の要素とタグ<br />要素は、1 つのタグまたは 1 組のタグによって...
GTID の利点により、従来のファイル POS ベースのレプリケーションを GTID ベースのレプリ...
1. はじめにこの記事では、Docker Swarm を使用して Nebula Graph クラスタ...
この記事では、CSS で 2 つの固定列と 1 つのアダプティブ列を実装するいくつかの方法を紹介し、...
目次ベース戻り値の型文字列とブール値数値とbigintシンボル未定義関数物体他のよくある質問参照エラ...
Mac OS X で TAR.GZ から MySQL 5.7 をインストールする MySQL 5.6...
これで、autocomplete と呼ばれる input の属性を使用できるようになりました。オート...
目次アプリケーションシナリオアイデアプロジェクト構造全体的なプロジェクト構造webpack パッケー...
イギリスBFC: ブロック書式設定コンテキストBFCレイアウトルール内箱は縦方向に次々に配置されます...
設置環境WIN10 VMware Workstation Pro 15.0.0 ビルド 101344...
目次1. 配列の平坦化の概念2. 実装1. 減らす2. toString と split 3. 結合...
<br />注:ウェブサイトの種類を示すものを除くすべてのテキストは、企業サイト用です。...