การออกแบบและสร้างเว็บแอปพลิเคชันแบบก้าวหน้าโดยไม่มีกรอบการทำงาน (ตอนที่ 1)

เผยแพร่แล้ว: 2022-03-10
สรุปอย่างย่อ ↬ คุณไม่จำเป็นต้องจบการศึกษาด้านวิทยาการคอมพิวเตอร์หรือรู้กรอบงาน JavaScript เพื่อสร้าง Progressive Web Application ด้วยความรู้ด้าน HTML และ CSS และความสามารถพื้นฐานเกี่ยวกับ JavaScript คุณมีทักษะทั้งหมดที่ต้องการ ในสามส่วน เราจะแบ่งปันการเดินทางของการออกแบบและสร้าง Progressive Web Application อย่างง่ายที่เรียกว่า 'In/Out' ซึ่งสร้างขึ้นโดยไม่มีกรอบ คุณสามารถดูได้ที่นี่

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

คำถามเหล่านี้เป็นคำถามที่ง่ายที่จะมองข้ามหรือมองข้ามไปโดยสิ้นเชิงด้วยกรอบงาน นักพัฒนาเข้าถึงบางสิ่งเช่น React, Vue, Ember หรือ Angular ทำตามเอกสารประกอบเพื่อเริ่มต้นใช้งานและออกไป ปัญหาเหล่านั้นจัดการโดยกลเม็ดของกรอบงาน

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

คุณไม่ต้องการที่จะรู้ว่าเทคนิคทำอย่างไร?

ฉันทำ. ดังนั้นฉันจึงตัดสินใจลองสร้างแอปพลิเคชันพื้นฐานฝั่งไคลเอ็นต์ sans-framework เพื่อทำความเข้าใจปัญหาเหล่านี้ด้วยตนเอง

แต่ฉันกำลังก้าวไปข้างหน้าเล็กน้อย พื้นหลังเล็กน้อยก่อน

ก่อนเริ่มต้นการเดินทางครั้งนี้ ฉันคิดว่าตัวเองเชี่ยวชาญด้าน HTML และ CSS มาก แต่ไม่ใช่ JavaScript เมื่อฉันรู้สึกว่าสามารถแก้ปัญหาที่ใหญ่ที่สุดที่ฉันมีเกี่ยวกับ CSS ได้จนพอใจแล้ว ความท้าทายต่อไปที่ฉันตั้งไว้คือการทำความเข้าใจภาษาการเขียนโปรแกรม

ความจริงก็คือ ฉันค่อนข้างจะเริ่มต้นกับ JavaScript และนอกเหนือจากการแฮ็ค PHP ของ Wordpress ฉันยังไม่ได้รับการเปิดเผยหรือการฝึกอบรมในภาษาการเขียนโปรแกรมอื่นใดเช่นกัน

ให้ฉันมีคุณสมบัติการยืนยัน 'ระดับเริ่มต้น' แน่นอน ฉันสามารถทำให้การโต้ตอบทำงานบนเพจได้ สลับคลาส สร้างโหนด DOM ต่อท้ายและย้ายพวกมันไปรอบๆ ฯลฯ แต่เมื่อพูดถึงการจัดระเบียบโค้ดสำหรับสิ่งอื่นนอกเหนือจากนั้น ฉันค่อนข้างจะไม่ค่อยรู้เรื่อง ฉันไม่มั่นใจที่จะสร้างสิ่งใดที่ใกล้จะถึงแอปพลิเคชัน ฉันไม่รู้ว่าจะกำหนดชุดข้อมูลใน JavaScipt ได้อย่างไร นับประสาจัดการกับมันด้วยฟังก์ชัน

ฉันไม่มีความเข้าใจใน 'รูปแบบการออกแบบ' ของ JavaScript — แนวทางที่กำหนดไว้สำหรับการแก้ปัญหาโค้ดที่พบเจอบ่อย แน่นอนว่าฉันไม่มีความรู้สึกว่าจะตัดสินใจออกแบบแอปพลิเคชันขั้นพื้นฐานอย่างไร

คุณเคยเล่น 'Top Trumps' หรือไม่? ในรุ่นนักพัฒนาเว็บ การ์ดของฉันจะหน้าตาประมาณนี้ (คะแนนเต็ม 100):

  • CSS: 95
  • คัดลอกและวาง: 90
  • เส้นผม: 4
  • HTML: 90
  • JavaSript: 13

นอกจากจะต้องการท้าทายตัวเองในระดับเทคนิคแล้ว ฉันยังขาดการออกแบบอีกด้วย

