ผิดพลาด GWT ที่ใหญ่ที่สุด? [ปิด]


189

ฉันอยู่ที่จุดเริ่มต้น / กลางโครงการที่เราเลือกที่จะใช้งานโดยใช้ GWT มีใครพบข้อผิดพลาดที่สำคัญในการใช้ GWT (และ GWT-EXT) ที่ไม่สามารถเอาชนะได้หรือไม่? จากมุมมองของประสิทธิภาพล่ะ?

สองสิ่งที่เราเคยเห็น / ได้ยินแล้วรวมถึง:

  • Google ไม่สามารถจัดทำดัชนีเนื้อหา
  • CSS และการจัดแต่งทรงผมโดยทั่วไปดูเหมือนจะไม่สม่ำเสมอ

กำลังมองหาข้อเสนอแนะเพิ่มเติมเกี่ยวกับรายการเหล่านี้เช่นกัน ขอบคุณ!


4
เมื่อเร็ว ๆ นี้ฉันสังเกตเห็นเว็บไซต์ที่ใช้ GWT บางเว็บไซต์ขึ้นมาอย่างถูกต้องในผลการค้นหาของ Google แม้ว่า HTML พื้นฐานจะไม่รวมข้อมูลที่ฉันค้นหา (ตัวอย่าง ดูเหมือนว่าตัวสร้างดัชนีของ Google จะต้องทำการแสดงผลจาวาสคริปต์อย่างชาญฉลาดเพื่อที่จะคิดออกว่าอะไรที่จะปรากฏบนหน้าเว็บเมื่อทุกอย่างโหลดขึ้น
StriplingWarrior

คำตอบ:


231

ฉันจะเริ่มต้นด้วยการบอกว่าฉันเป็นแฟน GWT ขนาดใหญ่ แต่ใช่มีข้อผิดพลาดมากมาย แต่ส่วนใหญ่ถ้าไม่ใช่ทั้งหมดที่เราสามารถเอาชนะได้:

ปัญหา:เวลารวบรวมนานขณะที่โครงการของคุณเติบโตดังนั้นระยะเวลาที่ใช้ในการรวบรวม ฉันได้ยินรายงานการคอมไพล์ 20 นาทีแล้ว แต่โดยเฉลี่ยแล้วฉันประมาณ 1 นาที

วิธีแก้ไข:แบ่งรหัสของคุณออกเป็นโมดูลแยกต่างหากและบอกให้ ant สร้างเฉพาะเมื่อมีการเปลี่ยนแปลง ในขณะที่กำลังพัฒนาคุณสามารถเร่งความเร็วในการคอมไพล์ครั้งใหญ่โดยสร้างเพียงเบราว์เซอร์เดียว คุณสามารถทำได้โดยใส่สิ่งนี้ลงในไฟล์. gwt.xml ของคุณ:

<set-property name="user.agent" value="gecko1_8" />

โดยที่ gecko1_8 คือ Firefox 2+, ie6 คือ IE เป็นต้น


ปัญหา:โหมดโฮสต์นั้นช้ามาก (ใน OS X เป็นอย่างน้อย) และไม่เข้าใกล้กับการเปลี่ยนแปลง 'สด' ที่คุณได้รับเมื่อคุณแก้ไขสิ่งต่าง ๆ เช่นหน้า JSP หรือหน้า Rails และกดรีเฟรชในเบราว์เซอร์ของคุณ

วิธีแก้ปัญหา:คุณสามารถเพิ่มหน่วยความจำในโหมดโฮสต์ได้ (โดยทั่วไปฉันมี 512M) แต่ก็ยังช้าฉันพบเมื่อคุณเก่งพอที่จะมี GWT คุณหยุดใช้สิ่งนี้ คุณทำการเปลี่ยนแปลงจำนวนมากจากนั้นคอมไพล์สำหรับเบราว์เซอร์เดียว (โดยทั่วไปจะมีค่าคอมไพล์แล้ว 20s) จากนั้นกดรีเฟรชในเบราว์เซอร์ของคุณ

อัปเดต: ด้วย GWT 2.0+ นี่ไม่ใช่ปัญหาอีกต่อไปเพราะคุณใช้ 'โหมดการพัฒนา' ใหม่ มันเป็นพื้นหมายความว่าคุณสามารถเรียกใช้รหัสโดยตรงในเบราว์เซอร์ที่คุณเลือกดังนั้นจึงไม่สูญเสียความเร็วรวมทั้งคุณสามารถ firebug / ตรวจสอบมันเป็นต้น

http://code.google.com/p/google-web-toolkit/wiki/UsingOOPHM


ปัญหา:รหัส GWT คือ java และมีความคิดที่แตกต่างกันในการวางหน้า HTML ซึ่งทำให้การออกแบบ HTML และเปลี่ยนเป็น GWT ยากขึ้น

การแก้ไข:คุณคุ้นเคยกับสิ่งนี้อีกครั้ง แต่น่าเสียดายที่การแปลงการออกแบบ HTML ให้เป็นการออกแบบ GWT จะช้ากว่าการทำบางอย่างเช่นการแปลงการออกแบบ HTML เป็นหน้า JSP


ปัญหา: GWT ใช้เวลารับหัวของคุณเล็กน้อยและยังไม่เป็นกระแสหลัก หมายความว่านักพัฒนาส่วนใหญ่ที่เข้าร่วมทีมของคุณหรือดูแลรหัสของคุณจะต้องเรียนรู้ตั้งแต่เริ่มต้น

วิธีแก้ปัญหา:ยังคงต้องมีการดูว่า GWT จะปิดตัวลงหรือไม่ แต่ถ้าคุณเป็น บริษัท ที่ควบคุมว่าคุณจ้างใครคุณสามารถเลือกคนที่รู้ GWT หรือต้องการเรียนรู้ได้ตลอดเวลา


ปัญหา: GWT เป็นค้อนขนาดใหญ่เมื่อเทียบกับ jQuery หรือ javascript ธรรมดา ต้องใช้การตั้งค่ามากขึ้นเพื่อให้มันเกิดขึ้นมากกว่าแค่การรวมไฟล์ JS

วิธีแก้ไข:ใช้ไลบรารีเช่น jquery สำหรับงานขนาดเล็กและเรียบง่ายที่เหมาะสมกับงานเหล่านั้น ใช้ GWT เมื่อคุณต้องการสร้างสิ่งที่ซับซ้อนอย่างแท้จริงใน AJAX หรือที่ที่คุณต้องการส่งผ่านข้อมูลไปมาผ่านกลไก RPC


ปัญหา:บางครั้งเพื่อเติมข้อมูลหน้า GWT ของคุณคุณต้องทำการโทรเซิร์ฟเวอร์เมื่อหน้าโหลดครั้งแรก อาจเป็นเรื่องน่ารำคาญที่ผู้ใช้จะนั่งที่นั่นและดูสัญลักษณ์โหลดขณะที่คุณดึงข้อมูลที่คุณต้องการ

วิธีแก้ปัญหา:ในกรณีของหน้า JSP เซิร์ฟเวอร์ของคุณได้สร้างการแสดงผลหน้าเว็บแล้วก่อนที่จะกลายเป็น HTML ดังนั้นคุณจึงสามารถทำการโทร GWT ทั้งหมดของคุณก่อนแล้วจึงโหลดลงในหน้านั้นล่วงหน้าเพื่อโหลดทันที ดูรายละเอียดที่นี่:

เพิ่มความเร็วในการโหลดหน้าโดยทำการซีเรียลการโทร GWT ของคุณล่วงหน้า


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

สำหรับประสิทธิภาพฉันมักพบว่าเมื่อรวบรวมรหัส GWT อย่างรวดเร็วและการโทร AJAX นั้นเล็กกว่าการรีเฟรชทั้งหน้า แต่ก็ไม่ได้มีเอกลักษณ์เฉพาะ GWT แม้ว่าจะเป็นแพ็กเก็ต RPC ดั้งเดิมที่คุณได้รับถ้าคุณใช้ ปลายด้านหลังของ JAVA นั้นเล็กกะทัดรัด


1
เราพบปัญหาหลายอย่างที่คำสั่งสไตล์ / การวางตำแหน่งที่หลากหลายดูเหมือนจะไม่ "รับ" - ไม่ได้ใช้สไตล์ที่ควรจะเป็นหรือขนาดขององค์ประกอบที่ดูเหมือนจะเพิกเฉยต่อคำขอเพื่อให้เป็น 100% เช่นเดียวกับความท้าทาย CSS ทั่วไป - ข้อผิดพลาดของผู้ใช้ค่อนข้างมาก!
agartzke

@agartzke ใช่นั่นเป็น CSS สำหรับคุณและส่วนใหญ่ไม่มีส่วนเกี่ยวข้องกับ GWT นั่นเป็นเหตุผลที่เราจ้างนักออกแบบที่มีทักษะสูงเพื่อทำสิ่งนั้นให้กับเรา การทำให้ถูกต้องในเบราว์เซอร์ที่แตกต่างกัน 4 รายการไม่ใช่เรื่องง่าย
สนิมตัวเอง

1
มีคุณสมบัติใหม่ที่น่าสนใจมากมายที่จะเปิดตัวในปลายปีนี้ซึ่งช่วยปรับปรุงปัญหาเหล่านี้ได้อย่างมาก โหมดโฮสต์ที่อยู่นอกกระบวนการ (OOPHM), CssResource (การทำให้ล้าสมัยสไตล์ชีท / การย่อขนาด), UiBinder (aka 'Declarative UI')
Mark Renouf

ฉันกำลังรอคอยอีก 2.0 แต่ฉันไม่เห็นด้วยกับ GWT ที่เป็นค้อนเลื่อน หากเป็นเช่นนั้น jQuery และ JavaScript เป็นสิ่งที่ดีที่สุด ประเด็นของฉันคือเมื่อฉันไม่ได้ใช้งานอีกครั้งฉันก็เลยคัดลอกหลายสิ่งหลายอย่าง (พูด: กล่องข้อความใน 4 หน้าที่มีพฤติกรรมเหมือนกันในแต่ละที่) ไม่ได้หมายความว่าคุณควรโยนแอปพลิเคชันเก่าทั้งหมดออก ฉัน (เกือบ) จะไม่ใช้ GWT เพื่อเพิ่มความสามารถให้กับแอปพลิเคชัน html / js ที่มีอยู่ นอกจากนี้ยังมีทรัพยากร CSS อยู่ในศูนย์บ่มเพาะและผมชอบพวกเขา: stackoverflow.com/questions/1066250/gwt-html-file-with-css/...
Chris Ruffalo

2
คุณสามารถใช้ JQuery อีกครั้งได้มากเท่าที่คุณสามารถใช้ GWT ได้อีกครั้งฉันไม่คิดว่านั่นเป็นอาร์กิวเมนต์ที่ถูกต้อง ทั้งสองสนับสนุนการสืบทอดและจากนั้นสามารถทำแพ็กเกจสำหรับนำมาใช้ซ้ำ (ไฟล์. jar สำหรับไฟล์ GWT, .js สำหรับ JQuery) ฉันยืนตามสิ่งที่ฉันบอกว่า GWT เป็นค้อนขนาดใหญ่คุณต้องเขียนโค้ดใน Java คุณต้องรวบรวมมันคุณมีสิ่งต่าง ๆ มากมายในการจัดการ หากคุณต้องการทำลายกำแพงอิฐ แต่คุณเลือกค้อนขนาดใหญ่ ไม่ใช่ critiscm เป็นจุดที่ถูกต้อง เครื่องมือที่เหมาะสมสำหรับงานที่เหมาะสม
309902 สนิมตัวเอง

54

เราทำงานกับ gwt มาเกือบ 2 ปีแล้ว เราได้เรียนรู้บทเรียนมากมาย นี่คือสิ่งที่เราคิดว่า:

  1. อย่าใช้ไลบรารีวิดเจ็ตของบุคคลที่สามโดยเฉพาะอย่างยิ่ง gwt-ext มันจะฆ่าการดีบักการพัฒนาและประสิทธิภาพรันไทม์ของคุณ หากคุณมีคำถามเกี่ยวกับสิ่งที่เกิดขึ้นโปรดติดต่อฉันโดยตรง

  2. ใช้ gwt เพื่อกรอกข้อมูลในส่วนแบบไดนามิกของแอพของคุณเท่านั้น ดังนั้นหากคุณมีปฏิสัมพันธ์กับผู้ใช้ที่ซับซ้อนด้วยฟิลด์จำนวนมาก อย่างไรก็ตามอย่าใช้แผงควบคุมที่มาพร้อมกับมัน นำนักออกแบบหุ้นของคุณไปที่หน้า แกะสลักส่วนต่าง ๆ ที่จะมีส่วนควบคุมสำหรับแอพของคุณ แนบส่วนควบคุมเหล่านี้เข้ากับหน้าภายใน onModuleLoad () วิธีนี้คุณสามารถใช้หน้ามาตรฐานจากนักออกแบบของคุณและทำสไตล์ทั้งหมดนอก gwt

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

ผู้แสดงความคิดเห็นคนอื่นก็มีคำแนะนำที่ดีเช่นกัน กฎง่ายๆที่ฉันใช้คือการสร้างหน้าเหมือนที่คุณกำลังทำเว็บเพจมาตรฐาน จากนั้นตัดชิ้นส่วนที่จำเป็นต้องมีไดนามิกออกมา แทนที่ด้วยองค์ประกอบที่มีรหัสแล้วใช้RootPanel.get( id ).add( widget )เพื่อเติมเต็มพื้นที่เหล่านั้นมา


ผมเปิดคำถามเกี่ยวกับคำตอบของคุณที่stackoverflow.com/q/10025656/138585 ฉันจะขอบคุณถ้าคุณได้ดู
Elad

20

ข้อผิดพลาดที่เราได้พบ:

  • ในขณะที่คุณได้รับไมล์สะสมจำนวนมากจากการใช้บางอย่างเช่น GWT EXT ทุกครั้งที่คุณใช้แผ่นไม้อัดบาง ๆ ชนิดนี้อยู่ด้านบนของไลบรารี JavaScript คุณจะสูญเสียความสามารถในการดีบัก มากกว่าหนึ่งครั้งฉันทุบตีหัวของฉันบนโต๊ะเพราะฉันไม่สามารถตรวจสอบ (ภายในดีบักเกอร์ IntelliJ ของฉัน) สิ่งที่เกิดขึ้นในระดับโต๊ะ GWT EXT ... สิ่งที่คุณเห็นคือมันเป็น JavaScriptObject ทำให้ยากที่จะเข้าใจว่ามีอะไรผิดปกติเกิดขึ้น ...

  • ไม่มีใครในทีมของคุณที่รู้ CSS จากประสบการณ์ของฉันมันไม่สำคัญว่าคนนั้นไม่ใช่ผู้เชี่ยวชาญ ... ก็เพียงพอแล้วที่เขาจะมีความรู้ในการทำงานที่ดีและรู้เงื่อนไขที่เหมาะสมสำหรับ google เมื่อจำเป็น

  • การดีบักข้ามเบราว์เซอร์ จับตาดูโหมดโฮสต์ที่ไม่อยู่ระหว่างดำเนินการ [ 1 ] [ 2 ] [ 3 ] หวังว่าจะมาใน GWT 1.6 ... สำหรับตอนนี้คุณเพียงแค่ต้องได้รับสิ่งที่ดีกับโหมดโฮสต์จากนั้นใช้ปุ่ม "รวบรวม / เรียกดู" ที่คุณสามารถเล่นกับเบราว์เซอร์อื่น สำหรับฉันทำงานบน Windows นี่หมายความว่าฉันสามารถดูงานของฉันใน FireFox และใช้ FireBug เพื่อช่วยปรับแต่งและทำให้สิ่งต่าง ๆ ดีขึ้น

  • IE6 มันน่าทึ่งที่ IE 6 ต่างกันที่จะแสดงผลต่าง ฉันใช้วิธีการใช้สไตล์กับ "วิวพอร์ต" นอกสุดตามเบราว์เซอร์เพื่อให้ฉันสามารถมีกฎ CSS เช่น:

    .my-style { /* stuff that works most everywhere */ }
    
    .msie6 .my-style { /* "override" so that styles work on IE 6 */ }

สุดท้ายให้แน่ใจว่าคุณใช้โปรแกรมแก้ไขที่ช่วยคุณ ฉันใช้ IntelliJ - มีสมาร์ท GWT จำนวนมาก เช่นถ้าฉันพยายามใช้คลาสที่ไม่ได้จัดการโดยการจำลอง JRE มันจะแจ้งให้ฉันทราบ ถ้าฉันระบุสไตล์สำหรับวิดเจ็ตและฉันยังไม่ได้กำหนดสไตล์นั้นรหัสจะได้รับสีแดงเล็ก ๆ น้อย ๆ ... หรือเมื่อดู CSS มันจะบอกฉันว่าฉันได้ระบุคุณลักษณะที่ขัดแย้งกันใน กฎเดียว (ฉันยังไม่ได้ลองเลย แต่ฉันเข้าใจว่าเวอร์ชัน 8 มีการรองรับ GWT ที่ดียิ่งขึ้นเช่นการรักษาอินเตอร์เฟส RPC "local" และ "async" และการใช้งานแบบซิงค์)


18

GWT 2.0 ซึ่งคาดว่าจะออกมาในอีกไม่กี่เดือนข้างหน้าจะช่วยแก้ปัญหาต่าง ๆ ที่กล่าวถึง

  • สร้างเค้าโครงโดยใช้ html / xml เช่นไวยากรณ์
  • การโหลดสคริปต์แบบไดนามิก - เฉพาะ JS ที่จำเป็นเท่านั้นที่จะถูกดาวน์โหลดในตอนแรก ส่วนที่เหลือจะถูกดาวน์โหลดตามต้องการ
  • โหมดที่โฮสต์ในเบราว์เซอร์ - สิ่งนี้อาจดูแลปัญหาความเร็วของโหมดโฮสต์ที่กล่าวถึงรวมถึงประโยชน์อื่น ๆ
  • "การปรับแต่งคอมไพเลอร์" - การรวบรวมที่เร็วขึ้นหวังว่า

วิดีโอตัวอย่าง GWT 2.0 ที่ Google I / O


15

ไม่ใช่ "ไม่สามารถเอาชนะได้" แต่เป็นความเจ็บปวดเล็กน้อยสำหรับบางสิ่งพื้นฐาน

การจัดการวันที่:

GWT ใช้ค่าที่ไม่รองรับjava.util.Dateซึ่งอาจนำไปสู่พฤติกรรมที่ไม่คาดคิดเมื่อจัดการกับวันที่ทางฝั่งลูกค้า java.util.Calendarไม่รองรับโดย GWT ข้อมูลเพิ่มเติมที่นี่

ตัวอย่างปัญหาที่เกี่ยวข้อง:


1
สองปีต่อมาและนี่คือกรณี มันค่อนข้างน่ารำคาญสำหรับการทำคณิตศาสตร์วันที่ลูกค้า
Joseph Lust

ปัญหาคือการแปล (การรวบรวม) จากjava.util.Calendarเป็น JavaScript นอกจากนี้คุณยังอาจมีลักษณะที่ระดับ GWT ของCalendarUtil , วิธีการใช้ java.util.Calendar ใน GWTและ วิธีการทำปฏิทินการดำเนินงานในชวา GWT? วิธีเพิ่มวันในวันที่ . Cheers;)
olibre

