Chọn Java vs Python trên Google App Engine


161

Hiện tại Google App Engine hỗ trợ cả Python & Java. Hỗ trợ Java kém trưởng thành. Tuy nhiên, Java dường như có một danh sách dài hơn các thư viện và đặc biệt là hỗ trợ mã byte Java bất kể các ngôn ngữ được sử dụng để viết mã đó. Ngôn ngữ nào sẽ cho hiệu suất tốt hơn và sức mạnh hơn? Xin tư vấn. Cảm ơn bạn!

Chỉnh sửa: http://groups.google.com/group/google-appengine-java/web/will-it-play-in-app-engine?pli=1

Chỉnh sửa: Bằng "sức mạnh" Tôi có nghĩa là khả năng mở rộng tốt hơn và bao gồm các thư viện có sẵn bên ngoài khuôn khổ. Python chỉ cho phép các thư viện Python thuần túy.


hiện Google App Engine đang hỗ trợ Go (thử nghiệm). Những gì bạn khó khăn về điều đó?
Benjamin Crouzier

@pinouchon Tôi đã bắt đầu sử dụng Go và đã triển khai nó trong sản xuất trên GAE. GO hoạt động rất tốt trên GAE, biên dịch trong vài giây. Chọn khung web của bạn một cách khôn ngoan :-)
Michele Giuseppe Fadda

Câu trả lời:


123

Tôi thiên vị (là một chuyên gia về Python nhưng khá thô lỗ trong Java) nhưng tôi nghĩ rằng thời gian chạy Python của GAE hiện đang tiến bộ hơn và được phát triển tốt hơn so với thời gian chạy Java - trước đây, đã có thêm một năm để phát triển và trưởng thành .

Tất nhiên mọi thứ sẽ tiến triển như thế nào là điều khó dự đoán - nhu cầu có lẽ mạnh hơn ở phía Java (đặc biệt là vì không chỉ về Java, mà cả các ngôn ngữ khác cũng nằm trên JVM, vì vậy đó là cách để chạy ví dụ như PHP hoặc mã Ruby trên Máy ứng dụng); Tuy nhiên, nhóm Python App Engine có lợi thế khi có trên tàu Guido van Rossum, người phát minh ra Python và một kỹ sư mạnh mẽ đáng kinh ngạc.

Về tính linh hoạt, công cụ Java, như đã đề cập, cung cấp khả năng chạy mã byte JVM được tạo bởi các ngôn ngữ khác nhau, không chỉ Java - nếu bạn đang ở trong một cửa hàng đa ngôn ngữ có giá trị khá lớn. Ngược lại, nếu bạn ghét Javascript nhưng phải thực thi một số mã trong trình duyệt của người dùng, thì GWT của Java (tạo Javascript cho bạn từ mã hóa cấp Java) sẽ phong phú và tiên tiến hơn nhiều so với các lựa chọn thay thế của Python (trong thực tế, nếu bạn chọn Python, bạn sẽ tự viết một số JS cho mục đích này, trong khi nếu bạn chọn Java GWT là một lựa chọn thay thế có thể sử dụng được nếu bạn không thích viết JS).

Về mặt thư viện, điều này khá rõ ràng - JVM bị hạn chế đủ (không có luồng, không có trình tải lớp tùy chỉnh, không JNI, không DB quan hệ) để cản trở việc tái sử dụng đơn giản các thư viện Java hiện có, hoặc nhiều hơn so với Python hiện có các thư viện bị cản trở tương tự bởi các hạn chế tương tự đối với thời gian chạy Python.

Về hiệu năng, tôi nghĩ rằng đó là một sự gột rửa, mặc dù bạn nên đánh giá các nhiệm vụ của riêng mình - đừng dựa vào hiệu suất của các triển khai JVM dựa trên JIT được tối ưu hóa cao để giảm thời gian khởi động và dấu chân bộ nhớ lớn của chúng, bởi vì công cụ ứng dụng môi trường rất khác nhau (chi phí khởi động sẽ được thanh toán thường xuyên, vì các phiên bản ứng dụng của bạn được khởi động, dừng, chuyển sang các máy chủ khác nhau, v.v., tất cả đều theo bạn - các sự kiện như vậy thường rẻ hơn nhiều với môi trường thời gian chạy Python so với JVM).

