2016-11-06 2 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; 



} 

아래의 코드는 자바 스크립트 객체 내에서 방법 :

는 대체 부분 코드이다. $ this (this (object scope))의 별칭입니다. 이 메소드는 orignal 텍스트에서 변환되고 대체 된 텍스트가있는 행을 가져옵니다. 전에 말했듯이, 지금까지는 모든 것이 잘 작동하지만 많은 시간이 걸립니다. ** 나는 다음 줄을 발견 한 그것을 테스트하는 것은 문제가있다 : ** 보시다시피

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

,이 라인은 코드의 첫 번째 세그먼트에했지만 "댓글을 달았습니다." 이 줄에 주석을 달면 파일은 391 밀리 초 안에로드됩니다. 하지만 만약 내가 라인을 discomment, 파일로드 45000과 60000 밀리 초 사이 (더 수 있습니다, 시간은 파일 크기에 따라 다릅니다). 파일의 길이는 1000 ~ 1800입니다.

"$ this.editorActual"은 내 에이스 에디터 인스턴스입니다. 텍스트 만 바꾸는 방법으로 "session.replace"를 발견하고 논리적으로이 줄을 사용하지 않으면 내 응용 프로그램이 작동하지 않습니다. 그래서, 제가 알고 싶습니다 줄을 대체하는 또 다른 빠른 방법이 있습니까? 알고 싶습니다. 선을 대체하는 또 다른 빠른 방법이 있습니까?

답변

1

바꾸기는 실행 취소 관리자에서 기록을 유지하고 이벤트를 작성해야하기 때문에 느립니다. setValue를 호출하거나 세션을 craeting하기 전에 문자열에 대한 번역을 바꿀 수 있습니다.

+0

안녕하세요, aswer 용 탱크. 생각해 보면, 나는 "hightlighting"을 선을 식별하는 도구로 사용했습니다. 당신은 에이스 편집기를 사용하여 텍스트 너비를 수정해야한다고하셨습니까? 또는 "세션"없이 그것을 사용하는 방법이 존재합니까? – jrodriguez

+0

몇 개의 하이라이트 범위가 있으며 텍스트가 수정되었을 때 하이라이트 범위를 어떻게 업데이트합니까? 이 문제는 더 많은 정보가 필요하다면 많은 앵커를 추가하는 것과 관련 될 수 있습니다. –

+0

하지만, 많은 텍스트가 될 수 있습니다. 그 대답은 올바른 방법이라고 생각하고, 나는 자신의 응용 프로그램 로직을 수정하고 모든 텍스트를 에이스 편집기에 삽입하기 전에 바꾼다. 이 방법은 내가 한 것보다 빠릅니다. 감사 – jrodriguez

관련 문제