2009-04-29 17 views
14

Tôi đang triển khai một trang web được biên dịch sẵn và tất cả các trang được hợp nhất bằng cách sử dụng các dự án triển khai Web trên Visual Studio 2008. Lưu ý rằng tất cả các assembly và dự án đã được biên dịch trong chế độ Release.<compilation debug = "true"> trong trang web asp.net được biên dịch trước - Có quan trọng không?

Tất cả các trang của tôi được biên dịch trước ở chế độ phát hành. Vì vậy, họ sẽ không được biên dịch lại, chúng sẽ chỉ được tải theo thời gian chạy. Trong trường hợp đó khi biên dịch trang là không cần thiết, thiết lập <compilation debug="true"> trong system.web sẽ làm cho bất kỳ sự khác biệt?

Trả lời

26

Kiểm tra các liên kết tuyệt vời dưới đây:

Về cơ bản:

  • Mã của bạn sẽ chạy chậm hơn vì sự cần thiết của việc gỡ lỗi hỗ trợ.
  • Các tập lệnh và hình ảnh không được lưu vào bộ nhớ cache ở phía máy khách vì bạn không muốn mọi thứ được lưu trong bộ nhớ cache nếu bạn liên tục thực hiện các thay đổi và gỡ lỗi.
  • Yêu cầu không hết thời gian chờ. Một lần nữa khi bạn đang gỡ lỗi mã của mình, bạn không muốn nhận thời gian chờ yêu cầu.

Không có điều nào ở trên là mong muốn. Bạn sẽ tìm thấy nhiều nhược điểm hơn trong các liên kết ở trên.

+1

Cuộc gọi tốt, tôi đã quên những khác biệt về bộ nhớ cache/thời gian chờ. –

+0

@Aras: tất cả các trang của tôi được biên dịch trước trong chế độ phát hành. Vì vậy, họ sẽ không được biên dịch lại, chúng sẽ chỉ được tải theo thời gian chạy. Trong trường hợp đó khi biên dịch trang là không cần thiết, nó vẫn sẽ tạo sự khác biệt? –

2

Theo documentation:

Chỉ định liệu để biên dịch mã nhị phân gỡ lỗi chứ không phải là mã nhị phân lẻ

Tuy nhiên, có một cách nhanh chóng chỉ phản ánh qua System.Web, tôi có thể nhìn thấy lá cờ debug được sử dụng (trực tiếp hoặc gián tiếp) bằng cách sau:

  • Biên dịch thời gian chạy (ASPX/ASCX/MASTER)
  • Mã thế hệ các khả năng duyệt tập tin
  • HttpDebugHandler, được sử dụng trong một phiên gỡ lỗi

Do vậy, nếu trang web của bạn được biên dịch sẵn, bạn sẽ không nhận được một buổi biểu diễn hit. Tuy nhiên, như HttpApplication sẽ trả lời cho động từ http DEBUG, bạn mở cho mình các vấn đề bảo mật.

Tóm lại, đặt debug = false, ngay cả khi trang web của bạn được biên dịch trước.

Chỉnh sửa: debug = true sẽ dẫn đến hiệu suất (xem câu trả lời của Mehmet Aras) cho bộ nhớ đệm và không có thời gian chờ thực thi, nhưng nó sẽ không giảm tốc độ thực thi cho các trang được biên dịch.

2

Từ bài viết trên blog ASP.Net – Never again fear publishing your website with debug=true:

  • Việc lập ASP.NET trang mất nhiều thời gian (như biên soạn hàng loạt được tắt)
  • Mã thường thực hiện chậm chân
  • Memory tăng
  • Scripts và hình ảnh tải về từ handler WebResources.axd không được cache
  • Các yêu cầu không thời gian ra (điều này là xấu, như trong một môi trường sản xuất, chúng tôi không muốn các yêu cầu bị kẹt vô thời hạn)

Bài viết tiếp tục đề nghị đặt máy chủ sản xuất machine.config để đảm bảo chế độ triển khai bán lẻ bị ép buộc về cơ bản có nghĩa là gỡ lỗi là luôn luôn sai.

+0

Tôi có một triển khai được biên dịch trước trong chế độ Phát hành! –

+1

Bạn vẫn có thể thấy có tác động về hiệu suất, đặc biệt là liên quan đến hai điểm cuối cùng ở trên. –

Các vấn đề liên quan