10

ฉันจะเพิ่มบางจุดให้กับที่กล่าวถึงแล้ว:

  • databinding / การตรวจสอบ GWT ไม่มีการรองรับ databinding / validation นอกกรอบแม้ว่าจะมีบางโครงการในพื้นที่นี้ที่เริ่มปรากฏ คุณจะพบว่าตัวเองเขียนสิ่งนี้มาก:
ฟิลด์ข้อความชื่อ faddress;
...
fname.setText (person.getName ());
faddress.setText (person.getAddress ());
...
  • โหลดขี้เกียจ เนื่องจาก gwt อยู่บนฝั่งไคลเอ็นต์การโหลดแบบ lazy จึงไม่ใช่ตัวเลือก คุณจะต้องออกแบบ RPC และ Domain Objects ของคุณอย่างรอบคอบเพื่อ
    • ส่งข้อมูลวัตถุทั้งหมดของคุณที่จำเป็น
    • หลีกเลี่ยงการดึงข้อมูลทั้งหมดของคุณ
    • คุณต้องให้แน่ใจว่าคุณจะไม่ส่งวัตถุพร็อกซี / ไม่ใช่แบบอนุกรม hibernate4gwtสามารถช่วยคุณได้ในประเด็นเหล่านี้
  • การออกแบบ UI มันยากที่จะมองเห็น UI ใน java (แผงปุ่ม ฯลฯ ) กว่าใน html
  • สนับสนุนประวัติ GWT ไม่ได้จัดส่งมาพร้อมกับระบบย่อยประวัติและไม่ได้จัดส่งมาพร้อมกับระบบย่อยใด ๆ สำหรับ URL ที่ดีหรือการทำบุ๊กมาร์กแบบรัฐ คุณจะต้องม้วนตัวเอง (แม้ว่าจะรองรับโทเค็นประวัติซึ่งเป็นการเริ่มต้น) สิ่งนี้เกิดขึ้นกับชุดเครื่องมือ AJAX AFAIK ทั้งหมด

