この記事では主にlocalStorageのブラックテクノロジー、つまり参考価値のあるjsとcssのキャッシュ機構の関連知識を紹介します
1.ブラックテクノロジーを発見したきっかけ
見てください。今日、WeChat 公式アカウントで技術的なブログ投稿を見つけたので、Evernote を使用して収集したいと思い、記事のリンクを PC に送信しました。次に、私は習慣的にコンソールを開いてソース コードを確認し、WeChat が最近どのような新しいテクノロジーを使用したかを知りたいと考えています。
はは、以下のことが私の探偵になりたいという願望を呼び起こしました。ページがロードされた後の異常な点は、以下の図に示すように、js が 1 つだけロードされることです。
キャッシュを無効にするがオンになっているのに、なぜ 1 つの js しかロードされず、サイズがこれほど大きいのか、非常に驚きました。小さい。次に、Ctrl+O を押してリソース ファイルを検索したところ、「だまされていた」ことがわかりました。実際には、複数の js ファイルがあります。
キャッシュするために localStorage を使用したのではないかというアイデアが頭に浮かびました。 !早速、localStronge を調べてみましたが、それは本当でした。 。 。 。
これが以前から実現したいと思っていたローディングパフォーマンスの最適化というアイデアではないでしょうか!ダーリン、私は無知ですが、フロントエンド チームがすでにコードを実装しています。
2 番目に、ファイル読み込みの最適化のアイデアについて話しましょう
通常、フロントエンド リソース ファイル読み込みの最適化とは、ファイルの反復を変更せずに同じファイルが複数回ダウンロードされることを避けるために、可能な限りキャッシュを使用することを意味します。
一般的なアプローチは、リソースの有効期間を可能な限り延長することです。つまり、ページ リソース リクエストの戻りコードが 304 になるようにキャッシュ コントロールの最大有効期間を設定して、ブラウザーが直接アクセスできるようにします。ローカルキャッシュを使用します。
PC 側のネゴシエーション キャッシュ (304) は非常に高速ですが、ネットワーク上の理由により、モバイル側のネゴシエーション キャッシュの効果は PC 側ほど良くありません。さらに、携帯電話はローカル キャッシュを頻繁にクリアするため、ファイルのキャッシュ時間はそれほど長くはなりません。
このとき、localStorage が役に立ちます。
Cookie と比較して、localStorage は大量のデータをキャッシュでき、永続的に有効です。したがって、js リソースと css リソースを localStorage に保存すると、http リクエストの送信にかかる時間が節約され、ユーザーのブラウジング エクスペリエンスが大幅に向上します。
3. リソースのキャッシュに localStorage を使用する場合に解決する必要がある問題
3.1 バージョン更新のメカニズム
プロジェクトがまだ反復開発中である限り、更新の必要性を回避することは困難ですリソースファイル。
通常のリソースリクエストは、
ファイル名 + md5 http://res.wx.qq.com/mmbizwap/zh_CN/htmledition/js/biz_wap/moon32ebc4.js
、または
リソースリンクの後に追加することができますリソースを更新する必要があるかどうかを識別するには、特定のサフィックス http://1.ss.faisys.com/js/comm/fai.min.js?v=201612051739
を使用します。
localStorage を使用する場合は、新しいキャッシュ更新メカニズムが必要です。
3.2 コードを更新するためのスキャフォールディングを構築する
localStorage キャッシュを使用する場合、リソース ファイルの読み取りと書き込みを管理するための新しいスキャフォールディングが必要です。
3.3 バックグラウンドはリソース構成情報を出力します
フロントエンドはリソースを更新する必要があるため、バックグラウンドはフロントエンドが判断する根拠を出力する必要があり、リソース構成情報が必要になります。フロントエンドは構成情報に基づいて照合と比較を実行し、最終的に localStorage キャッシュを使用するか、最新のリソース ファイルのダウンロード要求を再開始するかを決定します。
3.4 XSSセキュリティリスクがあります
localStorage内の情報はクライアントが自由に変更できます。ハッカーが練習したい場合は、自由に js コードを挿入できます。その後、ページが更新されると、挿入されたコードも実行されます。
4. WeChatの実践の分析
4.1 バージョン識別
__MOON__a/a_report.jsを例にとると、バージョン情報はキー__MOON__a/a_reportで保存されます。 js_ver、および//res.wx.qq.com/mmbizwap/zh_CN/htmledition/js/a/a_report32e586.js に保存されている値。
通常のロード方法を使用する場合は、値を取り出してスクリプトノードの src 属性に設定するだけでロードが完了します。
WeChatはバックグラウンドで出力した設定情報と値を比較することでバージョンが最新かどうかを判断し、最終的に更新されているかどうかの結果を取得します。
値の値が設定情報と一致する場合、キャッシュが使用されます。それ以外の場合は、ロード要求を再度開始します。
4.2 スキャフォールディング
WeChat は自社開発のスキャフォールディング Moon.js を使用していることがわかり、この Web ページの実際のファイル名は Moon32ebc4.js です。
変数名が難読化されたファイルなので、具体的なコードの方向性が少し分かりにくいので、ここでは解析しません。
4.3 リソース構成情報
スキャフォールディングmoon.jsが正しく動作するにはリソース構成情報が必要なため、moon.jsの前に構成情報を出力する必要があります。
moon.js の前のスクリプトタグを順番に見て、json オブジェクト window.moon_map を見つけます。
コンソールを使用してこの変数を出力し、次のように情報を表示します。
これを見ると、1 つの点が明確になります。これは、更新メカニズムに必要なリソース構成情報テーブルです。
また、構成情報のjsonオブジェクトのキーがlocalStorageのキーに対応していることがわかります。同様に、value値も1対1に対応します。
4.4 XSS攻撃
これは、WeChatのキャッシュメカニズムにXSS攻撃があるかどうかを確認するためです。ここで子供の靴を見たときに悪いことをしないでください。
jsキャッシュコードにalert("hehe");を挿入して、ページが更新されたときにポップアップウィンドウが表示されるかどうかを確認して、攻撃の脆弱性があるかどうかを確認しました。
ページを更新した後の結果は次のとおりです:
WeChat がこの種の問題を解決していないことがわかります。したがって、このキャッシュ メカニズムには依然として固有の欠点があります。
4.5 WeChatの更新メカニズムをテストします
キー__MOON__a/a_report.js_verに対応する値を変更して、WeChatのスキャフォールディングmoon.js__MOON__a/a_report.jsを更新します、コードを消去してください積極的に挿入するだけです。
ここでは、ファイル名を***587.jsに変更しました(元のファイル名は***586.js)。次に、F5 キーを押してページを更新します。
結果は、report.js コードが更新され、バージョン番号が ***586.js に復元されました。
5. 結論
localStorage キャッシュにはその役割がありますが、万能薬ではありません。上記の落とし穴に注意する必要があります。
該当するシナリオを次の点に要約できます:
1. ファースト スクリーン以外のレンダリングに必要な CSS ファイルは LS キャッシュとして使用できます。
ファーストスクリーンのレンダリングに必要な CSS は、SEO で必要とされるため、従来の方法で出力する必要があります。そうしないと、クローラーがページを巡回したときにページの効果が非常に低くなります。ファースト スクリーン以外の CSS の場合、LS キャッシュを使用してリソースのダウンロード時間を短縮できます。
2. 表示クラスやアニメーションクラスなど、主要なビジネスロジック以外のコードもLSキャッシュに使用できます。
このようにして、ビジネス層におけるセキュリティの抜け穴はある程度回避できます。もちろん、フロントエンドをどのように保護しても、それは薄い紙の層にすぎません。重要なのは、バックエンド インターフェイスが安全に保護されている必要があるということです。
3. モバイル端末は LS キャッシングを行うことができます。 PC 側の LS キャッシュには最適化効果はほとんどありません。
上記がこの記事の全内容です。その他の関連コンテンツについては、PHP 中国語 Web サイトをご覧ください。
関連する推奨事項:
フルページ風の単一ページ/全画面スクロールをネイティブjsで実装する方法について
以上がjsとcssのキャッシュの仕組みの紹介の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

