2012-11-23 41 views
5

Tôi đang làm việc trên khuôn mẫu đơn giản enging cho công việc của tôi trong javascript .. nó cần phải rất đơn giản vì vậy tôi không sử dụng Handlebars, ria mép hoặc bất kỳ động cơ templating mạnh mẽ khác có sẵn.Trình biên dịch mẫu javascript là gì?

Tôi tiếp tục đọc từ 'PRECOMPILE' hoặc 'COMPILE' mẫu để tăng hiệu suất. Nhưng tôi không chắc chắn chính xác những gì sau đó có nghĩa là do đó. Trong công việc của tôi, tôi lưu trữ mẫu html trong đối tượng của mình để tránh phải truy cập html mẫu mọi lúc.

Đó là một chức năng rất đơn giản mà chủ yếu nào sau đây

_template = _template.replace(/\{(.+?)\}/g, function(token, match, number, txt) { 
        return item[match]; 
       }); 

mục là đối tượng mà giữ giá trị phải được thay thế.

Ai đó có thể vui lòng cho tôi biết chính xác nó có ý nghĩa gì khi họ (tay lái vv) nói biên dịch mẫu. ?

+0

tôi tìm thấy bài đăng này http: // ejohn.org/blog/javascript-vi-templating/sau khi đọc trả lời từ @nrabinowitz .. – Kamal

Trả lời

7

Thông thường các mẫu được phân tích cú pháp sử dụng regex và sau đó chuyển đổi sang sử dụng functioneval. Điều này được gọi là mẫu biên dịch trước.

Gọi các chức năng như vậy với một số dữ liệu được truyền dưới dạng đối số được gọi là hiển thị mẫu. Vì vậy, các mẫu không được phân tích cú pháp mỗi lần bạn gọi nó - nó đã tồn tại dưới dạng hàm kết hợp và trả về chuỗi.

-1

Cập nhật: Tôi không chính xác ở đây, hãy xem nhận xét bên dưới.

Vâng chúng ta hãy nói mẫu của tôi là một câu với điền vào chỗ trống:

Một ngày nọ, _ ___ quyết định anh ta sẽ mang lại _ ____ với người cùng vào _ ____.

Việc biên dịch mẫu sẽ được điền vào chỗ trống.

Vào ngày, JOHN quyết định sẽ mang SALLY cùng anh ấy đến BATMAN PREMIER.

Hope ẩn dụ là hữu ích trong trường hợp này:)

+4

Không, đó không phải là ý nghĩa của những thư viện này. Những gì bạn mô tả là vẽ mẫu, không biên dịch nó. – nrabinowitz

+0

Word! bạn đúng. – Costa

11

Gạch dưới, Bàn điều khiển và hầu hết các mẫu JS khác tạo ra một hàm ngoài chuỗi mẫu. Sau đó bạn có thể gọi hàm này nhiều lần với các đối số khác nhau và nhận được chuỗi HTML thích hợp. (Tôi tin rằng cả hai dấu gạch dưới và tay lái làm điều này bằng cách phân tích chuỗi mẫu thành mã JS và sau đó gọi hàm tạo Function để tạo hàm mẫu được biên dịch.)

Khi các thư viện này nói về "biên dịch trước", chúng có nghĩa là bước đầu tiên của chuyển chuỗi mẫu thành hàm có thể tái sử dụng. Đây có thể là một bước hơi nặng, nhưng nó làm cho khuôn mẫu trở nên nhanh hơn nhiều (nhanh hơn so với thay thế regex đơn giản trong hầu hết các trường hợp), do đó hiệu quả hơn để tạo hàm từ mã mẫu và sau đó sử dụng nó nhiều lần thay vì biên dịch lại và kết xuất mỗi khi mẫu được gọi.

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