Tôi đã tự mình thử tất cả 3 thư viện và tìm thấy một số khác biệt.
- RazorEngine - cách dễ nhất và hoạt động tốt nhất trong số tất cả chúng, hỗ trợ bộ nhớ đệm theo mặc định.
- RazorTemplates - không hỗ trợ một số chỉ thị Razor (ví dụ @model) và sử dụng rất nhiều loại
dynamic
. Có thể sử dụng các mẫu biên dịch trước.
- RazorMachine - rất không thể đoán trước và với thiết kế lạ yêu cầu sử dụng một cá thể chung duy nhất thay vì một lớp tĩnh.
Đối với tôi, tôi đã chọn RazorEngine. Ngoài ra ở đây là mã làm thế nào để sử dụng các thư viện:
RazorEngine
string html = Razor.Parse(templateContent, model, templatePath);
RazorTemplates
if (!_templatesCache.ContainsKey(templatePath))
{
var compiledTemplate = Template.Compile(templateContent);
_templatesCache.Add(templatePath, compiledTemplate);
}
string html = _templatesCache[templatePath].Render(model);
RazorMachine
private readonly Lazy<RazorMachine> _lazyRazorMachine =
new Lazy<RazorMachine>(() => new RazorMachine());
//...
var rm = _lazyRazorMachine.Value;
string html = rm.ExecuteContent(templateContent, model, null, true).Result;
.210
Và một số xét nghiệm thực hiện, kiểm tra mỗi thư viện 2 lần trên cùng một mẫu, tất cả đều có một hiệu suất tương tự mà không có một sự khác biệt lớn:
RazorEngine - 1731 ms, 0,1 ms
RazorTemplates - 1753 ms , 0,1 ms
RazorMachine - 1608 ms, 0,1 ms
Bạn đã sử dụng cùng một đối tượng của đối tượng RazorMachine qua nhiều thử nghiệm chưa? Đó là nghĩa vụ phải là một ứng dụng đơn cấp quản lý tất cả các bộ nhớ đệm và biên dịch trước: https://github.com/jlamfers/RazorMachine/wiki/Examples –
@ Chris Hynes Có, nó bật ra vấn đề là vì tôi tạo ra một ví dụ mới mỗi lần, bây giờ tôi đã sửa mã. Mặc dù thực tế vẫn còn, thư viện hoạt động một cách rất bất ngờ. – vorrtex
RazorEngine hoạt động như thế nào với các công cụ nâng cao như mô hình, lớp xem tùy chỉnh, bố cục, khung nhìn, v.v ...? RazorMachine, phức tạp như nó là, nó là điều duy nhất tôi đã tìm thấy rằng thực sự làm việc với các gam màu đầy đủ các tính năng Razor. Tôi đặt cùng một vài lớp làm việc với RazorMachine để cung cấp một môi trường giống như Razor đầy đủ với bố trí, khung nhìn, vv, nhưng chạy dựa trên các tệp tài nguyên nhúng. Điều này cho phép tôi sử dụng các mẫu giống nhau từ một dự án web, dự án dịch vụ hoặc những gì có bạn. –