IMHO, GWT หายไปกับเฟรมเวิร์กที่ไม่มีการสนับสนุนสำหรับปัญหาทั้งหมดที่กล่าวถึงใน 'เธรด' นี้


GWT จัดส่งด้วยระบบประวัติเช่น History.newItem ("myItem", false); จะใส่ #myItem ไว้ใน URL เพื่อให้คั่นหน้าได้ง่าย หากต้องการจัดการใครบางคนที่โหลดบุ๊กมาร์กด้วยแอปของคุณเพียงใช้ History.addValueChangeHandler (myHandlerMethod);
Ztranger

มันไม่ใช่ระบบประวัติต่อ se เป็นเพียงกลไกสำหรับการเขียนโทเค็นไปยัง URL และการจัดการโทเค็นการแจ้งเตือนการเปลี่ยนแปลง คุณจะต้องเขียนรหัสแอปทั้งหมดเพื่อจัดการกับการเปลี่ยนแปลงประวัติ
Miguel Ping

9

ฉันกำลังทำงานในโครงการที่ใช้ EXT GWT (GXT) เพื่อไม่ให้สับสนกับ GWT EXT มีความแตกต่าง EXT GWT คือสิ่งที่ผลิตโดย บริษัท ที่เขียน ExtJS ในไลบรารี javascript GWT EXT เป็นกระดาษห่อหุ้ม GWT รอบ ๆ ไลบรารี ExtJS GXT เป็น GWT ดั้งเดิม

