Tôi đang xử lý một ứng dụng web sử dụng hệ thống tạo khuôn mẫu được phát triển tại nhà cho phép mã Perl được nhúng trong HTML. Các câu lệnh này được thực hiện bởi trình phân tích mẫu tại thời gian chạy bằng cách sử dụng eval EXPR
.Thay thế nhanh hơn cho eval?
Điều này rất linh hoạt, nhưng các báo cáo này nằm rải rác ở khắp mọi nơi và được thực thi lô. eval EXPR
(trái ngược với eval BLOCK
) yêu cầu Perl kích hoạt trình thông dịch mỗi lần và tiểu sử của tôi cho thấy rằng chúng là nguồn đáng kể đáng kể chậm lại.
Nhiều câu lệnh Perl được nhúng rất đơn giản. Ví dụ, một mẫu có thể có một dòng như sau:
<p>Welcome, <!--E: $user->query('name') -->.
Hoặc:
<p>Ticket number <!--E: $user->generate_ticket_number() --> has been generated.
Đó là, chúng tôi chỉ gọi phương pháp đối tượng. Tuy nhiên, có những phức tạp hơn.
Tôi hy vọng tối ưu hóa điều này, và cho đến nay có hai ý tưởng, cả hai đều là khủng khiếp. Đầu tiên là viết lại tất cả các mẫu để thay thế các cuộc gọi đơn giản bằng các mã thông báo như USER:NAME
và USER:GENERATETICKETNUMBER
, mà trình phân tích cú pháp có thể quét và gọi phương thức đối tượng thích hợp. Nhưng sau đó thay vì xử lý các mẫu kết hợp HTML và Perl, tôi sẽ có các mẫu kết hợp HTML, Perl và các thẻ. Ý tưởng thứ hai là cố gắng phân tích cú pháp Perl được nhúng, tìm ra câu lệnh muốn làm gì và nếu đủ đơn giản, hãy gọi phương thức đối tượng thích hợp thông qua một tham chiếu tượng trưng. Điều này rõ ràng là điên rồ.
Có một số giải pháp hợp lý mà tôi đang xem không?
+1 cho "Điều này rõ ràng là điên". –