เลือก Java vs Python บน Google App Engine


161

ปัจจุบัน Google App Engine รองรับทั้ง Python และ Java การสนับสนุน Java นั้นไม่เป็นผู้ใหญ่ อย่างไรก็ตามดูเหมือนว่า Java จะมีรายการของไลบรารีที่ยาวขึ้นและสนับสนุนเป็นพิเศษสำหรับ Java bytecode โดยไม่คำนึงถึงภาษาที่ใช้ในการเขียนโค้ดนั้น ภาษาใดจะให้ประสิทธิภาพที่ดีขึ้นและมีพลังมากขึ้น? กรุณาแนะนำ ขอบคุณ!

แก้ไข: http://groups.google.com/group/google-appengine-java/web/will-it-play-in-app-engine?pli=1

แก้ไข: โดย "อำนาจ" ฉันหมายถึงการขยายตัวที่ดีขึ้นและการรวมห้องสมุดที่มีอยู่นอกกรอบ Python อนุญาตเฉพาะ Python library เท่านั้น


ตอนนี้Google App Engine รองรับ Go (ทดลอง) คุณมีเรื่องอะไรเกี่ยวกับเรื่องนี้บ้าง?
Benjamin Crouzier

@pinouchon ฉันเริ่มใช้ Go และปรับใช้มันในการผลิตบน GAE GO ทำงานได้ดีบน GAE รวบรวมได้ในไม่กี่วินาที เลือกกรอบเว็บของคุณอย่างชาญฉลาด :-)
Michele Giuseppe Fadda

คำตอบ:


123

ฉันลำเอียง (เป็นผู้เชี่ยวชาญ Python แต่ค่อนข้างเป็นสนิมใน Java) แต่ฉันคิดว่า Python runtime ของ GAE นั้นก้าวหน้ากว่าและพัฒนาได้ดีกว่า Java runtime - ในอดีตนั้นใช้เวลาหนึ่งปีในการพัฒนาและพัฒนา .

แน่นอนว่าสิ่งต่าง ๆ ที่จะดำเนินต่อไปนั้นเป็นเรื่องยากที่จะคาดการณ์ - ความต้องการมีแนวโน้มแข็งแกร่งขึ้นในฝั่ง Java (โดยเฉพาะอย่างยิ่งเนื่องจากไม่ใช่แค่เกี่ยวกับ Java แต่ภาษาอื่น ๆ ตั้งอยู่บน JVM ด้วยเช่นกัน) หรือรหัส Ruby บน App Engine); ทีมงาน Python App Engine มีข้อได้เปรียบในการร่วมงานกับ Guido van Rossum ผู้ประดิษฐ์ Python และวิศวกรที่แข็งแกร่งอย่างน่าอัศจรรย์

ในแง่ของความยืดหยุ่นเอ็นจิ้น Java ดังที่กล่าวมาแล้วมีความเป็นไปได้ในการรัน JVM bytecode ที่ทำจากภาษาต่าง ๆ ไม่ใช่แค่ Java - หากคุณอยู่ในร้านค้าหลายภาษา ในทางกลับกันหากคุณเกลียดชัง Javascript แต่ต้องรันโค้ดบางอย่างในเบราว์เซอร์ของผู้ใช้ GWT ของ Java (การสร้างจาวาสคริปต์สำหรับคุณจากการเข้ารหัสระดับ Java ของคุณ) นั้นยอดเยี่ยมกว่าและสูงกว่าทางเลือกด้าน Python (ในทางปฏิบัติหากคุณเลือก Python คุณจะเขียน JS ด้วยตัวเองเพื่อจุดประสงค์นี้ในขณะที่ถ้าคุณเลือก Java GWT เป็นทางเลือกที่ใช้งานได้หากคุณเกลียดการเขียน JS)

ในแง่ของห้องสมุดมันค่อนข้างจะล้าง - JVM ถูก จำกัด เพียงพอ (ไม่มีเธรด, ไม่มีตัวตักคลาสที่กำหนดเอง, ไม่มี JNI, ไม่มีฐานข้อมูลเชิงสัมพันธ์) เพื่อขัดขวางการนำไลบรารี Java ที่มีอยู่กลับมาใช้ใหม่ได้ง่ายกว่า Python ที่มีอยู่ ไลบรารีถูกขัดขวางโดยข้อ จำกัด ที่คล้ายกันใน Python runtime