ด้วยการเขียนโค้ดการออกแบบของคนอื่นโดยเฉพาะในช่วงทศวรรษที่ผ่านมา ทักษะการออกแบบภาพของฉันไม่เคยมีความท้าทายอย่างแท้จริงตั้งแต่ช่วงปลายยุคนี้ เมื่อไตร่ตรองถึงข้อเท็จจริงนั้นและทักษะจาวาสคริปต์ที่อ่อนแอของฉัน ได้ปลูกฝังความรู้สึกไม่เพียงพอของมืออาชีพ ถึงเวลาแก้ไขข้อบกพร่องของฉันแล้ว

ความท้าทายส่วนตัวเกิดขึ้นในใจของฉัน นั่นคือ การออกแบบและสร้างเว็บแอปพลิเคชัน JavaScript ฝั่งไคลเอ็นต์

เพิ่มเติมหลังกระโดด! อ่านต่อด้านล่าง↓

เกี่ยวกับการเรียนรู้

ไม่เคยมีแหล่งข้อมูลดีๆ สำหรับการเรียนรู้ภาษาคอมพิวเตอร์มากเท่านี้มาก่อน โดยเฉพาะจาวาสคริปต์ อย่างไรก็ตาม ฉันต้องใช้เวลาสักครู่ในการค้นหาแหล่งข้อมูลที่อธิบายสิ่งต่างๆ ในลักษณะที่คลิกได้ สำหรับฉัน 'You Don't Know JS' ของ Kyle Simpson และ 'Eloquent JavaScript' โดย Marijn Haverbeke ช่วยได้มาก

หากคุณกำลังเริ่มเรียนรู้ JavaScript คุณจะต้องค้นหากูรูของคุณเองอย่างแน่นอน คนที่มีวิธีการอธิบายที่เหมาะกับคุณ

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

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

ทันทีที่คุณรู้สึกว่ามีความสามารถเพียงเล็กน้อย การพยายามใช้การเรียนรู้ของคุณจะสอนคุณมากขึ้นไปอีก

นี่คือแหล่งข้อมูลบางส่วนที่ฉันพบว่ามีประโยชน์ระหว่างทาง:

  • Fun Fun Function ช่อง YouTube
  • หลักสูตรสายตาพหูพจน์ Kyle Simpson
  • JavaScript30.com ของ Wes Bos
  • JavaScript ที่ไพเราะโดย Marijn Haverbeke

ใช่ นั่นคือทั้งหมดที่คุณต้องรู้เกี่ยวกับสาเหตุที่ฉันมาถึงจุดนี้ ตอนนี้ช้างอยู่ในห้อง ทำไมไม่ใช้โครง?

ทำไมไม่ตอบสนอง, Ember, Angular, Vue Et Al

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

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

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

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

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

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

ตกลง. ตอนนี้ เรารู้แล้วว่าเหตุใดแอปนี้จึงถูกสร้างขึ้น และไม่ว่าจะชอบหรือไม่ ทำอย่างไร

มาดูกันว่าสิ่งนี้จะเป็นอย่างไร

ไอเดียแอปพลิเคชัน

ฉันต้องการแนวคิดเกี่ยวกับแอป ไม่มีอะไรทะเยอทะยานเกินไป ฉันไม่ได้มีความเข้าใจผิดใดๆ ในการสร้างธุรกิจที่เริ่มต้นขึ้นหรือปรากฏบน Dragon's Den — การเรียนรู้ JavaScript และพื้นฐานของแอปพลิเคชันคือเป้าหมายหลักของฉัน

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

เวลาสัมผัส.

นอกงาน ฉันจะจัดระเบียบและเล่นฟุตบอลในร่มทุกครั้งที่ทำได้ ในฐานะผู้จัดงาน มันเป็นเรื่องเจ็บปวดที่ต้องระลึกไว้เสมอว่าใครส่งข้อความมาบอกว่ากำลังเล่นอยู่และใครไม่ได้ส่ง โดยทั่วไปต้องใช้คน 10 คนสำหรับเกม 8 คนต่อครั้ง มีรายชื่อประมาณ 20 คนที่อาจจะหรืออาจจะไม่สามารถเล่นเกมแต่ละเกมได้

แนวคิดของแอปที่ฉันใช้คือสิ่งที่ทำให้สามารถเลือกผู้เล่นจากรายชื่อได้ ทำให้ฉันนับจำนวนผู้เล่นที่ยืนยันว่าพวกเขาสามารถเล่นได้

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