อย่างไรก็ตาม GXT ยังค่อนข้างอ่อนและขาดชุมชนที่แข็งแกร่งที่ฉันรู้สึกว่า GWT EXT มี อย่างไรก็ตามอนาคตอยู่กับ GXT เนื่องจากเป็นเจ้าของ GWT และพัฒนาขึ้นจริงโดย บริษัท ที่สร้าง ExtJS GWT EXT ค่อนข้างพิการเมื่อมีการเปลี่ยนแปลงใบอนุญาตในไลบรารี ExtJS ดังนั้นจึงชะลอการพัฒนาของ GWT EXT

โดยรวมแล้วฉันคิดว่า GWT / GXT เป็นทางออกที่ดีสำหรับการพัฒนาเว็บแอปพลิเคชัน ฉันค่อนข้างชอบโหมดโฮสต์สำหรับการพัฒนามันทำให้ทุกอย่างรวดเร็วและง่ายดาย คุณจะได้รับประโยชน์จากความสามารถในการดีบักรหัสของคุณเช่นกัน การทดสอบหน่วยกับ JUnit นั้นค่อนข้างแข็งแกร่งเช่นกัน ฉันยังไม่เห็นกรอบการทดสอบหน่วย JavaScript ที่ยอดเยี่ยมที่ฉันรู้สึกว่าเป็นผู้ใหญ่เพียงพอสำหรับการทดสอบแอปพลิเคชันระดับองค์กร

สำหรับข้อมูลเพิ่มเติมเกี่ยวกับ GWT EXT: http://gwt-ext.com/

สำหรับข้อมูลเพิ่มเติมเกี่ยวกับ EXT GWT (GXT): http://extjs.com/products/gxt/


