LABjs は、必要に応じて JavaScript ファイルをロードするために使用される小さな JavaScript ツールです。このツールを使用すると、ページのパフォーマンスを向上させ、不要な JavaScript ファイルのロードを回避し、スクリプト ファイルの動的並列ロードと管理を実現できます。スクリプトファイルをロードする実行順序。
簡単な例
$LAB .script("script1.js", "script2.js", "script3.js") .block(function(){ // wait for all to load, then do something script1Func(); script2Func(); script3Func(); });
LABJS の例をいくつか紹介します:
例 1:
$LAB .script("script1.js") .script("script2.js") .script("script3.js") .wait(function(){ // 等待所有script加载完再执行这个代码块 script1Func(); script2Func(); script3Func(); });
例 2:
$LAB .script({ src: "script1.js", type: "text/javascript" }) .script("script2.js") .script("script3.js") .wait(function(){ // 等待所有script加载完再执行这个代码块 script1Func(); script2Func(); script3Func(); });
例 3:
$LAB .script("script1.js", "script2.js", "script3.js") .wait(function(){ // 等待所有script加载完再执行这个代码块 script1Func(); script2Func(); script3Func(); });
例 4:
$LAB .script( [ "script1.js", "script2.js" ], "script3.js") .wait(function(){ // 等待所有script加载完再执行这个代码块 script1Func(); script2Func(); script3Func(); });
例 5:
$LAB .script("script1.js").wait() // 空的wait()只是确保script1在其他代码之前被执行 .script("script2.js") // script2 和 script3 依赖于 script1 .script("script3.js").wait() // 但是script2 和 script3 并不互相依赖,可以并行下载 .script("script4.js") // script4 依赖于 script1, script2 及 script3 .wait(function(){script4Func();});
例 6:
$LAB .script("script1.js") // script1, script2, and script3 之间没有依赖关系, .script("script2.js") // 所以可以任意顺序执行 .script("script3.js") .wait(function(){ // 如果需要,这里当然可以执行javascript函数 alert("Scripts 1-3 are loaded!"); }) .script("script4.js") // 依赖于 script1, script2 及 script3 .wait(function(){script4Func();});
例 7:
$LAB .setOptions({AlwaysPreserveOrder:true}) // 设置每个脚本之间等待 .script("script1.js") // script1, script2, script3, script4 互相依赖 .script("script2.js") // 并且并行下载后循序执行 .script("script3.js") .script("script4.js") .wait(function(){script4Func();});
例 8:
$LAB .script(function(){ // `_is_IE`的值ie为true ,非ie为false if (_is_IE) { return "ie.js"; // 如果是ie则这个js会被加载 } else { return null; //如果不是ie这个代码就会被略过 } }) .script("script1.js") .wait();
LABjsの読み込み方法
LABjs でのスクリプト ファイルの動的読み込みとは、ページの js スクリプトが実行されるときに、さまざまなメソッドを通じて外部 js を読み込むことを指します (主に、HTML ページの <script> タグを通じて静的に読み込まれるスクリプトとは異なります)<br /> </script>
スクリプトを動的にロードするにはさまざまな方法がありますが、ここでは詳しく説明しません。興味のある方は、この記事の最後にある参照リンクを参照してください。
LABjs では、スクリプト要素、XHR インジェクション、キャッシュ トリックという 3 つの主なテクニックが使用されます
まず、これら 3 つの読み込みメソッドについて簡単に説明します。第 4 部では、LABjs ソース コード実装における 3 つのメソッドの使用シナリオを分析します。
スクリプト要素 (LABjs はデフォルトで読み込みメソッドを使用します)
スクリプトを動的にロードする最も一般的な方法には、次のような多くの利点があります。 1. 実装が簡単 2. クロスドメインが可能 3. 他のリソースのロードをブロックしないなど
Opera/Firefox (旧バージョン) では、スクリプトの実行順序は、ノードがページに挿入される順序と一致します
IE/Safari/Chrome の場合: 実行順序は保証されません
注:
新しいバージョンの Firefox では、スクリプトの実行順序とページへの挿入順序は必ずしも一致しませんが、script タグの async 属性を false に設定することで実行順序を保証できます
古いバージョンの Chrome では、スクリプトの実行順序とページへの挿入順序は必ずしも一致しませんが、script タグの async 属性を false に設定することで実行順序を保証できます
XHR インジェクション
ajax リクエスト経由でスクリプト ファイルをロードし、次の方法で実行します:
eval: 共通メソッド
XHR インジェクション: スクリプト要素を作成し、ロードされたスクリプト ファイルのコンテンツを
にインジェクトします。
主な制限: ドメインを越えることはできません
キャッシュ トリック (ブラウザ機能の実装に大きく依存するため、推奨されません)
script 要素の type 属性をブラウザが認識しない値 ("text/cache"、"text/casper"、"text/hellworld" など) に設定すると、さまざまなブラウザの動作は次のようになります。以下:
IE/Safari/Chrome (旧バージョン): スクリプトは通常どおりロードされますが、ブラウザーがキャッシュを無効にしないと、ロードされたスクリプトは必要な場合にのみブラウザーによってキャッシュされます。スクリプトタグを再作成し、タイプを正しい値に設定し、src が以前にリクエストしたファイル URL を指す必要があります (キャッシュからファイルを読み取るのと同等)
Opera/Firefox: 読み込まれていません
注:
これはブラウザの機能実装に強く依存しており、ブラウザの機能実装が変更されると無効になる可能性があります。
の使用はお勧めできません。
Chrome ブラウザの新しいバージョンでは、スクリプト要素のタイプが「text/javascript」以外に設定され、スクリプト ファイルが読み込まれなくなります。
LABjs でのスクリプト読み込みオプションの判断
技術的な詳細は無視し、擬似コードを使用して LABjs での実装を説明します。これは大まかに次のとおりです。
まず、要求されたスクリプトをプリロードするかどうかを決定します (プリロードの条件については、疑似コードのコメントを参照してください)。
プリロードが実行される場合は、ブラウザが真のプリロードをサポートしているかどうかを判断し、サポートしていない場合は、要求されたスクリプトが現在のページと同じドメインにあるかどうかを判断します。 、 、キャッシュ トリックを使用します
プリロードが実行されない場合は、ブラウザが script 要素の async 属性をサポートしているかどうかを確認します (擬似コードのコメントを参照)。サポートしている場合は、async 属性を設定し、サポートしていない場合は script 要素を介してスクリプト ファイルを直接ロードします。 ;
if(ifPreloadScript){ //当请求的脚本文件是否进行预加载:1、需要预加载 2、浏览器支持预加载 if(supportRealPreloading){ //如果支持真正的预加载 if(supportPreloadPropNatively){ //支持通过设置script标签的preload属性,实现script的预加载,以及分离加载和执行 //Nicholas C. Zakas大神的美好愿望,尚未有浏览器支持:/blog/2011/02/14/separating-javascript-download-and-execution/ script.onpreload = callback; script.newPreload = true; script.src = targetUrl; }else{ script.onreadystatechange = callback; //其实就是指IE浏览器,假设指定了script元素的src属性,IE浏览器里会立即加载 script.src = targetUrl; //即使script元素没有被插入页面,callback为预加载后的回调 } } else if(inSameDomain){ //非跨域,采用XHR Injection:请求的脚本与当前页面处于同一个域 xhr = new XMLHttpRequest(); //由于上个判断已经将IE无情地抛弃在这个条件分支之外,所以大胆地用 new XMLHttpRequest()吧 xhr.onreadystatechange = callback; xhr.open("GET",targetUrl); xhr.send(); } else{ //最无奈的后招,Cache Trick,新版chromei已经不支持 script.onload = callback; script.type = 'text/cache'; script.src = targetUrl; } }else{ if(canContrlExecutionOrderByAsync){ //如果能够通过script元素的async属性来强制并行加载的脚本顺序执行 //kyle大神着力推进的提案,目前已被html5小组接受并放入草案:/Dynamic_Script_Execution_Order#My_Solution script.onload = callback; script.async = false; //将script元素的async设为false,可以保证script的执行顺序与请求顺序保持一致 script.src = targetUrl; } else{ script.onload = callback; script.src = targetUrl; } }

さまざまなJavaScriptエンジンは、各エンジンの実装原則と最適化戦略が異なるため、JavaScriptコードを解析および実行するときに異なる効果をもたらします。 1。語彙分析:ソースコードを語彙ユニットに変換します。 2。文法分析:抽象的な構文ツリーを生成します。 3。最適化とコンパイル:JITコンパイラを介してマシンコードを生成します。 4。実行:マシンコードを実行します。 V8エンジンはインスタントコンピレーションと非表示クラスを通じて最適化され、Spidermonkeyはタイプ推論システムを使用して、同じコードで異なるパフォーマンスパフォーマンスをもたらします。

現実世界におけるJavaScriptのアプリケーションには、サーバー側のプログラミング、モバイルアプリケーション開発、モノのインターネット制御が含まれます。 2。モバイルアプリケーションの開発は、ReactNativeを通じて実行され、クロスプラットフォームの展開をサポートします。 3.ハードウェアの相互作用に適したJohnny-Fiveライブラリを介したIoTデバイス制御に使用されます。

私はあなたの日常的な技術ツールを使用して機能的なマルチテナントSaaSアプリケーション(EDTECHアプリ)を作成しましたが、あなたは同じことをすることができます。 まず、マルチテナントSaaSアプリケーションとは何ですか? マルチテナントSaaSアプリケーションを使用すると、Singの複数の顧客にサービスを提供できます

この記事では、許可によって保護されたバックエンドとのフロントエンド統合を示し、next.jsを使用して機能的なedtech SaaSアプリケーションを構築します。 FrontEndはユーザーのアクセス許可を取得してUIの可視性を制御し、APIリクエストがロールベースに付着することを保証します

JavaScriptは、現代のWeb開発のコア言語であり、その多様性と柔軟性に広く使用されています。 1)フロントエンド開発:DOM操作と最新のフレームワーク(React、Vue.JS、Angularなど)を通じて、動的なWebページとシングルページアプリケーションを構築します。 2)サーバー側の開発:node.jsは、非ブロッキングI/Oモデルを使用して、高い並行性とリアルタイムアプリケーションを処理します。 3)モバイルおよびデスクトップアプリケーション開発:クロスプラットフォーム開発は、反応および電子を通じて実現され、開発効率を向上させます。

JavaScriptの最新トレンドには、TypeScriptの台頭、最新のフレームワークとライブラリの人気、WebAssemblyの適用が含まれます。将来の見通しは、より強力なタイプシステム、サーバー側のJavaScriptの開発、人工知能と機械学習の拡大、およびIoTおよびEDGEコンピューティングの可能性をカバーしています。

JavaScriptは現代のWeb開発の基礎であり、その主な機能には、イベント駆動型のプログラミング、動的コンテンツ生成、非同期プログラミングが含まれます。 1)イベント駆動型プログラミングにより、Webページはユーザー操作に応じて動的に変更できます。 2)動的コンテンツ生成により、条件に応じてページコンテンツを調整できます。 3)非同期プログラミングにより、ユーザーインターフェイスがブロックされないようにします。 JavaScriptは、Webインタラクション、シングルページアプリケーション、サーバー側の開発で広く使用されており、ユーザーエクスペリエンスとクロスプラットフォーム開発の柔軟性を大幅に改善しています。

Pythonはデータサイエンスや機械学習により適していますが、JavaScriptはフロントエンドとフルスタックの開発により適しています。 1. Pythonは、簡潔な構文とリッチライブラリエコシステムで知られており、データ分析とWeb開発に適しています。 2。JavaScriptは、フロントエンド開発の中核です。 node.jsはサーバー側のプログラミングをサポートしており、フルスタック開発に適しています。


ホット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 サーバーが必要です。デモおよびホスティング サービスをチェックしてください。

メモ帳++7.3.1
使いやすく無料のコードエディター

MinGW - Minimalist GNU for Windows
このプロジェクトは osdn.net/projects/mingw に移行中です。引き続きそこでフォローしていただけます。 MinGW: GNU Compiler Collection (GCC) のネイティブ Windows ポートであり、ネイティブ Windows アプリケーションを構築するための自由に配布可能なインポート ライブラリとヘッダー ファイルであり、C99 機能をサポートする MSVC ランタイムの拡張機能が含まれています。すべての MinGW ソフトウェアは 64 ビット Windows プラットフォームで実行できます。

PhpStorm Mac バージョン
最新(2018.2.1)のプロフェッショナル向けPHP統合開発ツール

SublimeText3 中国語版
中国語版、とても使いやすい