Tình huống XPath / XSLT (trở nên uyển chuyển ...) không hoàn toàn chính xác ở cả hai bên, thở dài, mặc dù tôi nghĩ rằng nó có thể là một ít tệ hơn trong JVM (trong đó, rõ ràng, các tập hợp con đáng kể của Saxon có thể được thực hiện để chạy , với một số chăm sóc). Tôi nghĩ rằng đáng để mở các vấn đề trên trang Các vấn đề về Appengine với XPath và XSLT trong các tiêu đề của họ - ngay bây giờ chỉ có các vấn đề yêu cầu các thư viện cụ thể và đó là cận thị: Tôi thực sự không quan tâm làm thế nào một XPath / XSLT tốt được triển khai, cho Python và / hoặc cho Java, miễn là tôi có thể sử dụng nó. (Các thư viện cụ thể có thể dễ dàng di chuyển mã hiện tại, nhưng điều đó ít quan trọng hơn việc có thể thực hiện các tác vụ như "áp dụng nhanh chóng chuyển đổi XSLT" theo cách MỘT SỐ! -). Tôi biết tôi sẽ giải quyết vấn đề như vậy nếu diễn đạt tốt (đặc biệt là theo cách độc lập với ngôn ngữ).

Cuối cùng nhưng không kém phần quan trọng: hãy nhớ rằng bạn có thể có phiên bản ứng dụng khác nhau (sử dụng cùng một kho dữ liệu) một số được triển khai với thời gian chạy Python, một số với thời gian chạy Java và bạn có thể truy cập các phiên bản khác với "mặc định / hoạt động "Một với các URL rõ ràng. Vì vậy, bạn có thể sử dụng cả mã Python Java (trong các phiên bản khác nhau của ứng dụng) và sửa đổi cùng một kho lưu trữ dữ liệu, cho phép bạn linh hoạt hơn nữa (mặc dù chỉ có một URL sẽ có URL "đẹp" như foobar.appspot.com - mà có lẽ chỉ quan trọng đối với truy cập của người dùng tương tác trên trình duyệt, tôi tưởng tượng ;-).


9
GWT chủ yếu là một công nghệ phía máy khách - bạn có thể sử dụng nó bất kể mặt sau của bạn là python hay java. Bạn mất một chút đường cú pháp khi phải thực hiện rpc trên JSON thay vì RPC được tích hợp sẵn của GWT, nhưng nếu bạn ghét JS và làm python thì vẫn đáng để xem :)
Peter Recore

9
Có Pyjama ( pyjs.org ) là một thay thế Pythonic cho GWT - nó sẽ lấy mã Python và biên dịch nó thành Javascript, giống như GWT làm cho mã Java.
Dave Kirby

7
Chỉ để đưa ra một viễn cảnh "5 năm sau". Là một Nhà phát triển Java, tôi cảm thấy như GAE đang chạy một ngăn xếp lỗi thời. Bạn sẽ không tìm thấy hỗ trợ Java 8 , ( họ đang chạy Java 6 cũng như bộ chứa Jetty 6 kế thừa với Servlet API 2.5 ), tất cả trong tất cả Hỗ trợ Java trong GAE vẫn bị kẹt trong năm 2010. Trong khi tôi yêu sự đơn giản của GAE và Dịch vụ mạnh mẽ của Google, Tôi không thể đề xuất GAE cho Java cho đến khi họ nâng cấp ngăn xếp của nó.
Anthony Accioly

72

Xem ứng dụng này để biết các thay đổi về hiệu suất của Python và Java:

http://gaejava.appspot.com/ (chỉnh sửa: xin lỗi, liên kết đã bị hỏng ngay bây giờ. Nhưng sau đây vẫn áp dụng khi tôi thấy nó chạy lần cuối)

Hiện tại, Python và sử dụng API cấp thấp trong Java nhanh hơn JDO trên Java, cho thử nghiệm đơn giản này . Ít nhất nếu công cụ cơ bản thay đổi, ứng dụng đó sẽ phản ánh những thay đổi về hiệu suất.