1
เนื่องจากคำถามนี้ยังคงใช้งานอยู่และได้รับคะแนนฉันคิดว่าฉันจะแจ้งข้อมูลอัปเดต ฉันทิ้ง GXT (2009-2010) อย่างสมบูรณ์เพราะฉันไม่ชอบแนวทางการดำเนินธุรกิจของ Sencha Inc จากนั้นฉันก็ทิ้ง GWT ฉันกลัวการใช้ JavaScript นานเท่าที่ฉันจะเกลียดมัน นั่นคือจนกว่าฉันจะเข้าใจจริงๆ ตอนนี้ฉันพัฒนาเกือบเฉพาะใน Node.js / AngularJS โยนใน Bootstrap 3 และคุณสามารถสร้างเว็บไซต์ที่ดูยอดเยี่ยมในเวลาน้อยกว่า GWT อนาคตคือจาวาสคริปต์ก่อนหน้านี้ที่คุณโอบกอดนักพัฒนาที่ดีกว่าที่คุณจะเป็น
JP Richardson

คุณมีความคิดเห็นอย่างไร? (แค่อยากรู้) ขอบคุณ
Akos Lukacs

1
@AkosLukacs ฉันยังสามารถรายงานได้ว่าฉันใช้ JavaScript และรักมันทุกอย่าง! อย่างที่ฉันพูดฉันใช้กับ HATE JavaScript และด้วยเหตุนี้ฉันจึงเลือก GWT ความจริงก็คือคุณจะไม่สามารถหลีกเลี่ยง JavaScript ได้หากคุณจะทำการพัฒนาเว็บไซต์ใด ๆ ดังนั้นคุณอาจจะต้องยอมรับมันเช่นกัน ฉันได้ปรับตัวให้เข้ากับการใช้ JavaScript สำหรับทุกสิ่ง (ใช้เส้นทางอ้อมเล็กน้อยด้วย Go) เท่าที่สแต็คของฉันไปฉันใช้ Node.js / Express / React ฉันเคยเป็นแฟนตัวยงของ Angular และรู้ดี แต่ฉันไม่สามารถแนะนำ Angular 1.x ให้กับทุกคนที่เริ่มต้นด้วย JS เนื่องจากช่วงการเรียนรู้สูงเกินไป
JP Richardson

5

ไม่มีข้อผิดพลาดที่สำคัญที่ฉันไม่สามารถเอาชนะได้อย่างง่ายดาย ใช้โหมดโฮสต์ ในขณะที่คุณกำลังใช้ GWT-ext คุณแทบจะไม่จำเป็นต้องแตะ CSS ด้วยตัวเองเว้นแต่ว่าคุณต้องการปรับเปลี่ยนรูปลักษณ์ภายนอกของกล่อง

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

การสร้างดัชนีเครื่องมือค้นหาใหม่: ใช่ไซต์จะไม่มี URL ที่ใช้งานได้ตามปกติ (เว้นแต่คุณจะเพิ่มเฉพาะวิดเจ็ตให้กับองค์ประกอบของเว็บไซต์ปกติ) คุณสามารถทำประวัติย้อนหลัง / ไปข้างหน้าฟังก์ชั่น


4

ฉันใช้ GWT และ GWT-ext เข้าด้วยกันในโครงการเมื่อไม่นานมานี้ ฉันพบว่าประสบการณ์ค่อนข้างราบรื่นเมื่อการพัฒนาเว็บไซต์ดำเนินไป แต่คำแนะนำของฉันคือ:

อย่าผสมวิดเจ็ตเนทีฟ GWT กับวิดเจ็ต EXT มันสับสนเหมือนนรกเพราะปกติชื่อจะเหมือนกัน (GWT.Button หรือ GWText.Button?)

สิ่งหนึ่งที่เกิดขึ้นกับฉันที่ทำให้โค้ดซับซ้อนกว่าที่ฉันต้องการจริงๆคือฉันต้องการแผงที่เป็น) การอัพเดทแบบไดนามิกข) cascadable

GWT เนทีฟพาเนลเป็นแบบไดนามิกพาเนล Ext สามารถเรียงซ้อนกันได้ สารละลาย? GWT.VerticalPanel กำลังตัดแผง GWTExt ... ความโกลาหล :)

แต่เดี๋ยวก่อนมันใช้ได้ ;)


4

ฉันสองความคิดเห็นจาก ykagano ข้อเสียที่ใหญ่ที่สุดคือการสูญเสีย V ใน MVC แม้ว่าคุณจะสามารถแยกคลาส ui จริงออกจากส่วนที่เหลือของรหัสลูกค้าของคุณ แต่คุณไม่สามารถใช้หน้า HTML ที่สร้างโดยนักออกแบบกราฟิก / เว็บได้อย่างง่ายดาย หมายความว่าคุณต้องการนักพัฒนาซอฟต์แวร์เพื่อแปล HTML เป็นจาวา

รับเครื่องมือแก้ไข wysiwyg ui มันจะช่วยให้คุณประหยัดเวลาได้มาก ฉันใช้ GWTDesigner

ข้อดีที่ใหญ่ที่สุดของ GWT คือการลืมปัญหาข้ามเบราว์เซอร์ มันไม่ได้ 100% แต่นำความเจ็บปวดเกือบทั้งหมดออกไป เมื่อรวมกับประโยชน์ของการดีบักโหมดโฮสต์ (ตรงข้ามกับ Firebug ซึ่งยอดเยี่ยม แต่ไม่เหมือนกับ Java debugger) ทำให้ผู้พัฒนามีข้อได้เปรียบอย่างมากในการสร้างแอป Ajax ที่ซับซ้อน

โอ้และรวดเร็วในขณะทำงานโดยเฉพาะถ้าคุณใช้ตัวกรอง gzip


1
ไม่ทราบเกี่ยวกับตัวกรอง gzip - ขอบคุณสำหรับอาหารอันโอชะที่
agartzke

4

ปิดหัวข้อเล็กน้อย แต่ #gwt channel บน irc มีประโยชน์มากในกรณีที่คุณมีปัญหาถาวร


เครือข่าย IRC ใดที่เป็นช่องทาง
tovare

มันอยู่บน freenode (irc.freenode.net) และมันคือ ## gwt แต่คุณจะถูกส่งต่อไปหากคุณพิมพ์ #gwt
stian

4

GWT ค่อนข้างตรงไปตรงมาและใช้งานง่าย

โดยเฉพาะอย่างยิ่งเมื่อมีการเปิดตัว UIBinder เพื่ออนุญาตให้วางวิดเจ็ต GWT ใน XML และจากนั้นโค้ดข้างหลังใน Java

