2016-03-31 13 views
12

Anahtar olarak bir dize kabul eden bir çeviri borusu var ve çevrilmiş dizeyi bir sözlükten döndürür. Boru şuna benzer: Angular 2'deki (saf = yanlış) saf olmayan borular performansım için kötü mü?

import {Pipe, PipeTransform} from 'angular2/core'; 
import {TranslateService} from './translate.service'; 

@Pipe({ 
    name: 'translate', 
    pure: false 
}) 
export class TranslatePipe implements PipeTransform { 

    constructor(private _translateService : TranslateService) { 
    } 
    transform(key: string): any { 
     var translatedText = this._translateService.resources[key]; 
     if (translatedText) 
      return translatedText; 
     return key; 
    } 
} 

Bu gibi benim şablonları boru kullanın:

böyle benim HTML olarak oluşturulmuş olacaktır
<div>{{'login_EnterNewPassword'|translate}}</div> 

:

<div>Please enter a new password</div> 

Şimdiye kadar iyi!

TranslatePipe geçerli dilin çevirileri kaynaklar denilen bir sözlük tutan TranslateService bağlıdır. TranslateService'nin kaynağı bir sunucuya ajax http çağrısı ile yüklenir ve kullanıcı farklı bir dil seçerse sahnelerin arkasına yeniden yüklenebilir. ben bu gerçekleştiğinde tüm metinleri güncellemek için benim UI gerektiğinden

i false borunun saf özelliğini belirledik.

Her şey mükemmel çalışır, ancak şey kirli olduğundan boru, çok sık işletilirse vardır. Eğer kullanıcı 10 karakterli bir şifre girerse, her bir tuşa basma ve anahtarlama işleminde değişiklik başlar ve boru, sayfadaki tüm farklı tercüme edilmiş metinler için zamanların en çok kullanıldığı zamanlar haline gelir.

Ana soru şu: Bu kötü bir şey mi, ve genel performans üzerinde çok olumsuz bir etkisi var mı ???

Veya sadece dil değişiklikleri, örneğin talep üzerine her şeyi yeniden değerlendirmek açısal zorlamak için başka bir yolu yoktur ???

cevap

5

saf olmayan boruları kopyalama, filtreleme ve diziler gibi önemsiz olmayan çalışma yapmak, özellikle performansı üzerinde oldukça büyük bir etkiye sahiptir.

Her türlü değişiklik tespit döngüsünde, ne olursa olsun, impure borular denir. Mümkünse aynı işi yapmaktan kaçınmak için mümkünse sonuçları önbelleğe almak akıllıca olacaktır.

Saf borular yalnızca giriş değeri veya parametreleri değiştiğinde çağrılır.

Mümkünse, boruyu saf tutabilirsiniz ve bunun yerine ek bir parametre ekleyin. Bu parametrenin güncellenmesi borunun tekrar çalışmasına neden olur.

+0

"saf boruyu tutmak ve bunun yerine ek bir parametre ekleyebilir Mümkünse" değil boru parametresi ile boru sınıfı özelliği ile aynı şeyi mümkün mü? (eğer boru özelliği değişirse, parametre ölürse aynısını yapın) Boru hattım, geçerli dili döndüren bir çeviri servisi kullanıyor ve bu dili sadece dil olarak alabilmek için her bileşene eklemek istemiyorum. boruya bir parametre. –

+1

@GregorSrdic Anlıyorum ama diğer seçenekleri bilmiyorum. –

İlgili konular