2009-01-12 5 views
25

Tôi có XSLT để xem các tệp XML trong trình duyệt. XSLT được viết một cách ngây thơ và hiện đang mất nhiều thời gian để thực thi (vài phút).Làm cách nào để tiểu sử và tối ưu hóa XSLT?

Tệp XML của tôi có kích thước khiêm tốn (~ 1 MiB) và các XSLT khác cho cùng một tài liệu xử lý khác nhau thực thi nhanh hơn nhiều. Vì vậy, tôi biết nó không phải là kích thước của XML đó là vấn đề, đó là XSLT của tôi.

Tôi làm cách nào để tìm hiểu và tối ưu hóa XSLT của mình?

(có phải là một ý tưởng tồi để được làm XSLTs phức tạp trong trình duyệt? Tôi có nên thay vì áp dụng các ứng dụng bên XSLT?)

+0

NẾU bạn cung cấp mã XSLT và tài liệu XML mà bạn quan sát vấn đề, tôi và những người khác có thể cố gắng trợ giúp. –

+0

Lưu ý: XSLT lược tả và (tốt hơn) gỡ lỗi đã được thêm vào Visual Studio 2010.Tất nhiên, đây vẫn là XSLT 1.0. – Abel

Trả lời

26

bạn đang sử dụng công cụ XSLT nào? Nếu bạn đang sử dụng công cụ .NET và Visual Studio, bạn có thể sử dụng tích hợp XSLT profiler vào Visual Studio vốn rất hữu dụng.

Các công cụ định hình tuyệt vời khác là XML SpyOxygen của Altova.

Nếu bạn đăng bài XSLT, bạn sẽ dễ dàng hơn khi nói cho bạn biết nơi có thể bị tắc nghẽn. Nói chung hãy cẩn thận với các biểu thức XPath như '//', trước :: * và sau :: *. Một số quy tắc và phương pháp hay nhất khác:

  1. Tránh sử dụng lặp lại "//item".
  2. Đừng đánh giá cùng một tập hợp nút nhiều lần; lưu nó trong một biến.
  3. Tránh <xsl:number> nếu có thể. Ví dụ, bằng cách sử dụng position().
  4. Sử dụng <xsl:key>, ví dụ để giải quyết các vấn đề về nhóm.
  5. Tránh các mẫu phức tạp trong các quy tắc mẫu. Thay vào đó, hãy sử dụng trong quy tắc.
  6. Hãy cẩn thận khi sử dụng các trục preceding[-sibling] hoặc following[-sibling]. Điều này thường là cho biết thuật toán có hiệu suất n-bình phương .
  7. Không sắp xếp cùng một tập hợp nút nhiều lần. Nếu cần, hãy lưu nó dưới dạng mảnh cây kết quả và truy cập bằng cách sử dụng chức năng node-set() mở rộng .
  8. Để xuất giá trị văn bản của phần tử #PCDATA đơn giản, hãy sử dụng <xsl:value-of> tuỳ chọn <xsl:apply-templates>.

(từ http://www.dpawson.co.uk/xsl/sect4/N9883.html#d15756e150)

Tiếp theo những quy tắc thông thường sẽ dẫn đến XSLT rất hiệu quả và bạn có thể sẽ không cần phải sử dụng một hồ sơ ở tất cả.

Liên quan đến câu hỏi của bạn về XSLT trong trình duyệt: Tôi không khuyến khích nó vì đầu tiên bạn không có nền tảng độc lập (không phải mọi trình duyệt đều có thể hỗ trợ nó hoặc một số trình duyệt chỉ hỗ trợ nó bằng công cụ hoạt động kém) 't kiểm soát động cơ được sử dụng.

+0

Tôi đang chạy trong trình duyệt, vì vậy công cụ XSLT của tôi là bất kỳ việc sử dụng Firefox, IE và Safari nào. Tôi hiểu rằng mỗi động cơ sẽ hoạt động khác nhau với cùng một XSLT, vì vậy việc định cấu hình một công cụ cụ thể có thể không phản ánh tất cả 3. – pauldoo

+0

Đăng XSLT có vấn đề và tôi có thể giúp bạn tìm các dòng có vấn đề. –

+0

Như divo nói: "Đăng XSLT có vấn đề và tôi có thể giúp bạn tìm ra các dòng có vấn đề" :) –

2

Các thương mại Oxygen XML biên tập có một tính năng cho hồ sơ và gỡ lỗi XSLT file. Đó cũng là một trình soạn thảo XML tốt.

1

Tôi thích sử dụng Altova's XMLSpy cho máy chạy Windows. Nó cũng có một trình dựng sẵn. Bạn có thể check out a video on using the editor. (scan đến 5:45 để tìm hiểu thêm về profiler). Nó là một sản phẩm thương mại ... với khoảng thời gian dùng thử :)

18

Nếu bạn cung cấp mã XSLT và tài liệu XML mà bạn quan sát vấn đề, tôi và những người khác có thể cố gắng giúp.

Dưới đây là một số XSLT usage and performance tips từ Michael Kay:

Tám lời khuyên cho việc làm thế nào để sử dụng một cách hiệu quả XSLT:

  1. Giữ các tài liệu nguồn nhỏ. Nếu cần phân chia tài liệu trước tiên.
  2. Giữ bộ xử lý XSLT (và Java VM) được nạp vào bộ nhớ giữa các lần chạy
  3. Nếu bạn sử dụng cùng một biểu định kiểu nhiều lần, hãy biên dịch nó trước.
  4. Nếu bạn sử dụng cùng một tài liệu nguồn nhiều lần, hãy giữ nó trong bộ nhớ.
  5. Nếu bạn thực hiện cùng một phép biến đổi nhiều lần, đừng. Lưu trữ kết quả thay thế.
  6. Giữ tài liệu đầu ra nhỏ. Ví dụ: nếu bạn đang tạo HTML, hãy sử dụng CSS.
  7. Không bao giờ xác thực cùng một tài liệu nguồn nhiều lần.
  8. Chia biến đổi phức tạp thành nhiều giai đoạn.

Tám lời khuyên cho việc làm thế nào để viết hiệu quả X SLT:

  1. Tránh lặp đi lặp lại sử dụng "//item".
  2. Đừng đánh giá cùng một tập hợp nút nhiều lần; lưu nó trong một biến.
  3. Tránh <xsl:number> nếu có thể. Ví dụ: bằng cách sử dụng position().
  4. Sử dụng <xsl:key>, ví dụ để giải quyết các vấn đề về nhóm.
  5. Tránh các mẫu phức tạp trong các quy tắc mẫu. Thay vào đó, hãy sử dụng <xsl:choose> trong quy tắc.
  6. Hãy cẩn thận khi sử dụng các trục preceding[-sibling] hoặc following[-sibling] . Điều này thường là cho biết thuật toán có hiệu suất-squared.
  7. Không sắp xếp cùng một tập hợp nút nhiều lần. Nếu cần, hãy lưu nó dưới dạng mảnh cây kết quả và truy cập nó bằng chức năng mở rộng node-set().
  8. Để xuất giá trị văn bản của phần tử #PCDATA đơn giản, hãy sử dụng <xsl:value-of> trong tùy chọn đến <xsl:apply-templates>.
+0

+1 cho các mẹo XSLT. –