ในแง่ของประสิทธิภาพฉันคิดว่ามันเป็นเรื่องล้างแม้ว่าคุณควรจะเกณฑ์มาตรฐานในงานของคุณเอง - ไม่ต้องพึ่งพาประสิทธิภาพของการใช้งาน JVM ที่ใช้ JVM ซึ่งได้รับการปรับให้เหมาะสมที่สุดซึ่งจะช่วยลดเวลาในการเริ่มต้นและรอยเท้าหน่วยความจำขนาดใหญ่ สภาพแวดล้อมนั้นแตกต่างกันมาก (ค่าใช้จ่ายในการเริ่มต้นจะจ่ายบ่อยครั้งเมื่ออินสแตนซ์ของแอปของคุณเริ่มต้นหยุดย้ายไปยังโฮสต์ที่แตกต่างกัน ฯลฯ ทั้งหมดล้วนให้คุณ - เหตุการณ์ดังกล่าวมักจะถูกกว่าด้วยสภาพแวดล้อมรันไทม์ Python มากกว่า JVMs)

สถานการณ์ XPath / XSLT (เป็นถ้อยคำที่ไพเราะ ... ) ไม่สมบูรณ์แบบทั้งสองข้างถอนหายใจแม้ว่าฉันคิดว่ามันอาจจะแย่น้อยกว่าใน JVM (ที่เห็นได้ชัดว่าเซตย่อยที่สำคัญของแซกซอนสามารถวิ่งได้ ด้วยความระมัดระวัง) ฉันคิดว่ามันเป็นปัญหาการเปิดในประเด็น Appengineมี XPath และ XSLT ในชื่อของพวกเขา - ตอนนี้มีปัญหาเฉพาะการขอห้องสมุดเฉพาะและนั่นก็คือสายตาสั้น: ฉันไม่สนใจจริง ๆ ว่า XPath / XSLT ดีอย่างไร สำหรับ Python และ / หรือสำหรับ Java ตราบใดที่ฉันใช้งาน (ไลบรารีเฉพาะอาจทำให้การโยกย้ายของรหัสที่มีอยู่ง่ายขึ้น แต่สิ่งสำคัญน้อยกว่าความสามารถในการทำงานเช่น "ใช้การแปลง XSLT อย่างรวดเร็ว" ในบางวิธี! -) ฉันรู้ว่าฉันให้ความสำคัญกับปัญหาดังกล่าวหากใช้ถ้อยคำเป็นอย่างดี

สุดท้าย แต่ไม่ท้ายสุดโปรดจำไว้ว่าคุณสามารถมีแอปเวอร์ชันต่าง ๆ (ใช้ที่เก็บข้อมูลเดียวกัน) บางแอพพลิเคชั่นที่ใช้กับ Python runtime บางตัวใช้ Java Runtime และคุณสามารถเข้าถึงเวอร์ชันที่แตกต่างจาก "default / active "หนึ่งรายการที่มี URL ที่ชัดเจน ดังนั้นคุณอาจมีทั้งรหัสPython และ Java (ในเวอร์ชันที่แตกต่างกันของแอป) ใช้และแก้ไขแหล่งข้อมูลเดียวกันทำให้คุณมีความยืดหยุ่นมากขึ้น (แม้ว่าจะมีเพียง URL เดียวที่จะมี URL ที่ "ดี" เช่น foobar.appspot.com - ซึ่งอาจเป็นสิ่งสำคัญสำหรับการเข้าถึงโดยผู้ใช้แบบโต้ตอบบนเบราว์เซอร์ฉันจินตนาการ ;-)


9
GWT เป็นเทคโนโลยีด้านไคลเอนต์เป็นหลัก - คุณสามารถใช้งานได้ไม่ว่าแบ็คเอนด์ของคุณจะเป็นไพ ธ อนหรือจาวาก็ตาม คุณจะสูญเสียบิตของน้ำตาลประโยคโดยไม่ต้องทำ RPC ผ่าน JSON มากกว่า GWT สร้างขึ้นใน RPC แต่ถ้าคุณเกลียด JS และทำหลามก็ยังคงคุ้มค่าดู :)
ปีเตอร์ Recore

9
มี Pyjamas ( pyjs.org ) เป็นทางเลือก Pythonic เพื่อ GWT - มันจะใช้รหัส Python และรวบรวมเพื่อ Javascript เช่นเดียวกับ GWT ทำเพื่อรหัส Java
Dave Kirby

