2016-03-31 19 views
12

Tôi có một đường ống dịch, chấp nhận một chuỗi làm khóa và trả về chuỗi đã dịch từ một từ điển. Các ống trông như thế này:Ống không tinh khiết trong Angular 2 (pure = false) có hại cho hiệu suất của tôi không?

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; 
    } 
} 

tôi sử dụng các đường ống trong các mẫu của tôi như thế này:

<div>{{'login_EnterNewPassword'|translate}}</div> 

Mà sẽ được trả lại trong HTML của tôi như thế này:

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

Cho đến nay rất tốt!

Dịch TranslatePipe phụ thuộc vào Dịch vụ, giữ từ điển được gọi là tài nguyên có bản dịch của ngôn ngữ hiện tại. Tài nguyên của TranslateService được tải bằng một cuộc gọi http ajax đến một máy chủ và nó có thể được tải lại sau hậu trường, nếu người dùng chọn một ngôn ngữ khác.

Vì tôi cần giao diện người dùng của mình để cập nhật tất cả các văn bản khi điều này xảy ra, tôi đã đặt thuộc tính thuần túy của đường ống thành sai.

Mọi thứ hoạt động hoàn hảo, nhưng vấn đề là, ống được thực hiện rất thường xuyên, vì nó không tinh khiết. Nếu người dùng nhập mật khẩu 10 ký tự, thay đổi theo dõi sẽ bắt đầu từ mỗi lần nhấn phím và khóa, và đường dẫn được thực hiện nhiều lần cho tất cả các văn bản đã dịch khác nhau trên trang.

Câu hỏi chính là: Đây có phải là điều xấu và có tác động tiêu cực đến hiệu suất tổng thể không ???

Hoặc có cách nào khác để buộc góc để đánh giá lại mọi thứ theo yêu cầu, chẳng hạn chỉ khi ngôn ngữ thay đổi ???

Trả lời

5

Ống không tinh khiết có tác động khá lớn đến hiệu suất, đặc biệt khi chúng hoạt động không tầm thường như sao chép, lọc và sắp xếp mảng.

Ống không tinh khiết được gọi trên mọi chu kỳ phát hiện thay đổi, bất kể là gì. Đó là khôn ngoan để kết quả bộ nhớ cache nếu có thể để tránh làm công việc tương tự hơn và hơn nếu có thể.

Ống thuần túy chỉ được gọi khi giá trị đầu vào hoặc thông số đã thay đổi.

Nếu có thể bạn có thể giữ cho đường ống trong sạch và thay vào đó hãy thêm thông số bổ sung. Việc cập nhật tham số đó làm cho đường ống được chạy lại.

+0

"Nếu có thể bạn có thể giữ cho đường ống trong sạch và thay vào đó hãy thêm thông số bổ sung" Có thể thực hiện tương tự với thuộc tính lớp ống không có tham số ống không? (nếu thuộc tính ống thay đổi, làm tương tự như tham số chết) Đường ống của tôi sử dụng dịch vụ dịch trả về ngôn ngữ hiện tại và tôi sẽ không muốn thêm dịch vụ này vào mọi thành phần, chỉ để có thể chuyển ngôn ngữ một tham số cho đường ống. –

+1

@GregorSrdic Tôi hiểu điều đó nhưng tôi không biết các tùy chọn khác. –

Các vấn đề liên quan