5
Với tất cả sự tôn trọng, tôi thấy bài kiểm tra này đủ đơn giản để trở nên vô nghĩa. Đối với những gì đáng giá ... Nếu bạn sử dụng Java / GAE, tôi khuyên bạn nên sử dụng API cấp thấp và tránh JDO hoặc bất kỳ khung công tác nào khác. Quan trọng hơn, JDO mang đến cho bạn 'cảm giác' bạn đang làm việc với cơ sở dữ liệu quan hệ, có thể là 'gây hiểu lầm'.
Mo'in Creemers

1
Tôi đồng ý về việc tránh JDO, một phần vì lý do bạn đề cập nhưng cũng vì nó chậm hơn cấp độ thấp. (Mà bài kiểm tra thường cho thấy.) Nó chỉ gợi ý rằng có sự khác biệt về hiệu năng, vì vậy hoặc không sử dụng JDO hoặc kiểm tra cho nhiệm vụ cụ thể của bạn. Tôi đã chuyển tất cả mã của riêng mình từ JDO và API cấp thấp sang Objectify. Và trong mọi trường hợp, điều đó cũng cho thấy Python chắc chắn không phải là anh em họ nghèo về hiệu năng trên GAE.
Richard Watson

1
Ứng dụng của bạn, nó đang ném Lỗi máy chủ nội bộ.
tomdemuyt

1
Cảm ơn Tom. Không phải ứng dụng của tôi, thật đáng buồn. Đã gửi thư cho ai đó có thể được liên kết.
Richard Watson

1
tôi muốn xem làm thế nào đối tượng hóa so sánh trong thử nghiệm này
Moshe Shaham

18

Dựa trên kinh nghiệm chạy các máy ảo này trên các nền tảng khác, tôi muốn nói rằng có lẽ bạn sẽ nhận được nhiều hiệu năng thô hơn từ Java so với Python. Tuy nhiên, đừng đánh giá thấp các điểm bán hàng của Python: Ngôn ngữ Python hiệu quả hơn về các dòng mã - thỏa thuận chung là Python yêu cầu một phần ba mã của một chương trình Java tương đương, trong khi vẫn có thể đọc được hoặc dễ đọc hơn. Lợi ích này được nhân lên bởi khả năng chạy mã ngay lập tức mà không cần một bước biên dịch rõ ràng.