7
เพียงเพื่อให้มุมมอง "5 ปีต่อมา" ในฐานะนักพัฒนา Java ฉันรู้สึกว่า GAE กำลังเรียกใช้กองซ้อนที่ล้าสมัย คุณจะไม่พบการรองรับ Java 8 ( พวกเขากำลังเรียกใช้ Java 6เช่นเดียวกับที่เก็บ Jetty 6 ดั้งเดิมด้วยServlet API 2.5 ) ทั้งหมดในการสนับสนุน Java ทั้งหมดใน GAE ยังคงติดอยู่ในปี 2010 ในขณะที่ฉันรักความเรียบง่าย GAE และ Google Powerful Services ฉันไม่สามารถแนะนำ GAE สำหรับ Java ได้จนกว่าจะอัปเกรดสแต็ก
Anthony Accioly

72

ดูแอปนี้เพื่อดูการเปลี่ยนแปลงใน Python และ Java:

http://gaejava.appspot.com/ (แก้ไข: ขอโทษ, ลิงค์เสียตอนนี้ แต่พาราต่อไปนี้ยังคงใช้เมื่อฉันเห็นมันทำงานล่าสุด)

ปัจจุบัน Python และการใช้ API ระดับต่ำใน Java นั้นเร็วกว่า JDO บน Java สำหรับการทดสอบอย่างง่ายนี้ อย่างน้อยถ้าการเปลี่ยนแปลงเอนจิ้นพื้นฐานแอพนั้นควรสะท้อนการเปลี่ยนแปลงประสิทธิภาพ


5
ด้วยความเคารพฉันพบว่าการทดสอบนี้ง่ายพอที่จะไร้ความหมาย สำหรับสิ่งที่คุ้มค่า ... ถ้าคุณใช้ Java / GAE ฉันแนะนำให้ใช้ API ระดับต่ำและหลีกเลี่ยง JDO หรือกรอบงานอื่น ๆ ที่สำคัญกว่านั้น JDO ให้ 'ความรู้สึก' ที่คุณกำลังทำงานกับฐานข้อมูลเชิงสัมพันธ์ซึ่งสามารถ 'ทำให้เข้าใจผิด'
Mo'in Creemers

1
ฉันเห็นด้วยเกี่ยวกับการหลีกเลี่ยง JDO ส่วนหนึ่งสำหรับเหตุผลที่คุณพูดถึง แต่ก็เพราะช้ากว่าระดับต่ำ (ซึ่งการทดสอบโดยทั่วไปแสดงให้เห็น) มันเป็นเพียงคำใบ้ว่ามีความแตกต่างของประสิทธิภาพดังนั้นอย่าใช้ JDO หรือทดสอบสำหรับงานเฉพาะของคุณ ฉันย้ายรหัสของตัวเองทั้งหมดจาก JDO และ API ระดับต่ำไปยัง Objectify และในทุกกรณีมันก็แสดงให้เห็นว่า Python ไม่ได้เป็นลูกพี่ลูกน้องของประสิทธิภาพที่ไม่ดีใน GAE
Richard Watson

1
แอปของคุณกำลังโยน Internal Server Error
tomdemuyt

1
ขอบคุณทอม ไม่ใช่แอปของฉันเศร้า ส่งจดหมายถึงบุคคลที่อาจเชื่อมโยงถึงกัน
Richard Watson

1
ฉันต้องการดูว่าการเปรียบเทียบแบบ objectify ในการทดสอบนี้อย่างไร
Moshe Shaham

18

จากประสบการณ์ในการใช้งาน VM เหล่านี้บนแพลตฟอร์มอื่น ๆ ฉันว่าคุณอาจได้รับประสิทธิภาพที่ดีกว่า Java มากกว่า Python อย่าดูถูกจุดขายของ Python แต่อย่างใด: ภาษา Python มีประสิทธิภาพมากขึ้นในแง่ของบรรทัดของรหัส - ข้อตกลงทั่วไปคือ Python ต้องการรหัสที่สามของโปรแกรม Java เทียบเท่าในขณะที่ยังเหลืออยู่หรืออ่านได้มากกว่า ผลประโยชน์นี้จะถูกคูณด้วยความสามารถในการเรียกใช้รหัสทันทีโดยไม่ต้องมีขั้นตอนการรวบรวมอย่างชัดเจน