ดังนั้นหากคุณใช้เครื่องมือออกแบบ Ajax หรือ Flash อื่น ๆ หรือ Silverlight เป็นต้น GWT นั้นง่ายต่อการเรียนรู้

อุปสรรค์ที่สำคัญหากไม่เป็นอันตรายคือ GWT RPC เหตุผลที่คุณต้องการใช้ GWT เป็นเพราะ GWT async RPC มิฉะนั้นทำไมไม่เพียง แต่พึ่งพา css เพื่อจัดรูปแบบหน้าของคุณ

GWT RPC เป็นองค์ประกอบที่ช่วยให้เซิร์ฟเวอร์ของคุณรีเฟรชข้อมูลบนเซิร์ฟเวอร์ของคุณโดยไม่ต้องรีเฟรชหน้า นี่เป็นข้อกำหนดที่แน่นอนสำหรับหน้าต่างๆเช่นการตรวจสอบประสิทธิภาพของสต็อกสินค้า (หรือหนี้ของประเทศและหนี้สาธารณะของสหรัฐอเมริกาในปัจจุบัน

GWT RPC ใช้ความพยายามที่จะเข้าใจ แต่ให้เวลาสองสามชั่วโมงมันควรจะชัดเจน

เหนือสิ่งนั้นหลังจากใช้ความพยายามในการเรียนรู้ GWT RPC ในที่สุดคุณก็ค้นพบว่าคุณไม่สามารถใช้ JSP เป็นองค์ประกอบบริการสำหรับ RPC เว้นแต่ว่า ... ฉันมีซีรีส์ 8 ส่วน (ฉันคิดว่า) บนบล็อกของฉันเกี่ยวกับวิธีการใช้ JSP ในฐานะผู้ให้บริการ GWT RPC อย่างไรก็ตามเนื่องจากคุณไม่ได้ขอคำตอบ แต่มีปัญหาเพียงฉันจะหยุดการโฆษณาบล็อกของฉัน

ดังนั้น. ฉันเชื่ออย่างมากว่าสิ่งกีดขวางบนถนน / ข้อผิดพลาดที่เลวร้ายที่สุดในการใช้ GWT คือการค้นหาวิธีการปรับใช้ GWT async RPC อย่างถูกต้องและวิธีการเปิดใช้งานเพื่อใช้ JSP servicers


ฉันต้องการลิงค์ไปยังบทความบล็อกของคุณ;)
ms-tg

h2g2java.blessedgeek.com
ความสุข Geek

3

เรามีช่วงเวลาที่ยากลำบากมากในการแต่งงานกับโค้ดฐาน GWT ของเรากับเทมเพลตเว็บ HTML ที่เราได้รับจากนักออกแบบเว็บไซต์ (หน้า HTML คงที่พร้อมรหัส div เฉพาะที่เราต้องการให้ GWT จัดการ) อย่างน้อยที่สุดเมื่อเราใช้มันเราไม่สามารถรับ GWT เพื่อรวมกับส่วนต่าง ๆ ของเว็บไซต์ของเราที่ไม่ได้เข้ารหัสใน GWT ในที่สุดเราก็ใช้งานได้ แต่มันเป็นแฮ็คใหญ่


3
  • อินเทอร์เฟซ Async ที่คุณต้องเขียนสำหรับแต่ละอินเตอร์เฟสของบริการดูเหมือนกับบางสิ่งที่สามารถสร้างขึ้นโดยอัตโนมัติโดยคอมไพเลอร์ GWT
  • เวลาในการรวบรวมยาวนานสำหรับโครงการขนาดใหญ่

แต่สำหรับโครงการ Javascript ขนาดใหญ่เป็นตัวเลือกที่ดีที่สุด


3

GWT 2.4 ได้แก้ไขปัญหาดังกล่าวจำนวนมากและไลบรารีวิดเจ็ตที่ยอดเยี่ยมเพิ่งออกมาจากเบต้า (Ext GWT 3.0.4 aka GXT) ซึ่งเขียนขึ้นอย่างสมบูรณ์ใน GWT ไม่ใช่ wrapper ของ JS lib

ความเจ็บปวดที่เหลืออยู่:

  • ขาดการสนับสนุนตัวเลือก CSS3 คุณสามารถใช้ "literal ()" ในบางกรณีเพื่อหลีกเลี่ยง
  • ขาดการสนับสนุน CSS3 และเหตุการณ์เบราว์เซอร์ที่ทันสมัยเช่นtransitionEnd transitionEnd
  • ขาดการสนับสนุนคลาส Java Calendar (หลายปีต่อมา)
  • ขาดการสนับสนุน JUnit4 (5 ปีขึ้นไป)
  • ไม่มีแผนที่ถนนที่ชัดเจนและกำหนดการออกจากทีม Google GWT

2

เกี่ยวกับ GWT 2.4 ใช้ Firefoxเมื่อทำการดีบั๊ก GWT มันเร็วกว่ามากแล้วใช้โครเมียม และหากคุณใช้ Firefox เพียงอย่างเดียวให้ลองวางบรรทัดนี้ในไฟล์project.gwt.xmlของคุณ

<set-property name="user.agent" value="gecko1_8" />

นอกจากนี้หากคุณใช้ eclipse ให้เพิ่มสิ่งต่อไปนี้ภายใต้อาร์กิวเมนต์ -> อาร์กิวเมนต์ VM:

-Xmx512m -XX: MaxPermSize = 1024m -XX: PermSize = 1024m

คุณสามารถแบ่งเซิร์ฟเวอร์และไคลเอ็นต์ของคุณและใช้สิ่งต่อไปนี้ภายใต้อาร์กิวเมนต์ -> อาร์กิวเมนต์ของโปรแกรม: -codeServerPort 9997 -startupUrl http: // yourserver / project -noserver

นอกจากนี้เพื่อป้องกันการรีเฟรชเซิร์ฟเวอร์ของคุณในการเปลี่ยนแปลงแต่ละครั้งให้ใช้ JRebel http://zeroturnaround.com/blog/how-to-rock-out-with-jrebel-and-google-web-toolkit-gwt/ นี่คือการสาธิตสด http://www.youtube.com/watch?feature=player_embedded&v=4JGGFCzspaY


1