Liên quan đến các thư viện có sẵn, bạn sẽ thấy rằng phần lớn thư viện thời gian chạy Python mở rộng hoạt động vượt trội (cũng như Java). Khung Web Django phổ biến ( http://www.djangoproject.com/ ) cũng được hỗ trợ trên AppEngine.

Liên quan đến 'sức mạnh', thật khó để biết ý của bạn là gì, nhưng Python được sử dụng trong nhiều lĩnh vực khác nhau, đặc biệt là Web: YouTube được viết bằng Python, cũng như Sourceforge (kể từ tuần trước).


Cảm ơn bạn Judy2K! Bằng sức mạnh, ý tôi là có thể làm nhiều thứ hơn và dễ dàng mở rộng.
Việt

15

Tháng 6 năm 2013: Video này là một câu trả lời rất hay của một kỹ sư google:

http://www.youtube.com/watch?v=tLriM2krw2E

TLDR; Là:

  • Chọn ngôn ngữ mà bạn và nhóm của bạn làm việc hiệu quả nhất
  • Nếu bạn muốn xây dựng một cái gì đó để sản xuất: Java hoặc Python (không phải Go)
  • Nếu bạn có một nhóm lớn và cơ sở mã phức tạp: Java (vì phân tích và tái cấu trúc mã tĩnh)
  • Các nhóm nhỏ lặp lại nhanh chóng: Python (mặc dù Java cũng ổn)

9

Một câu hỏi quan trọng cần xem xét khi quyết định giữa Python và Java là cách bạn sẽ sử dụng kho dữ liệu trong mỗi ngôn ngữ (và hầu hết các góc độ khác cho câu hỏi ban đầu đã được đề cập khá rõ trong chủ đề này).

Đối với Java , phương thức tiêu chuẩn là sử dụng JDO hoặc JPA. Đây là những điều tuyệt vời cho tính di động nhưng không phù hợp lắm với kho dữ liệu.

API cấp thấp có sẵn nhưng mức này quá thấp để sử dụng hàng ngày - nó phù hợp hơn để xây dựng thư viện của bên thứ 3.

Đối với Python, có một API được thiết kế đặc biệt để cung cấp cho các ứng dụng quyền truy cập dễ dàng nhưng mạnh mẽ vào kho dữ liệu. Thật tuyệt vời ngoại trừ việc nó không có khả năng di động nên nó khóa bạn vào GAE.

May mắn thay, có những giải pháp đang được phát triển cho những điểm yếu được liệt kê cho cả hai ngôn ngữ.

Đối với Java , API cấp thấp đang được sử dụng để phát triển các thư viện bền vững phù hợp hơn với kho dữ liệu sau đó là JDO / JPA (IMO). Ví dụ bao gồm dự án SienaObjectify .

Gần đây tôi đã bắt đầu sử dụng Objectify và thấy nó rất dễ sử dụng và phù hợp với kho dữ liệu, và sự phổ biến ngày càng tăng của nó đã được hỗ trợ tốt. Ví dụ: Objectify được hỗ trợ chính thức bởi dịch vụ Cloud Endpoint mới của Google. Mặt khác, Objectify chỉ hoạt động với kho dữ liệu, trong khi Siena được "lấy cảm hứng" từ kho dữ liệu nhưng được thiết kế để hoạt động với nhiều loại cơ sở dữ liệu SQL và kho dữ liệu NoQuery.

Đối với Python , có những nỗ lực được thực hiện để cho phép sử dụng API kho dữ liệu GAE của Python ngoài GAE. Một ví dụ là phần phụ trợ SQLite mà Google phát hành để sử dụng với SDK, nhưng tôi nghi ngờ họ dự định điều này sẽ phát triển thành thứ gì đó sẵn sàng sản xuất. Các TyphoonAE dự án có thể có tiềm năng hơn, nhưng tôi không nghĩ rằng đó là sản xuất đã sẵn sàng chưa, hoặc (đúng cho tôi nếu tôi sai).

Nếu bất cứ ai có kinh nghiệm với bất kỳ lựa chọn thay thế hoặc biết về người khác, xin vui lòng thêm chúng trong một nhận xét. Cá nhân, tôi thực sự thích kho dữ liệu GAE - tôi thấy nó là một cải tiến đáng kể so với AWS SimpleDB - vì vậy tôi mong muốn thành công của những nỗ lực này để giảm bớt một số vấn đề trong việc sử dụng nó.


7

Tôi thực sự khuyên dùng Java cho GAE và đây là lý do:

  1. Hiệu suất: Java có khả năng nhanh hơn Python.
  2. Phát triển Python chịu áp lực thiếu thư viện của bên thứ ba. Ví dụ, không có XSLT cho Python / GAE. Hầu như tất cả các thư viện Python đều là các ràng buộc C (và những thư viện này không được GAE hỗ trợ).
  3. API Memcache: SDK Java có nhiều khả năng thú vị hơn SDK Python.
  4. API kho dữ liệu: JDO rất chậm, nhưng API kho dữ liệu Java nguyên gốc rất nhanh và dễ dàng.

Tôi đang sử dụng Java / GAE trong phát triển ngay bây giờ.


1
@Paul - bạn có thể đề xuất (hoặc cung cấp liên kết đến) cách tốt nhất để xử lý sự kiên trì bằng cách sử dụng Java trên GAE nếu JDO không phải là hướng đi?
Đánh dấu

1
@Mark, tôi xin lỗi vì sự chậm trễ. Tôi nghĩ code.google.com/p/objectify-appengine là lựa chọn tốt nhất hiện nay.
Paul

7
-1 cho các sai lầm hoàn toàn ở các điểm # 2 và # 3 và cho # 4 không có ý nghĩa gì.
Triptych

@Triptych, hãy cho tôi biết tên bộ xử lý XSLT cho python / GAE là gì? Và tương đương với hoạt động CAS (put IfUntouched) cho memcache / python / GAE là gì?
Paul

1
@Paul nếu bạn muốn tôi coi những điều đó là một phần của câu trả lời của bạn, bạn nên đưa chúng vào câu trả lời của bạn. Thay vào đó, bạn bao gồm một chuỗi các sự thật nửa vời. Không ai chọn một ngôn ngữ dựa trên các trường hợp góc mà bạn sắp nghĩ ra.
Triptych

6

Như bạn đã xác định, sử dụng JVM không hạn chế bạn sử dụng ngôn ngữ Java. Một danh sách các ngôn ngữ và liên kết JVM có thể được tìm thấy ở đây . Tuy nhiên , Google App Engine sẽ hạn chế nhóm các lớp bạn có thể sử dụng từ bộ Java SE thông thường và bạn sẽ muốn điều tra xem có thể sử dụng bất kỳ triển khai nào trong số các triển khai này trên công cụ ứng dụng không.

EDIT: Tôi thấy bạn đã tìm thấy một danh sách như vậy

Tôi không thể nhận xét về hiệu suất của Python. Tuy nhiên, JVM là một nền tảng hiệu năng rất khôn ngoan, được cung cấp khả năng biên dịch động và tối ưu hóa mã trong thời gian chạy.

Hiệu suất cuối cùng sẽ phụ thuộc vào ứng dụng của bạn làm gì và cách bạn mã hóa nó. Trong trường hợp không có thêm thông tin, tôi nghĩ không thể đưa ra thêm bất kỳ gợi ý nào trong lĩnh vực này.


Cảm ơn đã trả lời nhanh chóng, Brian. Tôi dự định tập trung vào ứng dụng tìm nạp url và phân tích cú pháp XML & xử lý XSLT. Sẽ có ít hơn việc phục vụ nội dung HTTP cho trình duyệt.
Việt

6

Tôi đã rất ngạc nhiên khi thấy SDK Python / Django sạch sẽ, đơn giản và không có vấn đề. Tuy nhiên, tôi bắt đầu gặp phải các tình huống cần bắt đầu thực hiện nhiều JavaScript hơn và nghĩ rằng tôi có thể muốn tận dụng lợi thế của GWT và các tiện ích Java khác. Tôi mới chỉ đi được một nửa trong hướng dẫn Java GAE và đã gặp một vấn đề khác: các vấn đề cấu hình Eclipse, viêm phiên bản JRE, sự phức tạp gây khó chịu của Java và một hướng dẫn khó hiểu và có thể bị hỏng. Kiểm tra trang web này và những người khác được liên kết từ đây đã giúp tôi. Tôi sẽ quay trở lại với Python và tôi sẽ xem xét Đồ ngủ để giúp giải quyết các thách thức JavaScript của mình.


5

Tôi đến hơi muộn cuộc trò chuyện, nhưng đây là hai xu của tôi. Tôi thực sự đã có một thời gian khó khăn để lựa chọn giữa Python và Java, vì tôi thành thạo cả hai ngôn ngữ. Như chúng ta đều biết, có những lợi thế và bất lợi cho cả hai, và bạn phải tính đến các yêu cầu của bạn và các khung làm việc tốt nhất cho dự án của bạn.

Như tôi thường làm trong các tình huống khó xử này, tôi tìm kiếm các con số để hỗ trợ cho quyết định của mình. Tôi quyết định đi với Python vì nhiều lý do, nhưng trong trường hợp của tôi, có một cốt truyện là điểm bùng phát. Nếu bạn tìm kiếm "Google App Engine" trong GitHub kể từ tháng 9 năm 2014 , bạn sẽ tìm thấy hình sau:

Chỉ số ngôn ngữ GAE

Có thể có nhiều sai lệch trong các số này, nhưng nhìn chung, có kho lưu trữ Python GAE nhiều gấp ba lần so với kho Java GAE. Không chỉ vậy, nhưng nếu bạn liệt kê các dự án theo "số sao", bạn sẽ thấy rằng phần lớn các dự án Python xuất hiện ở trên cùng (bạn phải tính đến việc Python đã tồn tại lâu hơn). Đối với tôi, điều này tạo ra một trường hợp mạnh mẽ cho Python vì tôi tính đến việc áp dụng & hỗ trợ cộng đồng, tài liệu và tính sẵn có của các dự án nguồn mở.


3

Đó là một câu hỏi hay, và tôi nghĩ rằng nhiều câu trả lời đã đưa ra quan điểm tốt về ưu và nhược điểm ở cả hai phía của hàng rào. Tôi đã thử cả AppEngine dựa trên Python và JVM (trong trường hợp của tôi, tôi đang sử dụng Gaelyk , một khung ứng dụng Groovy được xây dựng cho AppEngine). Khi nói đến hiệu suất trên nền tảng, một điều tôi chưa từng xem xét cho đến khi nó nhìn thẳng vào mặt tôi là hàm ý "Yêu cầu tải" xảy ra ở phía hàng rào Java. Khi sử dụng Groovy các yêu cầu tải này là một kẻ giết người.

Tôi đặt một bài viết cùng nhau về chủ đề ( http://distitable.net/coding/google-appengine-java-vs-python-performance-comparison/ ) và tôi hy vọng sẽ tìm ra cách giải quyết vấn đề, nhưng nếu không tôi nghĩ rằng tôi sẽ quay trở lại kết hợp Python + Django cho đến khi các yêu cầu java khởi động lạnh ít ảnh hưởng hơn.


3

Dựa vào mức độ tôi nghe thấy mọi người Java phàn nàn về AppEngine so với người dùng Python, tôi sẽ nói Python ít căng thẳng hơn khi sử dụng.


7
Tôi nghe nói rằng chủ sở hữu Ford đang phàn nàn về chiếc xe của họ nhiều hơn chủ sở hữu Koenigsegg. Tại sao có thể như vậy?
Axarydax

2

Ngoài ra còn có dự án Unladen Swallow , rõ ràng là do Google tài trợ nếu không thuộc sở hữu của Google. Họ đang cố gắng thực hiện một phụ trợ dựa trên LLVM cho mã byte Python 2.6.1, vì vậy họ có thể sử dụng một JIT và các tối ưu hóa mã gốc / GC / đa lõi đẹp khác nhau. (Trích dẫn hay: "Chúng tôi khao khát không có tác phẩm gốc, thay vào đó sử dụng càng nhiều trong 30 năm nghiên cứu gần đây nhất có thể.") Họ đang tìm kiếm một CPython tăng tốc 5x.

Tất nhiên, điều này không trả lời câu hỏi ngay lập tức của bạn, nhưng hướng đến việc "thu hẹp khoảng cách" (nếu có) trong tương lai (hy vọng).


1
Unladen Swallow hiện là một dự án đã chết và cam kết cuối cùng đã hơn một năm tuổi .
tshepang

2

Vẻ đẹp của python ngày nay là cách nó giao tiếp với các ngôn ngữ khác. Chẳng hạn, bạn có thể có cả python và java trên cùng một bảng với Jython. Tất nhiên jython mặc dù nó hỗ trợ đầy đủ các thư viện java nhưng nó không hỗ trợ đầy đủ các thư viện python. Nhưng đó là một giải pháp lý tưởng nếu bạn muốn gây rối với Thư viện Java. Nó thậm chí còn cho phép bạn trộn nó với mã Java mà không cần thêm mã hóa.

Nhưng ngay cả con trăn cũng đã thực hiện một số bước. Xem ctypes, ví dụ, gần tốc độ C, trực tiếp truy cập vào thư viện C tất cả những điều này mà không để lại sự thoải mái của mã hóa python. Cython tiến thêm một bước, cho phép trộn mã c với mã python một cách dễ dàng hoặc ngay cả khi bạn không muốn gây rối với c hoặc c ++, bạn vẫn có thể mã trong python nhưng sử dụng các biến kiểu tĩnh giúp chương trình python của bạn nhanh như ứng dụng C . Cython được cả sử dụng và hỗ trợ bởi google.

Hôm qua tôi thậm chí đã tìm thấy các công cụ cho python để nội tuyến C hoặc thậm chí hội (xem CorePy), bạn không thể có được sức mạnh nào hơn thế.

Python chắc chắn là một ngôn ngữ rất trưởng thành, không chỉ đứng trên chính nó, mà còn có thể hợp tác với bất kỳ ngôn ngữ nào khác một cách dễ dàng. Tôi nghĩ đó là những gì làm cho trăn trở thành một giải pháp lý tưởng ngay cả trong một kịch bản rất tiên tiến và đòi hỏi khắt khe.

Với python, bạn có thể truy cập C / C ++, Java, .NET và nhiều thư viện khác với mã hóa bổ sung gần như bằng 0 mang lại cho bạn một ngôn ngữ để giảm thiểu, đơn giản hóa và làm đẹp mã hóa. Đó là một ngôn ngữ rất hấp dẫn.


Câu hỏi là về java vs python trên GAE, có rất nhiều hạn chế. Do đó, các đối số của bạn không thể áp dụng.
Daniyar

Tôi đồng ý với @Daniyar, rằng câu trả lời này hơi sai (hoặc có lẽ là hoàn toàn), nhưng tôi thích câu trả lời và đây là điều mà tôi đang tìm kiếm. Cảm ơn Kilon đã chia sẻ kiến ​​thức này. Có thể đây là nơi sai, nhưng bạn chắc chắn đã chia sẻ kiến ​​thức. +1 và danh tiếng cho điều đó.
zeFree

1

Đã qua với Python mặc dù GWT có vẻ phù hợp hoàn hảo cho loại ứng dụng tôi đang phát triển. JPA khá rối tung trên GAE (ví dụ: không có @Embeddable và các giới hạn không được ghi chép rõ ràng khác). Đã trải qua một tuần, tôi có thể nói rằng Java không cảm thấy đúng về GAE vào lúc này.


1

Một suy nghĩ cần tính đến là các khung bạn định sử dụng yo. Không phải tất cả các khung công tác phía Java đều phù hợp với các ứng dụng chạy trên Máy ứng dụng, điều này hơi khác so với các máy chủ ứng dụng Java truyền thống.

Một điều cần xem xét là thời gian khởi động ứng dụng. Với các ứng dụng web Java truyền thống, bạn không thực sự cần phải suy nghĩ về điều này. Ứng dụng bắt đầu và sau đó nó chỉ chạy. Không thực sự quan trọng nếu khởi động mất 5 giây hoặc vài phút. Với App Engine, bạn có thể gặp phải tình huống ứng dụng chỉ được khởi động khi có yêu cầu. Điều này có nghĩa là người dùng đang đợi trong khi ứng dụng của bạn khởi động. Các tính năng GAE mới như phiên bản dành riêng giúp đỡ ở đây, nhưng kiểm tra trước.

Một điều nữa là những hạn chế khác nhau của GAE trên Java. Không phải tất cả các khung đều hài lòng với các giới hạn về các lớp bạn có thể sử dụng hoặc thực tế là các luồng không được phép hoặc bạn không thể truy cập hệ thống tệp cục bộ. Những vấn đề này có thể dễ dàng tìm ra bằng cách chỉ nói về khả năng tương thích GAE.

Tôi cũng đã thấy một số người phàn nàn về các vấn đề với quy mô phiên trên các khung UI hiện đại (cụ thể là Wicket). Nhìn chung, các khung này có xu hướng thực hiện một số sự đánh đổi nhất định để làm cho sự phát triển trở nên thú vị, nhanh chóng và dễ dàng. Đôi khi điều này có thể dẫn đến xung đột với các hạn chế của Máy ứng dụng.

Ban đầu tôi bắt đầu phát triển làm việc trên GAE với Java, nhưng sau đó chuyển sang Python vì những lý do này. Cảm nhận cá nhân của tôi là Python là một lựa chọn tốt hơn để phát triển Máy ứng dụng. Tôi nghĩ rằng Java là "ở nhà" hơn, ví dụ như trên Bean Beanalk của Amazon.

NHƯNG với App Engine mọi thứ đang thay đổi rất nhanh. GAE đang tự thay đổi và khi nó trở nên phổ biến hơn, các khung cũng đang thay đổi để khắc phục những hạn chế của nó.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.