เมื่อพิจารณาถึงไลบรารีที่มีอยู่คุณจะพบว่าไลบรารี Python runtime ที่ครอบคลุมส่วนใหญ่ทำงานนอกกรอบ (เช่นเดียวกับ Java) กรอบงานเว็บ Django ยอดนิยม ( http://www.djangoproject.com/ ) ได้รับการสนับสนุนบน AppEngine

สำหรับ 'พลังงาน' นั้นยากที่จะรู้ว่าคุณหมายถึงอะไร แต่ Python ถูกใช้ในหลาย ๆ โดเมนโดยเฉพาะเว็บ: YouTube เขียนด้วย Python เหมือนกับ Sourceforge (เหมือนเมื่อสัปดาห์ที่แล้ว)


ขอบคุณ Judy2K! โดยอำนาจฉันหมายถึงสามารถทำสิ่งต่าง ๆ และขยายได้ง่าย
Viet

15

มิถุนายน 2013:วิดีโอนี้เป็นคำตอบที่ดีมากโดยวิศวกร google:

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

TLDR; คือ:

  • เลือกภาษาที่คุณและทีมของคุณมีประสิทธิผลมากที่สุด
  • ถ้าคุณต้องการสร้างบางสิ่งบางอย่างสำหรับการผลิต: Java หรือ Python (ไม่ใช่ไป)
  • หากคุณมีทีมใหญ่และฐานรหัสที่ซับซ้อน: Java (เนื่องจากการวิเคราะห์รหัสคงที่และการเปลี่ยนโครงสร้างใหม่)
  • ทีมเล็ก ๆ ที่ทำซ้ำอย่างรวดเร็ว: Python (แม้ว่า Java ก็ไม่เป็นไร)

9

คำถามที่สำคัญที่จะต้องพิจารณาในการตัดสินใจระหว่างงูหลามและ Java เป็นวิธีการที่คุณจะใช้เก็บข้อมูลในแต่ละภาษา (และมากที่สุดในมุมอื่น ๆ ที่คำถามเดิมได้รับการปกคลุมค่อนข้างดีในหัวข้อนี้)

สำหรับ Javaวิธีมาตรฐานคือการใช้ JDO หรือ JPA สิ่งเหล่านี้เหมาะสำหรับการพกพา แต่ไม่เหมาะกับดาต้าสโตร์

API ระดับต่ำมีให้บริการ แต่ระดับนี้ต่ำเกินไปสำหรับการใช้งานแบบวันต่อวัน - เหมาะสำหรับการสร้างห้องสมุดบุคคลที่สาม

สำหรับ Pythonนั้น API ได้รับการออกแบบมาโดยเฉพาะเพื่อให้แอปพลิเคชันเข้าถึงได้ง่าย แต่ทรงพลังไปยังที่เก็บข้อมูล มันยอดเยี่ยมมากยกเว้นว่ามันไม่สามารถพกพาได้ดังนั้นจึงล็อคคุณเข้าสู่ GAE

โชคดีที่มีคำตอบที่ได้รับการพัฒนาสำหรับจุดอ่อนที่ระบุไว้สำหรับทั้งสองภาษา

สำหรับ Java API ระดับต่ำนั้นถูกใช้เพื่อพัฒนาไลบรารีการคงอยู่ที่เหมาะสมกับดาต้าสโตร์มากกว่า JDO / JPA (IMO) ตัวอย่างเช่นโครงการเซียน่าและแลเห็น

ฉันเพิ่งเริ่มใช้ Objectify และฉันพบว่ามันใช้งานง่ายและเหมาะสมกับดาต้าสโตร์และความนิยมที่เพิ่มขึ้นของมันได้รับการแปลเป็นการสนับสนุนที่ดี ตัวอย่างเช่น Objectify ได้รับการสนับสนุนอย่างเป็นทางการจากบริการ Cloud Endpoints ใหม่ของ Google ในทางกลับกัน Objectify จะทำงานกับที่เก็บข้อมูลเท่านั้นในขณะที่ Siena ได้รับ 'แรงบันดาลใจ' จากที่เก็บข้อมูล แต่ถูกออกแบบมาให้ทำงานกับฐานข้อมูล SQL และฐานข้อมูล NoSQL ที่หลากหลาย

สำหรับ Pythonมีการพยายามอนุญาตให้ใช้ Python GAE datastore API จาก GAE ตัวอย่างหนึ่งคือแบ็กเอนด์ SQLite ที่ Google เปิดตัวเพื่อใช้กับ SDK แต่ฉันสงสัยว่าพวกเขาตั้งใจที่จะเติบโตเป็นสิ่งที่พร้อมสำหรับการผลิต TyphoonAEโครงการอาจจะมีศักยภาพมากขึ้น แต่ผมไม่คิดว่ามันคือการผลิตพร้อม ๆ อย่างใดอย่างหนึ่ง (ที่ถูกต้องฉันหากฉันผิด)

หากใครมีประสบการณ์กับทางเลือกเหล่านี้หรือรู้จักผู้อื่นโปรดเพิ่มพวกเขาในความคิดเห็น โดยส่วนตัวแล้วฉันชอบที่เก็บข้อมูล GAE - ฉันคิดว่ามันเป็นการปรับปรุงที่ดีกว่า AWS SimpleDB - ดังนั้นฉันจึงต้องการความสำเร็จของความพยายามเหล่านี้ในการบรรเทาปัญหาบางอย่างในการใช้งาน


7

ฉันขอแนะนำ Java สำหรับ GAE อย่างยิ่งและนี่คือสาเหตุ:

  1. ประสิทธิภาพการทำงาน: Java อาจเร็วกว่า Python
  2. การพัฒนาของ Python อยู่ภายใต้แรงกดดันของการขาดห้องสมุดบุคคลที่สาม ตัวอย่างเช่นไม่มี XSLT สำหรับ Python / GAE เลย ห้องสมุด Python เกือบทั้งหมดเป็น C รวม (และไม่สนับสนุน GAE)
  3. Memcache API: Java SDK มีความสามารถที่น่าสนใจมากกว่า Python SDK
  4. API ของ Datastore: JDO ช้ามาก แต่ API ของ Java ดั้งเดิมนั้นเร็วและง่ายมาก

ฉันใช้ Java / GAE ในการพัฒนาอยู่ในขณะนี้


1
@Paul - คุณสามารถแนะนำ (หรือให้ลิงก์) วิธีที่ดีที่สุดในการจัดการกับการใช้ Java บน GAE ถ้า JDO ไม่ใช่วิธีที่จะไปใช่ไหม
ทำเครื่องหมาย

1
@ มาร์คฉันขอโทษสำหรับความล่าช้า ฉันคิดว่าcode.google.com/p/objectify-appengineเป็นตัวเลือกที่ดีที่สุดในตอนนี้
พอล

7
-1 สำหรับความผิดพลาดทันทีในคะแนน # 2 และ # 3 และ # 4 ไม่สมเหตุสมผล
Triptych

@Triptych แจ้งให้เราทราบชื่อโปรเซสเซอร์ XSLT สำหรับ python / GAE คืออะไร? และการดำเนินการเทียบเท่าของ CAS (putIfUntouched) สำหรับ memcache / python / GAE คืออะไร?
พอล

1
@ พอลหากคุณต้องการให้ฉันพิจารณาสิ่งเหล่านั้นเป็นส่วนหนึ่งของคำตอบของคุณคุณควรรวมไว้ในคำตอบของคุณ แต่คุณรวมถึงสายของความจริงครึ่ง ไม่มีใครเลือกภาษาจากกรณีมุมที่คุณกำลังจะเกิดขึ้นในขณะนี้
Triptych

6

ตามที่คุณระบุการใช้ JVM ไม่ได้ จำกัด ให้คุณใช้ภาษาจาวา รายการภาษา JVM และการเชื่อมโยงสามารถพบได้ที่นี่ อย่างไรก็ตาม Google App Engine ไม่ จำกัด ชุดของคลาสที่คุณสามารถใช้จากชุด Java SE ปกติและคุณจะต้องตรวจสอบว่าการใช้งานใด ๆ เหล่านี้สามารถนำไปใช้กับเอ็นจิ้นแอปได้หรือไม่

แก้ไข: ฉันเห็นคุณพบรายการดังกล่าว

ฉันไม่สามารถแสดงความคิดเห็นเกี่ยวกับประสิทธิภาพของ Python ได้ อย่างไรก็ตาม JVM เป็นแพลตฟอร์มประสิทธิภาพที่ทรงพลังมากเนื่องจากมีความสามารถในการรวบรวมและปรับรหัสให้เหมาะสมระหว่างการใช้งาน

ในที่สุดประสิทธิภาพจะขึ้นอยู่กับสิ่งที่แอปพลิเคชันของคุณทำและวิธีที่คุณใช้รหัส หากไม่มีข้อมูลเพิ่มเติมฉันคิดว่าเป็นไปไม่ได้ที่จะให้คำแนะนำใด ๆ เพิ่มเติมในพื้นที่นี้


ขอบคุณสำหรับการตอบกลับอย่างรวดเร็ว Brian ฉันตั้งใจจะเน้นแอปพลิเคชันในการดึง URL และการแยกวิเคราะห์ XML & การประมวลผล XSLT จะมีการแสดงเนื้อหา HTTP ในเบราว์เซอร์น้อยลง
Viet

6

ฉันประหลาดใจมากที่ทำความสะอาดตรงไปตรงมาและปราศจากปัญหา Python / Django SDK คืออะไร อย่างไรก็ตามฉันเริ่มทำงานในสถานการณ์ที่ฉันต้องเริ่มทำ JavaScript เพิ่มเติมและคิดว่าฉันอาจต้องการใช้ประโยชน์จาก GWT และยูทิลิตี้ Java อื่น ๆ ฉันได้รับเพียงครึ่งทางผ่านการสอน GAE Java และมีปัญหาอย่างหนึ่งหลังจากนั้นอีก: ปัญหาการกำหนดค่า Eclipse, JRE versionitis, ความซับซ้อนใจของ Java, และการสอนที่สับสนและอาจแตกหัก ตรวจสอบเว็บไซต์นี้และอื่น ๆ ที่เชื่อมโยงจากที่นี่เหตุให้ฉัน ฉันจะกลับไปที่ Python และฉันจะดูชุดนอนเพื่อช่วยในการท้าทาย JavaScript ของฉัน


5

ฉันมาสายเล็กน้อยเพื่อสนทนา แต่นี่คือสองเซ็นต์ของฉัน ฉันมีช่วงเวลาที่ยากลำบากในการเลือกระหว่าง Python และ Java เนื่องจากฉันเชี่ยวชาญทั้งสองภาษา ดังที่เราทุกคนรู้ว่ามีข้อดีและข้อเสียสำหรับทั้งสองและคุณต้องคำนึงถึงความต้องการของคุณและกรอบการทำงานที่ดีที่สุดสำหรับโครงการของคุณ

อย่างที่ฉันมักจะทำในภาวะที่กลืนไม่เข้าคายไม่ออกประเภทนี้ฉันมองหาตัวเลขเพื่อสนับสนุนการตัดสินใจของฉัน ฉันตัดสินใจไปกับ Python ด้วยเหตุผลหลายประการ แต่ในกรณีของฉันมีพล็อตเดียวที่เป็นจุดเปลี่ยน หากคุณค้นหา "Google App Engine" ใน GitHub เมื่อวันที่กันยายน 2014คุณจะพบตัวเลขดังต่อไปนี้:

สถิติภาษา GAE

อาจมีอคติจำนวนมากในตัวเลขเหล่านี้ แต่โดยรวมมีที่เก็บ GAE Python มากกว่าสามครั้งที่เก็บ GAE Java ที่เก็บ ไม่เพียงแค่นั้น แต่ถ้าคุณแสดงรายการโครงการด้วย "จำนวนดวงดาว" คุณจะเห็นว่าโครงการ Python ส่วนใหญ่ปรากฏที่ด้านบน (คุณต้องคำนึงถึงว่า Python อยู่นานกว่า) สำหรับฉันนี่เป็นกรณีที่ชัดเจนสำหรับ Python เพราะฉันยอมรับการยอมรับและการสนับสนุนจากชุมชนบัญชีเอกสารและความพร้อมใช้งานของโครงการโอเพ่นซอร์ส


3

มันเป็นคำถามที่ดีและฉันคิดว่าคำตอบมากมายให้มุมมองที่ดีเกี่ยวกับข้อดีข้อเสียทั้งสองด้านของรั้ว ฉันได้ลองใช้ AppEngine ที่ใช้ Python และ JVM (ในกรณีของฉันฉันใช้Gaelykซึ่งเป็นเฟรมเวิร์กแอปพลิเคชัน Groovy ที่สร้างขึ้นสำหรับ AppEngine) เมื่อพูดถึงการแสดงบนแพลตฟอร์มสิ่งหนึ่งที่ฉันไม่ได้พิจารณาจนกระทั่งมันจ้องมองฉันในหน้าคือความหมายของ "การร้องขอการโหลด" ที่เกิดขึ้นที่ด้าน Java ของรั้ว เมื่อใช้ Groovy คำขอโหลดเหล่านี้เป็นนักฆ่า

ฉันรวบรวมโพสต์ไว้ในหัวข้อ ( http://distractable.net/coding/google-appengine-java-vs-python-performance-comparison/ ) และฉันหวังว่าจะหาวิธีแก้ไขปัญหา แต่ ถ้าไม่ใช่ฉันคิดว่าฉันจะกลับไปใช้ชุด Python + Django จนกว่าคำขอเริ่มต้น java แบบ cold จะมีผลกระทบน้อยกว่า


3

จากจำนวนที่ฉันได้ยินว่าคน Java บ่นเกี่ยวกับ AppEngine เมื่อเทียบกับผู้ใช้ Python ฉันจะบอกว่า Python ใช้งานได้ง่าย


7
ฉันได้ยินมาว่าเจ้าของฟอร์ดบ่นเรื่องรถยนต์มากกว่าเจ้าของ Koenigsegg ทำไมถึงเป็นเช่นนั้น?
Axarydax

2

นอกจากนี้ยังมีโครงการUnladen Swallowซึ่งเห็นได้ชัดว่าได้รับเงินสนับสนุนจาก Google หากไม่ใช่ของ Google พวกเขากำลังพยายามใช้แบ็กเอนด์ที่อิงกับ LLVM สำหรับ Python 2.6.1 bytecode ดังนั้นพวกเขาจึงสามารถใช้ JIT และโค้ดเนม / GC / multi-core optimisations (คำพูดที่ดี: "เราปรารถนาที่จะไม่ทำงานต้นฉบับแทนที่จะใช้การวิจัยมากว่า 30 ปีที่ผ่านมามากที่สุดเท่าที่จะทำได้") พวกเขากำลังมองหา CPython ที่เร็วขึ้นถึง 5x

แน่นอนว่านี่ไม่ได้ตอบคำถามของคุณทันที แต่ชี้ไปที่ "การปิดช่องว่าง" (ถ้ามี) ในอนาคต (หวังว่า)


1
เพียบ Swallow ตอนนี้เป็นโครงการที่ตายแล้วและกระทำสุดท้ายคือกว่าปีเก่า
tshepang

2

ความงามของงูหลามในทุกวันนี้นั้นสื่อสารกับภาษาอื่นได้ดีเพียงใด ตัวอย่างเช่นคุณสามารถมีทั้งหลามและจาวาบนตารางเดียวกันกับ Jython แน่นอนว่า jython แม้ว่าจะรองรับไลบรารี java อย่างเต็มที่ แต่ก็ไม่รองรับไลบรารี python อย่างสมบูรณ์ แต่มันเป็นทางออกที่ดีถ้าคุณต้องการยุ่งกับ Java Libraries มันยังช่วยให้คุณสามารถผสมกับโค้ด Java โดยไม่มีการเข้ารหัสพิเศษ

แต่ถึงอย่างนั้นไพ ธ อนเองก็ทำขั้นตอนต่าง ๆ ไว้ล่วงหน้า ดู ctypes ตัวอย่างเช่นใกล้กับความเร็ว C ชี้นำ accees ไปยังไลบรารี C ทั้งหมดนี้โดยไม่ทิ้งความสะดวกสบายของการเข้ารหัสหลาม Cython ก้าวไปอีกขั้นหนึ่งโดยอนุญาตให้ผสมรหัส c กับรหัสไพ ธ อนได้อย่างง่ายดายหรือแม้ว่าคุณไม่ต้องการยุ่งกับ c หรือ c ++ คุณยังคงสามารถเขียนโค้ดในไพ ธ อนได้ แต่ใช้ตัวแปรชนิดสแตติก . Cython นั้นถูกใช้งานและสนับสนุนโดย Google ตลอดทาง

เมื่อวานนี้ฉันยังพบเครื่องมือสำหรับหลามถึงอินไลน์ C หรือแม้แต่แอสเซมบลี (ดู CorePy) คุณไม่สามารถเพิ่มพลังได้มากกว่านั้น

Python เป็นภาษาที่สมบูรณ์มากไม่เพียง แต่จะยืนอยู่บนตัวของมันเอง แต่สามารถร่วมมือกับภาษาอื่น ๆ ได้อย่างง่ายดาย ฉันคิดว่านั่นเป็นสิ่งที่ทำให้หลามเป็นโซลูชั่นที่สมบูรณ์แบบแม้ในสถานการณ์ที่ก้าวหน้าและมีความต้องการสูง

ด้วยไพ ธ อนคุณสามารถมี acess ถึง C / C ++, Java, .NET และไลบรารี่อื่น ๆ อีกมากมายที่มีการเข้ารหัสเพิ่มเติมเกือบเป็นศูนย์ทำให้คุณมีภาษาที่ย่อเล็กลงลดความซับซ้อนและทำให้โค้ดสวยงามยิ่งขึ้น มันเป็นภาษาที่ดึงดูดมาก


คำถามเกี่ยวกับ java vs python บน GAE ซึ่งมีข้อ จำกัด มากมาย ดังนั้นข้อโต้แย้งของคุณจะไม่เหมาะสม
Daniyar

ฉันเห็นด้วยกับ @Daniyar ว่าคำตอบนี้เป็นเพียงเล็กน้อย (หรืออาจจะทั้งหมด) ออกจากจังหวะ แต่ฉันชอบคำตอบและนี่คือสิ่งที่ฉันกำลังมองหา ขอบคุณ Kilon ที่แบ่งปันความรู้นี้ อาจเป็นสิ่งที่ผิด แต่คุณได้แบ่งปันความรู้อย่างแน่นอน +1 และรุ่งโรจน์สำหรับสิ่งนั้น
zeFree

1

ไปกับ Python แม้ว่า GWT จะเป็นคู่ที่สมบูรณ์แบบสำหรับแอพที่ฉันกำลังพัฒนาอยู่ JPA ค่อนข้างยุ่งเหยิงกับ GAE (เช่นไม่มี @Embeddable และข้อ จำกัด อื่น ๆ ที่ไม่มีเอกสารปิดบัง) หลังจากใช้เวลาหนึ่งสัปดาห์ฉันสามารถบอกได้ว่า Java ไม่รู้สึกถูกต้องใน GAE ในขณะนี้


1

ใครคิดว่าจะคำนึงถึงเป็นกรอบที่คุณตั้งใจจะใช้ เฟรมเวิร์กทั้งหมดบนฝั่ง Java ไม่เหมาะสำหรับแอปพลิเคชันที่รันบน App Engine ซึ่งค่อนข้างแตกต่างจากเซิร์ฟเวอร์แอป Java ทั่วไป

สิ่งหนึ่งที่ควรพิจารณาคือเวลาเริ่มต้นแอปพลิเคชัน ด้วยเว็บแอป Java แบบดั้งเดิมคุณไม่จำเป็นต้องคิดอะไรเกี่ยวกับเรื่องนี้ แอปพลิเคชันเริ่มต้นและจากนั้นจะเริ่มทำงาน ไม่สำคัญหากการเริ่มต้นใช้เวลา 5 วินาทีหรือสองสามนาที ด้วย App Engine คุณอาจพบสถานการณ์ที่แอปพลิเคชั่นเริ่มต้นเมื่อมีคำขอเข้ามาเท่านั้นซึ่งหมายความว่าผู้ใช้กำลังรอขณะที่แอปพลิเคชันของคุณบูท คุณลักษณะใหม่ของ GAE เช่นอินสแตนซ์ที่สงวนไว้ช่วยได้ที่นี่ แต่ตรวจสอบก่อน

อีกสิ่งหนึ่งคือข้อ จำกัด ที่แตกต่างกัน GAE psoes บน Java บางเฟรมเวิร์กมีความสุขกับข้อ จำกัด ของคลาสที่คุณสามารถใช้ได้หรือความจริงที่ว่าเธรดไม่ได้รับอนุญาตหรือคุณไม่สามารถเข้าถึงระบบไฟล์ภายในเครื่อง ปัญหาเหล่านี้อาจหาง่ายโดยเพียงแค่ Google เกี่ยวกับความเข้ากันได้ของ GAE

ฉันเคยเห็นบางคนบ่นเกี่ยวกับปัญหาเกี่ยวกับขนาดเซสชั่นในกรอบ UI ที่ทันสมัย ​​(ประตูคือ) โดยทั่วไปกรอบเหล่านี้มีแนวโน้มที่จะทำการแลกเปลี่ยนบางอย่างเพื่อให้การพัฒนามีความสนุกง่ายและรวดเร็ว บางครั้งสิ่งนี้อาจนำไปสู่ข้อขัดแย้งกับข้อ จำกัด ของ App Engine

ตอนแรกฉันเริ่มพัฒนาการทำงานกับ GAE ด้วย Java แต่เปลี่ยนไปใช้ Python เนื่องจากสาเหตุเหล่านี้ ความรู้สึกส่วนตัวของฉันคือ Python เป็นตัวเลือกที่ดีกว่าสำหรับการพัฒนา App Engine ฉันคิดว่า Java เป็นมากกว่า "ที่บ้าน" ยกตัวอย่างเช่นใน Elastic Beanstalk ของ Amazon

แต่สิ่งที่ App Engine กำลังเปลี่ยนแปลงอย่างรวดเร็ว GAE กำลังเปลี่ยนแปลงตัวเองและกลายเป็นที่นิยมมากขึ้นเฟรมเวิร์กกำลังเปลี่ยนไปเพื่อแก้ไขข้อ จำกัด ของมัน

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.