ข้อผิดพลาดที่สำคัญประการหนึ่งคือบางครั้งคุณต้องกำหนด ID ให้กับสิ่งที่ในที่สุดจะกลายเป็นองค์ประกอบ HTML เพื่อให้สามารถใช้สไตล์ CSS บางอย่างได้ ตัวอย่างเช่น: GWT TabPanel จะทำเฉพาะ: โฮเวอร์เหนือ tabBarItems เมื่อ tabBar ของ tabPanel ได้รับการกำหนด ID และคุณระบุ: hover บน elementId นั้น

ฉันเขียนเกี่ยวกับข้อเสียอื่น ๆของ GWTที่อื่น แต่พวกเขาได้รับการคุ้มครองโดยคำตอบสนิมแล้ว :)


โดยทั่วไปการกำหนดรหัสไม่ใช่สิ่งเลวร้ายหากคุณวางแผนที่จะทำการทดสอบโดยใช้ซีลีเนียม
Petteri Hietavirta

1

ฉันเพิ่งทำงาน GWT มาหลายครั้งและนี่คือสิ่งที่ฉันต้องพูดว่า:

  1. สไตล์ CSS นั้นค่อนข้างยุ่งยากในบางครั้งใช้เครื่องมือพัฒนา IE ใน IE และ firebug ใน Firefox เพื่อค้นหาว่าเกิดอะไรขึ้นและคุณจะได้รับความคิดที่ชัดเจนว่าต้องการเปลี่ยน CSS อะไร
  2. คุณสามารถใช้ลูกเล่นเพื่อให้ google จัดทำดัชนีได้ เว็บไซต์ที่มีชื่อเสียงมากคือhttp://examples.roughian.com/ตรวจสอบอันดับของที่ google ไซต์ที่มีชื่อเสียงน้อยกว่าคือwww.salvin.in (ไม่สามารถพูดถึงได้) ฉันปรับให้เหมาะกับคำ: หน้าแรกของ salvin (ค้นหา google สำหรับคำทั้งสามนี้)

ฉันไม่รู้เกี่ยวกับ GWT-EXT มากนัก แต่ฉันก็มีความเชื่อเช่นกันว่าไม่จำเป็นต้องมีห้องสมุดบุคคลที่สาม

ขอให้โชคดีกับการตัดสินใจของคุณ :)


1

1

ทีม GWT ทำการปรับปรุงมากมายในปีที่แล้วซึ่งมีการเปิดตัว GWT 2.7 จุดอ่อนสำคัญอย่างหนึ่งของ GWT ก็คือการรวบรวมใช้เวลามากใน GWT 2.6 และต่ำกว่า นี่เป็นไปแล้วตอนนี้ GWT ไม่ได้คอมไพล์แบบเพิ่มหน่วยซึ่งเร็วสุดและคอมไพล์การเปลี่ยนแปลงเท่านั้น

GWT 2.7 ตอนนี้มี ( ที่มา ):

  • งานสร้างที่เพิ่มขึ้นในขณะนี้เพียงไม่กี่วินาที
  • SourceMaps ขนาดกะทัดรัดและแม่นยำยิ่งขึ้น
  • สนับสนุน GSS
  • JSInterop
  • ประสิทธิภาพการทำงานของ JavaScript ที่ยอดเยี่ยม
  • ขนาดรหัสที่เล็กลง

1

วิธีที่ดีที่สุดในการรับข้อเท็จจริงที่เชื่อถือได้นั้นมาจาก จำไว้ว่าคุณสามารถใช้ js ใน GWT ได้ทุกเมื่อดังนั้นหากคุณกำลังดิ้นรนกับ GWT ให้พิจารณาใช้ js ในตอนท้ายของวัน GWT คือ js ดังนั้นคุณสามารถทำอะไรก็ได้ใน GWT ที่คุณสามารถทำได้ใน js ในความเป็นจริงโครงการ GWT ส่วนใหญ่ใช้ js ปัญหาคือว่า GWT มีความซับซ้อนอย่างมาก อย่างไรก็ตามบางครั้งมันก็คุ้มค่ากับความซับซ้อนที่เพิ่มขึ้นสำรวจ gwtการสำรวจหนึ่งในปัญหาที่ใหญ่ที่สุดของ GWT มักจะใช้เวลาในการรวบรวมนาน โชคดีที่มันพัฒนาขึ้นอย่างรวดเร็วดังนั้นมันจะไม่เป็นปัญหาสำคัญในอนาคตอันใกล้ ข้อผิดพลาดอีกประการหนึ่งคือ GWT นั้นซับซ้อนกว่าเดิมมากเนื่องจาก Java เป็นภาษาที่ซับซ้อนกว่าที่ต้านทานตัวแปลงสัญญาณไม่ดีทุกขั้นตอน นอกจากนี้การรวบรวมเพิ่มเลเยอร์ ตัวอย่างเช่น js interop ต้องใช้สำเร็จรูปเล็กน้อย ปัญหาพื้นฐานคือ GWT ไม่ได้ออกแบบมาให้เรียบง่าย มันถูกออกแบบมาตั้งแต่ต้นสำหรับแอพพลิเคชั่นบนเว็บที่มีความซับซ้อนมากและชุมชนทั้งหมดจัดลำดับความสำคัญอย่างต่อเนื่อง, ประสิทธิภาพ, คุณภาพของโค้ด, สถาปัตยกรรมเป็นต้นผ่านการเข้ารหัสง่าย

เป็นที่น่าสังเกตว่า GWT 3.0 จะนำมาซึ่งการปรับปรุงครั้งใหญ่


0

การใช้วัตถุบริการ RPC อีกครั้ง
มันทำให้เกิดสภาพการแข่งขันที่มีอาการที่ดูเหมือนแอพกำลังแฮงค์


อันโตนี่คุณสามารถอธิบายเกี่ยวกับเรื่องนี้อย่างละเอียด ฉันกำลังเรียก RPC ไปยังเซิร์ฟเวอร์และคาดว่า GUI จะตอบสนองได้จนกว่าคำขอจะกลับมา แต่ดูเหมือนว่าจะหยุดทำงาน
Brett Hannah

0

ข้อผิดพลาดที่ฉันพบใน 1. พฤติกรรมที่แตกต่างในโหมด superdev เช่น Someclass.class.getName () ทำงานได้ดีอย่างแน่นอนในโหมด Superdev และส่งกลับชื่อเต็มของคลาส ในโหมดการผลิตสิ่งนี้จะไม่ทำงาน

  1. addWidget (widget) จะเรียกเครื่องมือ removefromparent () ของ