เป็นที่ยอมรับว่าฉันแทบจะไม่ได้ฝันถึง Google Earth อย่างไรก็ตาม มีความท้าทายที่จำเป็นทั้งหมด: การออกแบบ การจัดการข้อมูล การโต้ตอบ การจัดเก็บข้อมูล การจัดระเบียบโค้ด

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

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

คุณสมบัติที่ต้องการ

รายการคุณสมบัติหัวข้อย่อยเริ่มต้นที่ฉันตั้งใจจะออกแบบและเขียนโค้ดมีลักษณะดังนี้:

  • ช่องป้อนข้อมูลเพื่อเพิ่มคนในบัญชีรายชื่อ
  • ความสามารถในการตั้งค่าให้แต่ละคน 'เข้า' หรือ 'ออก'
  • เครื่องมือที่แบ่งคนออกเป็นทีม โดยผิดนัดเป็น 2 ทีม;
  • ความสามารถในการลบบุคคลออกจากบัญชีรายชื่อ
  • อินเทอร์เฟซบางส่วนสำหรับ 'เครื่องมือ' นอกจากการแยกส่วนแล้ว เครื่องมือที่มีอยู่ควรรวมถึงความสามารถในการดาวน์โหลดข้อมูลที่ป้อนเป็นไฟล์ อัปโหลดข้อมูลที่บันทึกไว้ก่อนหน้านี้ และลบผู้เล่นทั้งหมดในครั้งเดียว
  • แอปควรแสดงจำนวนคนที่ 'อยู่ใน' ปัจจุบัน;
  • หากไม่มีผู้ถูกเลือกสำหรับเกม ควรซ่อนตัวแยกทีม
  • โหมดการชำระเงิน การสลับในการตั้งค่าที่อนุญาตให้ผู้ใช้ 'in' มีปุ่มสลับเพิ่มเติมเพื่อแสดงว่าพวกเขาได้ชำระเงินแล้วหรือไม่

ในตอนเริ่มต้น นี่คือสิ่งที่ฉันได้พิจารณาถึงคุณลักษณะของผลิตภัณฑ์ที่ทำงานได้ขั้นต่ำ

ออกแบบ

การออกแบบเริ่มต้นจากเศษกระดาษ เป็นเรื่องที่ส่องสว่าง (อ่าน: บดขยี้) เพื่อค้นหาว่ามีความคิดที่น่าเหลือเชื่อในหัวของฉันมากน้อยเพียงใดที่กลายเป็นเรื่องน่าหัวเราะเมื่ออยู่ภายใต้การตรวจสอบอย่างละเอียดถี่ถ้วนด้วยการวาดภาพด้วยดินสอ

ความคิดหลายอย่างจึงถูกตัดออกอย่างรวดเร็ว แต่ในทางกลับกัน โดยการร่างแนวคิดบางอย่างออกมา มันมักจะนำไปสู่แนวคิดอื่นๆ ที่ฉันไม่เคยคิดมาก่อน

ตอนนี้ ดีไซเนอร์ที่อ่านข้อความนี้อาจจะเป็นแบบ “แน่นอน” แต่นี่เป็นการเปิดเผยที่แท้จริงสำหรับฉัน นักพัฒนามักคุ้นเคยกับการออกแบบฉากในภายหลัง แทบไม่เคยเห็นขั้นตอนที่ละทิ้งไปตลอดทางก่อนหน้านั้น

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

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

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

การออกแบบเบื้องต้นของแอปพลิเคชัน Who's In
การออกแบบเบื้องต้นของแอปพลิเคชัน Who's In (ตัวอย่างขนาดใหญ่)
เมนูเริ่มต้นสำหรับแอปพลิเคชัน Who's In
เมนูเริ่มต้นสำหรับแอปพลิเคชัน Who's In (ตัวอย่างขนาดใหญ่)

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

ความต้องการทางด้านเทคนิค

ด้วยข้อกำหนดคุณสมบัติเบื้องต้นบางประการและทิศทางการมองเห็นขั้นพื้นฐาน ถึงเวลาที่จะต้องพิจารณาถึงสิ่งที่ควรทำด้วยโค้ด

แม้ว่าจะได้รับปัญญาสั่งการว่าวิธีสร้างแอปพลิเคชันสำหรับอุปกรณ์ iOS หรือ Android นั้นใช้โค้ดเนทีฟ แต่เราได้กำหนดไว้แล้วว่าความตั้งใจของฉันคือการสร้างแอปพลิเคชันด้วย JavaScript

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

