2016-04-04 5 views
0

私たちの(大きな)Webアプリケーションとrequire jsの統合を検討しています。実行時にrequire jsを使用して最適化されたコードを切り替える

現時点では、本番用のjsファイルを最適化(連結および縮小)しています。実稼働環境の環境では、ブラウザを介して密かに入力できるセッションレベルの「デバッグ」フラグを使用できます。このフラグが設定されると、ブラウザはデバッグのためにファイルの非圧縮バージョンを(剃刀コードのif/elseステートメントを使用して)ロードします。

require jsを使用しているときに同等のメカニズムがありますか?

要約すると、 require jsを使用して、実行時に最適化されたjsファイルを使用したいと考えています。セッション状態のデバッグフラグに基づいて、実行時に非圧縮ファイルをロードする機能も必要です。私たちが使用して実行時に最適化されたJSファイルを使用したい事前に

おかげで、 -Marc

答えて

2

はJSが必要です。実行時に非圧縮ファイルをロードする機能も欲しい。

これは代わりにsource mapsを使用するのが最適です。縮小されたファイルに対してソースマップが存在する場合、ブラウザーはそれを使用して、実際の生コードがなくてもミニコードを元のバージョンに即座に戻すことができます。

修飾子には、縮小されたコードとともにソースマップを生成するオプションがあります。 RequireJSオプティマイザafaikは、ソースマップを生成できるUglify2を使用します。

ソースマップは、特に運用前の環境で優れています。プロダクション環境のように、この機能を無効にしたい場合は、ソースマップファイルを配備しないでください。

実稼働環境では、セッションレベルの「デバッグ」フラグを使用して、ブラウザから密かに入力することができます。

ところで、これはひどい考えです。この設定は、単なるオーバーヘッドで、コードクラフトです。


あなたが本当にデバッグ目的のために、生のソースおよび生産のためのコンパイルされたバージョンをロードすることを主張した場合、あなたは単にコンパイルされていないコードのエントリポイントスクリプトを使用してコンパイルされたスクリプトを交換することができます。これは、サーバー上にrawとコンパイルの両方のバージョンがあることを前提としています。あなたは、単に行うことができ、次の例(PHP)で

は、main.jsは生のソースのエントリポイントスクリプトであると仮定すると、main.min.jsは、コンパイルされたバージョンで、$debugは、使用しているものモードサーバーを伝えるいくつかの値です。

<script src="path/to/require.js"></script> 

<? if($debug): ?> 
<script src="path/to/main.js"></script> 
<? else: ?> 
<script src="path/to/main.min.js"></script> 
<? endif; ?> 

ただし、生のソースは、コンパイルされたソースとは異なる動作をする可能性があります。修飾子は、予期しないショートカットを使用してコードを前提とする傾向があります。これにより、生バージョンとコンパイルされたバージョンの動作が異なることがあります。

+0

ソースマップを使用していただきありがとうございます。 私は個人的に以下の理由でそれらをデバッグに使用しません。 *一部のブラウザではサポートされていません。私たちのアプリは古いブラウザで動作します。 *関数名は呼び出しスタック内のmangleであり、読み込み可能ではありません。 *ソースマップの場合でも、ローカル変数名はほとんどのブラウザではまだ変更されています。 私は元の質問で尋ねたことがどれほど簡単にできるのかはまだ不思議です。 ありがとうございます。 – Marc

関連する問題