2016-11-06 19 views
1

私は電子エディタを使用しています。エースエディタを使用しています。以前の投稿で述べたように、私のアプリではファイルを読み、コンテンツをチェックし、翻訳できる行をマークします。すべてうまく動作します。ユーザーがテキストを翻訳すると、データベースに保存されるので、以前に翻訳されたファイルを開いた場合は、翻訳されたテキストをチェックし、実際の翻訳テキストと置き換えます。すべてがうまくいく。しかし、ファイルの中には読み込みに時間がかかりすぎるものもあります。エースエディタの最適化機能の最適化

これは交換セグメントコードである:

insertTranslateLines:function(trasnlate,linea,idMarker,inline,item){ 

     // console.log($this.__time($this.start),"ak",linea); 
     var currentLine = $this.obtLinea(linea); 
     trasnlateStr = trasnlate.trasnlate; 
     if(inline || $this.lineaEnComillas(currentLine)){ 
      trasnlateStr = trasnlate.trasnlate.replace(/^\s\s*/, '').replace(/\s\s*$/, ''); 

      if(!inline){ 
       var endReemplazo= currentLine.lastIndexOf("\""); 
       var startLine = currentLine.indexOf("\"")+1; 
       var partEnd  = startLine + trasnlateStr.length; 
      } 
      else{ 
       var texto  = currentLine.match($this.expresiones.cadenaTraducir2); 
       var startLine = currentLine.indexOf(texto[item])+1;//se suma uno para eliminar la comilla 
       var partEnd  = startLine + trasnlateStr.length; 
       var endReemplazo= startLine + texto[item].length-2;//se restan las comillas 
       // texto = currentLine.split($this.expresiones.cadenaTraducirSplit); 

      }    

      highLightRange = $this.setRange(linea,startLine,linea,partEnd); 
      replaceRange = $this.setRange(linea,startLine,linea,endReemplazo); 
      // $this.editorActual.session.replace(replaceRange,trasnlateStr); 
     }else{ 
      replaceRange = $this.setRange(linea,0,linea,currentLine.length); 
      highLightRange = $this.setRange(linea,0,linea,trasnlateStr.length);  
     } 
     token = $this.editorActual.session.bgTokenizer.getTokens(linea,0); 

     // $this.editorActual.session.replace(replaceRange,trasnlateStr); 
     if(typeof highLightRange!='undefined'){ 
      $this 
       .registerTrasnlate(idMarker,highLightRange); 
      if(token[0].type!='comment') 
      { 
       $this.setMarker(idMarker,highLightRange); 
      } 


      return highLightRange; 
     }else return false; 



} 

以下のコードは、私のJavaScriptのオブジェクトからメソッドです。 $ this(this(オブジェクトスコープ))のエイリアスです。このメソッドは、テキストのテキストから変換され置き換えられたテキストがある行を取得します。私が前に言ったように、これまでのところすべてがうまくいっていますが、プロセスには多くの時間がかかります。 **私は次の行を検出した、それをテストすることは問題である:**ご覧のとおり

$this.editorActual.session.replace(replaceRange,trasnlateStr); 

、この行は、コードの最初のセグメントにあったが、「コメント」。この行をコメントすると、ファイルは391ミリ秒で読み込まれます。しかし、もし私が行をコメントアウトすると、ファイルは45000から60000ミリ秒の間に読み込まれます(もっと多くの場合、時間はファイルサイズによって異なります)。ファイルは1000〜1800行の間にあります。

"$ this.editorActual"は私のエースエディタのインスタンスです。私は "session.replace"テキストを置き換えるためのメソッドとして、論理的にこの行なしで、私のアプリは動作しませんでした。だから、ラインを置き換えるもう一つの最速の方法があるのか​​知りたいのですか?ラインを交換するもう一つの最速の方法がありますか?

答えて

1

replaceは、元に戻すマネージャと作成イベントで履歴を保持する必要があるため、遅いです。 setValueを呼び出す前に文字列の翻訳を置き換えることができます。

+0

こんにちは、aswerのタンク。考えてみると、私はラインを識別するツールとして "ハイライトライティング"を使用しました。あなたは私がテキストの幅を変更する必要があると言ったエースエディタを使用して?または「セッション」なしでそれを使用する方法が存在しますか? – jrodriguez

+0

ハイライト範囲はいくつありますか?テキストが変更されたときにどのように更新するのですか?問題はより多くのアンカーを追加することに関連している可能性があります。詳細情報が必要です –

+0

それは依存しますが、多くのテキストになる可能性があります。私は答えが正しいと思うし、私は自分のアプリケーションのロジックを変更し、それをエースエディタに挿入する前にすべてのテキストを置き換えています。この方法は私のやり方よりも速いです。ありがとう – jrodriguez