หากคุณไม่รู้ว่า Progressive Web Application คืออะไร นี่คือ 'ระยะห่างระหว่างลิฟต์' ตามแนวคิดแล้ว ลองนึกภาพเว็บแอปพลิเคชันมาตรฐานแต่เป็นเว็บที่ตรงตามเกณฑ์บางอย่าง การปฏิบัติตามข้อกำหนดเฉพาะชุดนี้หมายความว่าอุปกรณ์ที่รองรับ (คิดว่าโทรศัพท์มือถือ) ให้สิทธิ์พิเศษแก่เว็บแอป ทำให้เว็บแอปพลิเคชันมีมากกว่าผลรวมของส่วนประกอบทั้งหมด

โดยเฉพาะบน Android แทบจะเป็นไปไม่ได้เลยที่จะแยกแยะ PWA ที่สร้างด้วย HTML, CSS และ JavaScript จากแอปพลิเคชันที่สร้างด้วยโค้ดเนทีฟ

ต่อไปนี้คือรายการตรวจสอบข้อกำหนดของ Google สำหรับแอปพลิเคชันที่ถือเป็น Progressive Web Application:

  • ไซต์ให้บริการผ่าน HTTPS;
  • เพจตอบสนองบนแท็บเล็ตและอุปกรณ์มือถือ
  • URL ของแอปทั้งหมดโหลดขณะออฟไลน์
  • ข้อมูลเมตาที่มีให้สำหรับหน้าจอเพิ่มในหน้าจอหลัก
  • โหลดครั้งแรกอย่างรวดเร็วแม้ใน 3G;
  • ไซต์ทำงานข้ามเบราว์เซอร์
  • การเปลี่ยนหน้าไม่รู้สึกเหมือนถูกบล็อกในเครือข่าย
  • แต่ละหน้ามี URL

นอกจากนี้ หากคุณต้องการเป็นสัตว์เลี้ยงของครูจริงๆ และให้ใบสมัครของคุณเป็น 'Exemplary Progressive Web App' ก็ควรเป็นไปตามข้อกำหนดต่อไปนี้ด้วย:

  • เนื้อหาของไซต์ได้รับการจัดทำดัชนีโดย Google;
  • มีการจัดเตรียมข้อมูลเมตาของ Schema.org ตามความเหมาะสม
  • มีการจัดเตรียมข้อมูลเมตาทางสังคมตามความเหมาะสม
  • Canonical URL มีให้เมื่อจำเป็น
  • หน้าใช้ API ประวัติ
  • เนื้อหาไม่กระโดดเมื่อโหลดหน้า
  • การกดกลับจากหน้ารายละเอียดจะคงตำแหน่งการเลื่อนในหน้ารายการก่อนหน้า
  • เมื่อแตะ แป้นพิมพ์บนหน้าจอจะไม่บดบังอินพุต
  • สามารถแชร์เนื้อหาได้อย่างง่ายดายจากโหมดสแตนด์อโลนหรือโหมดเต็มหน้าจอ
  • ไซต์ตอบสนองตามขนาดหน้าจอของโทรศัพท์ แท็บเล็ต และเดสก์ท็อป
  • จะไม่มีการใช้ข้อความแจ้งการติดตั้งแอปมากเกินไป
  • พรอมต์ "เพิ่มในหน้าจอหลัก" ถูกสกัดกั้น
  • โหลดครั้งแรกเร็วมากแม้บน 3G;
  • ไซต์ใช้เครือข่ายแบบแคชแรก
  • ไซต์แจ้งผู้ใช้อย่างเหมาะสมเมื่อพวกเขาออฟไลน์
  • ให้บริบทแก่ผู้ใช้เกี่ยวกับวิธีการใช้การแจ้งเตือน
  • UI ที่กระตุ้นให้ผู้ใช้เปิด Push Notifications จะต้องไม่ก้าวร้าวมากเกินไป
  • ไซต์ทำให้หน้าจอมืดลงเมื่อมีการแสดงคำขออนุญาต
  • การแจ้งเตือนแบบพุชต้องตรงเวลา แม่นยำ และมีความเกี่ยวข้อง
  • ให้การควบคุมเพื่อเปิดและปิดการแจ้งเตือน
  • ผู้ใช้เข้าสู่ระบบในอุปกรณ์ต่างๆ ผ่าน Credential Management API;
  • ผู้ใช้สามารถชำระเงินได้อย่างง่ายดายผ่าน UI ดั้งเดิมจาก API คำขอชำระเงิน

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

สำหรับประเภทแอปพลิเคชันทั้งหมด ฉันเชื่อว่า PWA เป็นโซลูชันที่ใช้งานได้ดีกว่าแอปพลิเคชันดั้งเดิม ที่ซึ่งเกมและ SaaS เหมาะสมกว่าใน App Store ยูทิลิตี้ขนาดเล็กสามารถอยู่บนเว็บได้อย่างมีความสุขและประสบความสำเร็จมากขึ้นในฐานะ Progressive Web Applications

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