存储数据到localstorage为何总是失败?需要具体代码示例在前端开发中,我们经常需要将数据存储在浏览器端,以便提高用户体验和方便之后的数据访问。Localstorage是HTML5提供的一项用于客户端存储数据的技术,它提供了一种简单的方法来存储数据,并且可以在页面刷新或关闭后保持数据的持久化。然而,当我们使用localstorage进行数据存储时,有时

如何设置localstorage的过期时间,需要具体代码示例随着互联网发展的迅猛,前端开发中经常需要在浏览器中保存数据。而localstorage是一种常用的WebAPI,旨在提供了一种在浏览器中本地存储数据的方式。然而,localstorage并没有提供一个直接的方法来设置过期时间。本文将介绍如何通过代码示例来实现设置localstorage的过期时间。

如何恢复被删除的Localstorage数据?Localstorage是一种用于在网页中存储数据的技术。它被广泛应用于各种网页应用程序中,以便在多个页面之间共享数据。然而,有时候我们可能会意外地删除了Localstorage中的数据,这给我们带来了困扰。那么,如何恢复被删除的Localstorage数据呢?下面是具体的步骤和代码示例。步骤1:停止写入Loca

localstorage为什么无法正常保存我的数据?在Web开发中,我们经常需要将用户的数据保存在本地,以便在用户下次访问网站时能够快速加载或恢复数据。而在浏览器中,我们可以使用localStorage来实现这个功能。然而,有时候我们会发现使用localStorage保存的数据并不能正常工作。那么,为什么会出现这种情况呢?在理解为什么localStorage

