Bối cảnh
Làm việc như một nhà phát triển tự do, tôi thường tạo các trang web hoàn toàn dựa trên XSLT. Nói cách khác, trên mỗi yêu cầu, một tệp XML được tạo, chứa mọi thứ chúng ta cần biết về nội dung trang: tên của người dùng hiện đang đăng nhập, các mục menu trên cùng, nếu menu này là động / có thể định cấu hình, văn bản sẽ hiển thị trong một khu vực cụ thể của trang, v.v. Sau đó, quy trình XSL (bộ nhớ cache, v.v.) nó đến trang HTML / XHTML để gửi đến trình duyệt.
Nó có một điểm tốt để giúp dễ dàng tạo các trang web quy mô nhỏ, đặc biệt là với PHP. Nó là một loại công cụ mẫu, nhưng tôi thích các công cụ mẫu khác vì nó mạnh hơn hầu hết các công cụ mẫu và vì tôi biết nó tốt hơn và thích nó. Khi có thể, cũng có thể cung cấp quyền truy cập vào dữ liệu XML thô theo yêu cầu cho quyền truy cập tự động mà không cần phải tạo các API riêng biệt.
Tất nhiên, nó sẽ thất bại hoàn toàn trên bất kỳ trang web quy mô trung bình hoặc quy mô lớn nào, vì ngay cả với các kỹ thuật bộ nhớ đệm tốt, XSL vẫn làm giảm hiệu suất tổng thể của trang web và yêu cầu nhiều máy chủ CPU hơn.
Câu hỏi
Các trình duyệt hiện đại có khả năng lấy tệp XML và chuyển đổi tệp đó bằng tệp XSL được liên kết được khai báo bằng XML như thế nào <?xml-stylesheet href="demo.xslt" type="text/xsl"?>
. Firefox 3 có thể làm điều đó. Internet Explorer 8 cũng có thể làm điều đó.
Điều đó có nghĩa là có thể di chuyển xử lý XSL từ máy chủ sang phía máy khách cho 50% người dùng (theo thống kê của trình duyệt trên một số trang web nơi tôi có thể muốn thực hiện việc này). Điều đó có nghĩa là 50% người dùng đó sẽ chỉ nhận được tệp XML theo từng yêu cầu, do đó làm giảm băng thông của họ và máy chủ (tệp XML ngắn hơn nhiều so với HTML tương tự được xử lý) và giảm mức sử dụng CPU của máy chủ.
Nhược điểm của kỹ thuật này là gì?
Tôi đã nghĩ về một vài cái, nhưng nó không áp dụng trong tình huống này:
- Việc triển khai khó khăn và cần phải lựa chọn, dựa trên yêu cầu của trình duyệt, khi nào nên gửi XML thô và khi nào cần chuyển đổi nó sang HTML. Rõ ràng, hệ thống sẽ không khó khăn hơn nhiều so với thực tế. Thay đổi duy nhất cần thực hiện là thêm liên kết tệp XSL vào mỗi XML và thêm kiểm tra trình duyệt.
- Sử dụng IO và băng thông nhiều hơn, vì tệp XSLT sẽ được trình duyệt tải xuống, thay vì được lưu trữ bởi máy chủ. Tôi không nghĩ đó sẽ là một vấn đề, vì tệp XSLT sẽ được các trình duyệt lưu vào bộ nhớ cache (như hình ảnh hoặc CSS hoặc tệp JavaScript thực sự được lưu trong bộ nhớ cache).
- Có thể một số vấn đề về phía máy khách, như có thể có vấn đề khi lưu một trang trong một số trình duyệt.
- Khó gỡ lỗi mã: không thể có được nguồn HTML mà trình duyệt thực sự đang sử dụng, vì nguồn duy nhất được hiển thị là XML đã tải xuống. Mặt khác, tôi hiếm khi nhìn vào mã HTML ở phía máy khách và trong hầu hết các trường hợp, nó không thể sử dụng trực tiếp (khoảng trắng bị xóa).
ngx_http_xslt_module
hay cả bốn). Tôi rất nghi ngờ sự hỗ trợ phía máy khách của XSLT 2.0 là tốt hơn.