vue2のキャッシュ機能vue2版にはこのようなキャッシュ機能がある /** * 純粋関数のキャッシュバージョンを作成します。 */ 関数キャッシュ(fn){ var キャッシュ = Object.create(null); 戻り値 (関数 cachedFn (str) { var ヒット = キャッシュ[str]; ヒットを返す || (cache[str] = fn(str)) }) } 上記の関数には、配列があり、各要素の最初の文字を大文字に変換する必要があるなどの一般的なシナリオがあります。 const配列 = ['abc', 'ed', 'abc', 'acd', 'ed', 'fkg', ...]; 一般的な解決策 // 大文字化関数を定義する function capitalize (str) { str.charAt(0).toUpperCase() + str.slice(1) を返す }; const capitalizeArray = array.map(大文字化); よく見ると、配列には重複する要素がたくさんあることがわかります。それらは同じ結果を返します。実際、capitalize を実行するために計算を繰り返す必要はありません。さらに、capitalize は PURE 関数です。このとき、上記のキャッシュされた関数を使用してメモを作成できます。 変換は次のようになります 関数 capitalize(str) { str.charAt(0).toUpperCase() + str.slice(1) を返す }; const capitalizeArray = array.map(cached(capitalize)); 重複する文字列が見つかった場合、キャッシュされた結果が直接返されます。大文字化は非常に時間のかかる作業であり、パフォーマンスの最適化にはそれ以上の作業が必要であることを考慮してください。 Vue キャッシュ関数の変換上記の例は、キャッシュ同期タスクの純粋な機能です。ビジネス開発では、入力ボックスの検索などのシナリオがあります。入力ボックスが入力イベントをトリガーすると、インターフェイスを呼び出してクエリ結果を返します。たとえば、キーワード「Nuggets」を入力すると結果が返され、次に「Nuggets NBA」と入力すると結果が返されました。このとき、NBAを削除して再度「Nuggets」を検索しました。実は、この結果は以前にも確認しています。キャッシュされている場合は、インターフェイスを再度呼び出さずに直接キャッシュをプルできます。 キャッシュに基づいて非同期純粋関数をキャッシュするためのメモを実装します const cachedAsync = function(fn) { const キャッシュ = Object.create(null); 非同期strを返す => { const ヒット = キャッシュ[str]; (ヒット)の場合{ リターンヒット; } // 成功した Promise のみをキャッシュし、失敗した場合は直接戻りを再度要求します (cache[str] = await fn(str)); }; }; 使用シナリオ const cachedAsyncQueryPrdList = cachedAsync(prdNo => { // 以下はリクエスト操作であり、Promiseを返します queryPrdList を返します({ いいえ }); }); <テンプレート> <el-input v-model="prdNo" placeholder="製品コードを入力してください" @input="handleQueryPrdList" /> <el-選択> <el-option v-for="prdList 内の項目" :label="item.label" :value="item.value"> </el-select> </テンプレート> <スクリプト> エクスポートデフォルト{ データ() { 製造番号: ''、 prdリスト: [], }, メソッド: { 非同期handleQueryPrdList() { const {データ} = cachedAsyncQueryPrdList(this.prdNo); this.prdList = データ; } } } </スクリプト> 上記の実装は、同じキーワードが入力されたときに、前回のリクエストが成功した場合は、サーバーに新しいリクエストを行わずにキャッシュが直接取得されることを意味します。メモは成功したプロミスのみをキャッシュするためです。 最適化上記のシナリオでは、el-input の基になるレイヤーが、手ぶれ防止レイヤーを実行するために、compositionEnd イベントと compilationStart イベントを使用していますが、入力イベントは、テキストが実際に画面に入力されたときにのみトリガーされます。しかし、これだけでは十分ではありません。ユーザーが非常に速く入力すると、1 秒あたりに複数のリクエストが送信され、サーバーの負荷が増大する可能性があります。そのため、このタイプの機能は、通常、手ぶれ補正機能と組み合わせて使用されます。 手ぶれ防止機能 定数デバウンス = (fn, ms = 300) => { タイムアウトIdを設定します。 関数(...引数)を返す{ タイムアウトをクリアします(タイムアウトId); timeoutId = setTimeout(() => fn.apply(this, args), ms); }; }; 次にそれをcachedAsyncで使用します const cachedAsyncQueryPrdList = cachedAsync(prdNo => { // 以下は、Promiseを返すAjaxリクエスト操作です queryPrdList を返します({ いいえ }); }); <テンプレート> <el-input v-model="prdNo" placeholder="製品コードを入力してください" @input="debounceQueryPrdListFn" /> <el-選択> <el-option v-for="prdList 内の項目" :label="item.label" :value="item.value"> </el-select> </テンプレート> <スクリプト> 定数 noop = () => {}; エクスポートデフォルト{ データ() { 製造番号: ''、 prdリスト: [], debounceQueryPrdListFn: 何もしない、 }, 作成された() { this.debounceQueryPrdListFn = debounce(this.handleQueryPrdList); }, メソッド: { 非同期handleQueryPrdList() { const {データ} = cachedAsyncQueryPrdList(this.prdNo); this.prdList = データ; } } } </スクリプト>
この実装は実稼働環境でも安定的に使用されており、安心してご利用いただけます。 要約するVue キャッシュ機能の使い方についてはこれで終了です。Vue キャッシュ機能の使い方についてさらに詳しく知りたい方は、123WORDPRESS.COM の過去の記事を検索するか、以下の関連記事を引き続きご覧ください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。 以下もご興味があるかもしれません:
|
<<: Tomcat イメージをインストールして Docker に Web プロジェクトをデプロイする方法を簡単に説明します。
>>: MySQLでANDとORを組み合わせる問題を解決する
CSS でレスポンシブ レイアウトを実装するレスポンシブレイアウトは非常にハイエンドで難しいように思...
1: インストールコマンドpip install docker-compose例外情報socket....
問題の説明データ転送に Nginx を使用し、フロントエンドとバックエンドが分離された Spring...
序文:場合によっては、MySQL に接続されたセッションが異常終了することが多く、エラー ログに「通...
文字の位置を取得するための同様の方法について学習します。 charAt() 文字列内の指定された位置...
3日間さまざまな困難に遭遇した後、ようやくこの機能を実現しました。正常に実装できる方法を見つける前に...
どの DBMS でも、インデックスは最適化にとって最も重要な要素です。データ量が少ない場合、適切なイ...
目次1. Vueのインストール方法1: CDNの導入方法2: 直接ダウンロードしてインポートする方法...
自動検出を行う際には、ポートなどの情報を取得してjson形式で返すスクリプトが必ず存在します。Red...
MySql でリモート接続を許可する方法この目標を達成するには、2つのことを行う必要がある。ユーザー...
この記事は、WindowsでのMySQL 8.0.11のインストールチュートリアルを記録しています。...
すべてには基礎が必要です。家を建てるには基礎が必要です。方程式を解くには、まず九九を覚える必要があり...
シナリオ: データ量が増加すると、MySQL が配置されているディスクがいっぱいになり、より大きなス...
Linux インストール JDK1.8 手順1. CentOS に独自の openJDK があるかど...
さまざまなソースからデータを集約することで、中央倉庫を作成できます。データ ウェアハウスは、ビジネス...