0

次のようなJavaScriptコードがあるとします。

function Person(){}
var pro=Person.prototype;
pro["setName"]=function(){}
pro["setAge"]=function(){}

....

次に、クロージャコンパイラを使用してソースコードを縮小します。

ただし、クロージャコンパイラのコンパイルでは文字列リテラルが変更されないため、自分自身を置き換えたいと思います。

したがって、コードをコンパイルする前に、次のような文字列リテラルを置き換えたいと思います。

var a="setName",b="setAge";
function Person(){}
var pro=Person.prototype;
pro[a]=function(){}
pro[b]=function(){}

この仕事をするためにルビーを使いたいのですが、2つの質問があります。

  • 1)交換方法は?

ファイルを1行ずつスキャンしてみましたが、文字列リテラルを見つけて置換するにはどうすればよいですか?

  • 2)コードの競合

'a、b'のような変数を生成する必要があるので、それらがソースコードと競合しないようにするにはどうすればよいですか?たとえば、次のようなコードを生成します。

var something="setName";

では、ソースコードに「something」という名前の変数または関数が定義されている場合はどうでしょうか。

4

3 に答える 3

0

これを行う代わりに、gzipクロージャがファイルを最小化した後にファイルを圧縮するために使用することを検討する必要があります。

gzip入力データ内の重複する文字列を検索することで機能し、文字列の2番目の出現箇所を前の文字列へのポインタに置き換えます。これは、JavaScript文字列リテラルだけでなく、すべての入力データに対して行われます。

http://www.gzip.org/

于 2012-10-25T00:41:52.887 に答える
0

あなたの全体的な考えは正しいとは思いません。特に、1)を行うのは複雑すぎて、1つのWebページ内で答えることができないと思います。2)の場合、Javascriptコードの外部からそれを行うことも同様に困難ですが、ここを参照して、元のJavascriptコードを数行で隣接させ、Javascriptを実行して、変数のリストを取得できる場合があります。

于 2012-10-25T01:02:38.913 に答える
0

何らかの理由で、圧縮されたJSではなく生のJSサイズが心配な場合(ほとんどの人は圧縮されたサイズだけを心配する必要があります)。おそらく、「エイリアスすべての文字列」コンパイラオプション(ClosureCompilerのJavaAPIで利用可能)を有効にすることを検討する必要がありますか?

于 2012-10-25T15:40:04.500 に答える