6

Tôi đã hỏi this question một vài tuần trước. Hôm nay tôi đã thực sự viết và phát hành một ứng dụng Django chuẩn, tức là một DB đầy đủ chức năng quan hệ hậu thuẫn (và do đó đầy đủ chức năng Django admin) được kích hoạt bởi Google CloudSQL. Thời gian duy nhất tôi đã phải đi chệch khỏi những điều theo cách Django tiêu chuẩn là để gửi email (đã phải làm điều đó theo cách GAE). Thiết lập của tôi là GAE 1.6.4, Python2.7, Django 1.3 bằng cách sử dụng sau đây trong app.yaml:Django trên GoogleAppEngine: hiệu suất howto

libraries: 
- name: django 
    version: "1.3" 

Tuy nhiên tôi không cần bạn gợi ý bước hành động rõ ràng để cải thiện với thời gian đáp ứng được yêu cầu ban đầu khi lạnh của ứng dụng Django này. Tôi có một trang web đơn giản là webapp2 trên GAE, mà không không nhấn DB và khi lạnh thời gian phản hồi là 1.56s. Một Django, khi lạnh, truy cập DB với 2 truy vấn (hai count(*) truy vấn trên các bảng có chứa ít hơn 300 hàng mỗi) và thời gian phản hồi là 10.73s! Không khuyến khích cho trang chủ;)

Những điều cần lưu ý là xóa các lớp học middleware tôi không cần và các tối ưu hóa cụ thể khác của Django. Tuy nhiên các mẹo cải thiện mọi thứ cũng từ quan điểm GAE sẽ thực sự hữu ích.

N.B. Tôi không muốn điều này trở thành một cuộc thảo luận về giá trị của việc đi Django trên GAE. Tôi có thể đề cập rằng chuyên môn Django cá nhân của tôi, và kết quả năng suất phát triển, đã chịu đáng kể trong việc áp dụng Django như trái ngược với các khuôn khổ khác. Hơn nữa với CloudSQL, thật dễ dàng để di chuyển khỏi GAE (hy vọng là không!) Vì mã Django sẽ hoạt động ở mọi nơi khác với các sửa đổi nhỏ (hoặc không). Các cuộc thảo luận liên quan về chủ đề như vậy có thể được tìm thấy herehere.

+0

Thời gian phản hồi của trang chủ khi ứng dụng được làm ấm là gì? –

+0

Bạn đã định dạng gì? – DrTyrsa

+0

@DanielRoseman Nó trung bình khoảng nhãn 200ms, rất tuyệt vời. –

Trả lời

2

Tôi không có câu trả lời đầy đủ nhưng tôi đang đóng góp vì tôi cũng muốn tìm giải pháp. Tôi hiện đang sử dụng một công việc cron đang chạy (tôi thực sự cần công việc cron, vì vậy nó không chỉ để giữ cho ứng dụng của tôi còn sống).

Tôi đã thấy nó được thảo luận trong một danh sách gửi thư có liên quan GAE/Python/Django chỉ cần thời gian để tải lên tất cả các tệp Django là rất quan trọng khi so sánh với webapp, sử dụng từ triển khai cũng sẽ cải thiện thời gian khởi động của bạn. Tôi đã có thể cạo khoảng 3 giây bằng cách loại bỏ một số phần của thư mục contrib. Tôi loại trừ chúng trong app.yaml của tôi.

Thời gian khởi động của tôi vẫn còn khoảng 6 giây (đầy đủ ứng dụng, Django-nonrel, HRD). Nó đã từng giống như 4 khi ứng dụng của tôi đơn giản hơn.

Nghi ngờ của tôi là Django xác minh tất cả các mô hình của nó khi khởi động và thời gian xử lý là đáng kể. Nếu bạn có thời gian với thử nghiệm với một ứng dụng với hoàn toàn 0 mô hình, tôi muốn được tò mò nếu nó thực hiện bất kỳ tác động.

Tôi cũng tò mò muốn biết liệu hai truy vấn ban đầu của bạn có tạo ra tác động đáng kể nào không.

+0

Yêu cầu khởi động được thiết kế cho điều này - không cần cronjob làm điều đó. –

+0

@dragonx Sự cố phải liên quan đến Django nặng nề và truy vấn CloudSQL ... như với WebApp2 khi * cold * nó phản hồi luôn với dấu ~ 2s. Tôi đang thực hiện một số chỉnh sửa/cải tiến sẽ cho bạn biết kết quả. –

+0

@NickJohnson Tôi tập trung vào tối ưu hóa chỉ django, bằng cách xóa django-admin khỏi được bật trên phiên bản sản xuất. Dựa trên việc ứng dụng đang chạy trong sản xuất hay cục bộ, tôi đặt biến cài đặt Django 'DEBUG' và bây giờ tôi cũng thêm vào' MIDDLEWARE_CLASSES' và 'INSTALLED_APPS' nếu tôi đang chạy cục bộ. Tôi cũng đã xóa ~ 600Kb phương tiện truyền thông tĩnh Django (chúng không có sẵn tự động] (http://stackoverflow.com/a/9863345/1211429) trong quá trình sản xuất). Những chỉnh sửa Django-focuse cải thiện thời gian phản hồi của tôi khi * lạnh * từ ~ 10 giây ở trên đến ~ 5s. –

2

Khi không có cá thể chạy, ví dụ sau khi nâng cấp phiên bản hoặc khi không có yêu cầu trong 15 phút, sau đó yêu cầu sẽ kích hoạt tải một phiên bản mất khoảng 10 giây. Vì vậy, những gì bạn đang thấy là bình thường.

Vì vậy, nếu ứng dụng của bạn không hoạt động trong khoảng thời gian lâu hơn thì 15 phút bạn sẽ thấy hành vi này. Một cách giải quyết là có một công việc cron ping của bạn dụ mỗi 10 phút (mặc dù tôi tin rằng google không thích điều đó).

Cập nhật:

Bạn có thể tránh điều này bằng cách cho phép thanh toán sau đó trong GAE admin dưới "Cài đặt ứng dụng" thiết lập minimum Instances Nhàn rỗi thiết lập để 1. Lưu ý: các thiết lập min không có sẵn trên ứng dụng miễn phí, chỉ max .

+0

Vì vậy, nó cùng một vấn đề như [this] (http://stackoverflow.com/questions/1854821/google-app-engine-application-extremely-slow) ... nhưng làm thế nào đến này '10s' * warm up * hiện không xảy ra với các ứng dụng 'webapp2'? –

+0

Không biết. Tôi thấy nó trên các ứng dụng thử nghiệm java của tôi. –

+0

Xem câu trả lời cập nhật .. –