0

GWT เป็นผลงานชิ้นเอกของเทคโนโลยี มันรวมโปรแกรมไคลเอนต์และเซิร์ฟเวอร์เข้าด้วยกันทำให้เป็นหนึ่งในแอพพลิเคชั่นที่เชื่อมโยงกัน - วิธีเขียนซอฟต์แวร์ก่อน "เลเยอร์" และวิธีที่ควรเขียน มันกำจัดชุดทักษะที่แตกต่างกันการสื่อสารผิดพลาดระหว่างสมาชิกในทีมและโดยทั่วไปแล้วขั้นตอนการออกแบบเว็บทั้งหมด: ทั้งงานศิลป์และการเขียนโปรแกรม และมันใกล้เคียงที่สุดที่คุณจะไปถึงมือถือเช่นการพัฒนา Android ในความเป็นจริง GWT ถูกออกแบบมาเพื่อสร้าง UIs ดั้งเดิมที่แตกต่างไม่ใช่แค่ HTML แม้ว่ามันจะต้องมีวินัยอย่างมากเพื่อให้แน่ใจว่า decoupling ดังกล่าว - เพื่อให้เลเยอร์ภายในของคุณไม่เชื่อเรื่องพระเจ้า

ความผิดพลาดครั้งแรกที่คุณควรหลีกเลี่ยงซึ่งใช้เวลาสี่ปีกว่าฉันจะตระหนักถึงการใช้ส่วนขยายของบุคคลที่สามเช่น EXT-GWT aka GXT และ SmartGWT มันน่าดึงดูดมากที่เริ่มใช้วิดเจ็ตสวย ๆ ของพวกเขาแทนการลงทุนในสไตล์ของคุณเอง แต่ฉันไม่สามารถบอกได้ว่าฉันมีปัญหากับ SmartGWT กี่ครั้งจนกระทั่งในที่สุดฉันก็เบื่อหน่าย สรุปแล้วมันหยุดการทำงานของฟีเจอร์หลักของ GWT ที่กำหนดไว้ที่ระดับ (ค่อนข้างล้าสมัย) แล้วสร้างขึ้นบนสุด โปรดระลึกไว้เสมอว่ารูปลักษณ์และความรู้สึกของเดสก์ท็อปที่ถูกสกัดออกมานั้นดูโง่ในปัจจุบันไม่ต้องพูดถึงประสิทธิภาพที่ซบเซาข้อบกพร่องจำนวนมากและคุณลักษณะความเข้ากันได้โดยเฉพาะอย่างยิ่งบนอุปกรณ์พกพา คุณต้องการอยู่ใกล้กับตัวควบคุมเบราว์เซอร์ดั้งเดิมที่สุดเท่าที่จะทำได้เช่นดรอปดาวน์ที่เรนเดอร์เป็นองค์ประกอบ <select> ดั้งเดิมไม่ใช่ตัวควบคุมแบบกำหนดเองบางส่วน

ด้วยแนวโน้มของมือถือ UX ทั้งหมดจึงกลายเป็นเรื่องง่ายและราบเรียบดังนั้นคุณไม่จำเป็นต้องทำอะไรมากนักในการออกแบบแอพพลิเคชั่นที่ดูคมชัด แม้ว่าคุณต้องการรูปลักษณ์ "3D" แต่ก็มีการไล่ระดับสี CSS3 ทำให้ทุกอย่างง่ายขึ้นและ GWT จะห่อหุ้มด้วยวิธีการที่เน้นวัตถุที่ไม่เหมือน CSS ดิบ ดังนั้นอย่าท้อแท้โดยดูที่การควบคุมเปลือยเปล่าที่น่าเกลียดใน GWT Showcase ทีม GWT โดยเจตนาไม่ได้มีสไตล์ใด ๆ เพราะเป็นงานของนักพัฒนา

ส่วนที่เหลือเป็นการเขียนโปรแกรมเบราว์เซอร์ทั่วไปที่ค่อนข้างพิมพ์ Java อย่างมากด้วย API ที่กระชับ แต่แน่นอนไม่ลืมรหัสของคุณทำงานในเบราว์เซอร์ดังนั้นการโทรทั้งหมดจะไม่ตรงกันเช่นคุณไม่สามารถเรียกวิธีการ GWT-RPC ในวง (เพื่อเติมรายการบางส่วน) แต่จำเป็นต้องเชื่อมโยงพวกเขาซ้ำถ้าคุณมาที่นี่ สถานการณ์.

มี "แอนตี้ - แพทเทิร์น" ที่ประกาศตัวเองบางอย่างเช่นไม่ใช้ GWT-RPC มันดีสำหรับฉันมาแล้ว: เป็นเวลา 10 ปี ความเรียบง่ายเป็นกุญแจสำคัญ ฉันไม่คิดว่าแม้แต่วินาทีเดียวที่จะเสียสละประสิทธิภาพเล็กน้อยเพื่อความสง่างามของรหัสและการบำรุงรักษา นอกจากนี้ไม่ใช่ตำแหน่งที่คอขวดของคุณจะอยู่ในฐานข้อมูล แน่นอนว่าคุณต้องส่งข้อมูลไปยังลูกค้าเท่าใด

และหากคุณไม่สามารถค้นหาหรือกำหนดลักษณะของแกดเจ็ตที่มีอยู่ - อ่านชุดองค์ประกอบ HTML5 ที่หลากหลายคุณสามารถรวมชุดที่สามได้ ฉันทำกับ jQuery FullCalendar ยอดนิยม ไม่ใช่วิทยาศาสตร์จรวดเลย ทุกอย่างอื่นเช่น Google Maps และ Google Charts มีกระดาษห่อ GWT กึ่งทางการ

GWT สมบูรณ์แบบ เหตุผลเดียวที่มันไม่ได้รับความรักมากพอเพราะผู้ใช้อินเทอร์เน็ตยุคแรก ๆ ที่ยังคงมีอิทธิพลต่ออุตสาหกรรมไม่ได้มาจากวิทยาการคอมพิวเตอร์และภาษาเชิงวัตถุเพื่อชื่นชมพวกเขา พวกเขามีพื้นหลังศิลป์ (Photoshop / WordPress) หรือเครือข่าย (Perl / Python)

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