2013-06-20 17 views
9

Tôi đã đọc đề nghị này về tái chế của Domino đối tượng: What is the best way to recycle Domino objects in Java BeansXPage Java Object Recycle trong SSJS

thực hành tốt nhất là gì nếu tôi có một nguồn dữ liệu tên tài liệu và trong một chức năng đó được gọi là nhiều lần mã này tồn tại:

var doc=document.getDocument(true) 

và thực hiện công cụ cho tài liệu phụ trợ.

Trước khi thoát khỏi hàm, tôi có nên tái chế doc hoặc tài liệu phụ trợ của tôi vào nguồn dữ liệu được tái chế sau đó không?

+0

Lý do về tái chế là giải phóng các đối tượng đã sử dụng. Nó tự động xảy ra khi chuỗi http kết thúc với yêu cầu. Điều cần thiết là tái chế trong chu kỳ, những gì tiêu thụ số lượng giới hạn số lượng vật thể hạn chế (giới hạn là ~ 10k xử lý cho toàn bộ máy chủ Domino/Ứng dụng Ghi chú). Vì vậy, bạn có thể đủ khả năng không tái chế một số tài liệu, trừ khi bạn gọi mã của bạn theo chu kỳ. Cẩn thận với các đối tượng đặc biệt (ngày/giờ, người dùng) gắn liền với phiên. –

Trả lời

13

Đây là một câu hỏi tuyệt vời, bởi vì đây là một trong những trường hợp ngoại lệ duy nhất là "tái chế tất cả mọi thứ" nguyên tắc (hai ví dụ đáng chú ý khác là bạn bao giờ nên tái chế phiên hiện tại hoặc cơ sở dữ liệu). Đó là một ý tưởng tồi để tái chế tài liệu phía sau cho một nguồn dữ liệu, bởi vì vòng đời JSF có cùng xử lý, và bạn sẽ tái chế nó từ bên dưới Domino. Nguồn dữ liệu sẽ giải quyết vấn đề này cho chúng tôi, vì vậy không cần phải tái chế nó theo cách thủ công. Mặt khác, nếu bạn xử lý các mặt hàng cụ thể (ví dụ: doc.getFirstItem("someFieldName") hoặc giá trị mặt hàng là ngày, bạn nên tái chế các đối tượng đó, không phải bản thân tài liệu đó. Không phải bản thân tài liệu. rất quan trọng để tái chế các đối tượng Java và SSJS đang ở trong chế độ xem lần lặp, bởi vì mỗi khi bạn chuyển sang mục nhập hoặc tài liệu tiếp theo, bạn sẽ bị rò rỉ nếu bạn bỏ qua thùng rác. Tuy nhiên, nếu bạn đang lặp lại một khung nhìn rất lớn, bạn có thể dễ dàng chạy ra khỏi các chốt xử lý trong một lần lặp nếu bạn quên tái chế.

Tuy nhiên, tôi nghĩ rằng tôi hiếm khi thấy một tình huống mà việc xử lý tài liệu cuối của nguồn dữ liệu là cách tiếp cận tốt nhất, vì vậy tôi khuyên bạn nên xem lại mã của mình để đảm bảo rằng . Ví dụ: thay vì document.getDocument(true).getItemValueString("someFieldName"), chỉ cần gọi document.getValue("someFieldName"). Giá trị trả về phải giống nhau, nhưng nó sẽ chạy hiệu quả hơn và bạn không chạm vào tài liệu cuối, vì vậy việc tái chế không phải là vấn đề. Và nó ít gõ cho mỗi mục truy cập, mà chắc chắn thêm lên theo thời gian. Tương tự, thay vì document.getDocument(true).replaceItemValue("someFieldName", "newValue"), thay thế document.setValue("someFieldName", "newValue").