ทางเลือกเทคโนโลยี

ด้วยแนวคิดที่ค่อนข้างชัดเจนว่าเป้าหมายคืออะไร ความสนใจจึงหันไปใช้เครื่องมือที่สามารถนำมาใช้สร้างมันได้

ฉันตัดสินใจแต่เนิ่นๆ ว่าจะใช้ TypeScript ซึ่งอธิบายไว้ในเว็บไซต์ของตนว่า “… JavaScript superset ที่คอมไพล์เป็น JavaScript ธรรมดา” สิ่งที่ฉันเห็นและอ่านเกี่ยวกับภาษาที่ฉันชอบ โดยเฉพาะอย่างยิ่งความจริงที่ว่ามันเรียนรู้ตัวเองได้ดีในการวิเคราะห์แบบคงที่

การวิเคราะห์แบบสแตติกหมายถึงโปรแกรมสามารถดูโค้ดของคุณก่อนที่จะรัน (เช่น เมื่อเป็นสแตติก) และเน้นย้ำถึงปัญหา ไม่จำเป็นต้องชี้ให้เห็นปัญหาเชิงตรรกะ แต่สามารถชี้ไปที่รหัสที่ไม่เป็นไปตามกฎเกณฑ์ต่างๆ

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

หากคุณไม่คุ้นเคยกับ TypeScript ให้พิจารณาโค้ดต่อไปนี้ใน vanilla JavaScript:

 console.log(`${count} players`); let count = 0;

เรียกใช้รหัสนี้และคุณจะได้รับข้อผิดพลาดบางอย่างเช่น:

 ReferenceError: Cannot access uninitialized variable.

สำหรับผู้ที่มีความสามารถด้าน JavaScript เพียงเล็กน้อย สำหรับตัวอย่างพื้นฐานนี้ พวกเขาไม่ต้องการเครื่องมือในการบอกพวกเขาว่าสิ่งต่างๆ จะไม่จบลงด้วยดี

อย่างไรก็ตาม หากคุณเขียนโค้ดเดียวกันนั้นใน TypeScript สิ่งนี้จะเกิดขึ้นในตัวแก้ไข:

การทำงานของ TypeScript
การทำงานของ TypeScript (ตัวอย่างขนาดใหญ่)

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

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

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

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

มีการพิจารณาอย่างถี่ถ้วนเกี่ยวกับตัวเลือกที่ฉันทำ การเลือกสร้างแอปพลิเคชันเป็น Progressive Web Application หมายความว่าฉันจะต้องเข้าใจ Service Workers ในระดับหนึ่ง การใช้ TypeScript จะหมายถึงการแนะนำเครื่องมือสร้างบางประเภท ฉันจะจัดการเครื่องมือเหล่านั้นได้อย่างไร ในอดีต ฉันเคยใช้ NPM เป็น package manager แล้ว Yarn ล่ะ? ควรใช้ Yarn แทนหรือไม่? การมุ่งเน้นประสิทธิภาพอาจหมายถึงการพิจารณาเครื่องมือย่อหรือรวมกลุ่ม เครื่องมืออย่าง webpack ได้รับความนิยมมากขึ้นเรื่อยๆ และจำเป็นต้องได้รับการประเมิน

สรุป

ฉันตระหนักดีถึงความจำเป็นที่จะเริ่มทำภารกิจนี้ พลัง JavaScript ของฉันอ่อนแอและไม่มีอะไรคาดเอวได้มากเท่ากับการพยายามนำทฤษฎีไปปฏิบัติ การตัดสินใจสร้างเว็บแอปพลิเคชันด้วย JavaScript วานิลลาคือการรับบัพติศมาด้วยไฟของฉัน

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

ฉันต้องการเครื่องมือสร้าง ตัวจัดการแพ็คเกจ และต่อมา ต้องใช้ความอดทนอย่างมาก

ในที่สุด ณ จุดนี้คำถามพื้นฐานยังคงอยู่: นี่คือสิ่งที่ฉันสามารถจัดการได้จริงหรือ หรือฉันจะถูกถ่อมตนด้วยความไร้ความสามารถของตัวเอง?

ฉันหวังว่าคุณจะเข้าร่วมในส่วนที่สองกับฉันเมื่อคุณสามารถอ่านเกี่ยวกับเครื่องมือสร้าง รูปแบบการออกแบบ JavaScript และวิธีทำให้บางสิ่ง 'เหมือนแอป' มากขึ้น