localstorage不安全的原因是数据不加密、XSS攻击、CERF攻击、容量限制等。详细介绍:1、数据不加密,localstorage是一个简单的键值对存储系统,它将数据以明文形式存储在用户的浏览器中,这意味着任何人都可以轻松地访问和读取存储在localstorage中的数据,如果敏感信息存储在localstorage中,那么黑客或恶意用户可以轻松地获取这些信息等等。

如何使用localstorage存储数据?简介:localstorage是一种HTML5提供的浏览器本地存储机制,通过它可以方便地在浏览器中存储和读取数据。本文将介绍如何使用localstorage存储数据,并提供具体的代码示例。本文共分为以下几个部分:1、localstorage简介;2、使用localstorage存储数据的步骤;3、代码示例;4、常见问

localstorage不安全的原因:1、存储内容可被篡改;2、数据可被窃取;3、数据可被伪造;4、跨站点脚本攻击;5、清除浏览器数据。详细介绍:1、存储内容可被篡改,localStorage中的数据是存储在用户的浏览器中的,这意味着任何能够访问该浏览器的人都可以查看和修改localStorage中的数据;2、数据可被窃取,由于localStorage中的数据是存储在用户等等。

localStorage是一种Web API,可以在Web浏览器中存储和检索数据,它允许网站将数据存储在用户的本地浏览器中,而不是在服务器上。它可以用于存储许多不同类型的数据,例如用户设置、首选项、购物车数据等。在不同的浏览器中具有不同的存储限制,并且通常有一个最大存储量限制。它可以用于改善网站的用户体验和提供个性化服务。但是在使用localStorage时需要注意隐私等等。


ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

MantisBT
Mantis は、製品の欠陥追跡を支援するために設計された、導入が簡単な Web ベースの欠陥追跡ツールです。 PHP、MySQL、Web サーバーが必要です。デモおよびホスティング サービスをチェックしてください。

DVWA
Damn Vulnerable Web App (DVWA) は、非常に脆弱な PHP/MySQL Web アプリケーションです。その主な目的は、セキュリティ専門家が法的環境でスキルとツールをテストするのに役立ち、Web 開発者が Web アプリケーションを保護するプロセスをより深く理解できるようにし、教師/生徒が教室環境で Web アプリケーションを教え/学習できるようにすることです。安全。 DVWA の目標は、シンプルでわかりやすいインターフェイスを通じて、さまざまな難易度で最も一般的な Web 脆弱性のいくつかを実践することです。このソフトウェアは、

SublimeText3 英語版
推奨: Win バージョン、コードプロンプトをサポート!

SAP NetWeaver Server Adapter for Eclipse
Eclipse を SAP NetWeaver アプリケーション サーバーと統合します。

Dreamweaver Mac版
ビジュアル Web 開発ツール
