Chrome Dev Summit 2014 - มาสร้างแอปด้วย Polymer กัน

ตลอดปีที่ผ่านมา ทีม Polymer ได้ใช้เวลาอย่างมากในการสอนนักพัฒนาซอฟต์แวร์เกี่ยวกับวิธีสร้างองค์ประกอบของตนเอง สิ่งนี้ทําให้เกิดระบบนิเวศที่เติบโตอย่างรวดเร็ว ซึ่งได้รับแรงสนับสนุนอย่างมากจากองค์ประกอบ Core และ Paper ของ Polymer และองค์ประกอบ Brick ที่ทีม Mozilla สร้างขึ้น

เมื่อนักพัฒนาแอปเริ่มคุ้นเคยกับการสร้างองค์ประกอบของตนเองและเริ่มคิดที่จะสร้างแอปพลิเคชัน ก็จะมีคำถามเกิดขึ้นมากมาย เช่น

  • คุณควรจัดโครงสร้าง UI ของแอปพลิเคชันอย่างไร
  • คุณเปลี่ยนผ่านสถานะต่างๆ อย่างไร
  • กลยุทธ์ในการปรับปรุงประสิทธิภาพมีอะไรบ้าง
  • และคุณควรมอบประสบการณ์การใช้งานแบบออฟไลน์อย่างไร

สำหรับ Chrome Dev Summit เราพยายามตอบคำถามเหล่านี้ด้วยการสร้างแอปพลิเคชันรายชื่อติดต่อขนาดเล็กและวิเคราะห์กระบวนการที่เราใช้ในการสร้างแอปพลิเคชัน สิ่งที่เราพบมีดังนี้

โครงสร้าง

การแยกแอปพลิเคชันออกเป็นชิ้นส่วนแบบโมดูลที่รวมกันและนํามาใช้ซ้ำได้คือหลักการสําคัญของ Web Components องค์ประกอบ core-* และ paper-* ของ Polymer ช่วยให้เริ่มต้นด้วยชิ้นส่วนเล็กๆ ได้ง่าย เช่น paper-toolbar และ paper-icon-button

Polymer ช่วยให้นักพัฒนาแอปสร้างแอปพลิเคชันได้เร็วขึ้น

และด้วยความสามารถในการจัดองค์ประกอบ คุณจึงรวมองค์ประกอบต่างๆ เข้าด้วยกันเพื่อสร้างสคาฟเฟิลดของแอปพลิเคชันได้

Polymer ช่วยให้คอมโพเนนต์เว็บทำงานได้ดีขึ้น

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

องค์ประกอบหนึ่งที่เหมาะอย่างยิ่งสำหรับการจัดการเนื้อหาจำนวนมากคือ core-list

Polymer ช่วยให้คอมโพเนนต์เว็บทำงานได้ดีขึ้น

core-list สามารถเชื่อมต่อกับแหล่งข้อมูล (โดยทั่วไปคืออาร์เรย์ของออบเจ็กต์) และสำหรับแต่ละรายการในอาร์เรย์ ระบบจะประทับอินสแตนซ์ของเทมเพลต ในเทมเพลต คุณสามารถใช้ความสามารถของระบบการเชื่อมโยงข้อมูลของ Polymer เพื่อเชื่อมต่อเนื้อหาได้อย่างรวดเร็ว

ทรานซิชัน

เมื่อออกแบบและติดตั้งใช้งานส่วนต่างๆ ของแอปแล้ว ขั้นตอนถัดไปคือการหาวิธีไปยังส่วนต่างๆ ของแอป

แม้ว่าจะยังเป็นองค์ประกอบเวอร์ชันทดลอง แต่ core-animated-pages มีระบบภาพเคลื่อนไหวแบบปลั๊กอินที่ใช้เพื่อเปลี่ยนระหว่างสถานะต่างๆ ในแอปพลิเคชันได้

การ์ดรายงาน Polymer ต้องได้รับการปรับปรุง

แต่ภาพเคลื่อนไหวเป็นเพียงครึ่งหนึ่งของปัญหา แอปพลิเคชันต้องรวมภาพเคลื่อนไหวเหล่านั้นเข้ากับเราเตอร์เพื่อจัดการ URL อย่างเหมาะสม

ใน Web Components การกำหนดเส้นทางมี 2 รูปแบบ ได้แก่ แบบบังคับและแบบประกาศ การรวม core-animated-pages เข้ากับวิธีการใดวิธีการหนึ่งอาจใช้ได้ ทั้งนี้ขึ้นอยู่กับความต้องการของโปรเจ็กต์

รูทเตอร์แบบบังคับ (เช่น Director ของ Flatiron) สามารถรอเส้นทางที่ตรงกันและสั่งให้ core-animated-pages อัปเดตรายการที่เลือก

การ์ดรายงาน Polymer ต้องได้รับการปรับปรุง

ซึ่งมีประโยชน์ในกรณีที่คุณต้องทํางานบางอย่างหลังจากที่เส้นทางจับคู่และก่อนที่ส่วนถัดไปจะเปลี่ยน

ในทางกลับกัน เราเตอร์แบบประกาศ (เช่น app-router) สามารถรวมการกำหนดเส้นทางและ core-animated-pages เข้าด้วยกันเป็นองค์ประกอบเดียวได้ ทำให้การจัดการทั้ง 2 อย่างมีประสิทธิภาพมากขึ้น

การ์ดรายงาน Polymer ต้องได้รับการปรับปรุง

หากต้องการการควบคุมที่ละเอียดยิ่งขึ้น ให้ดูที่ไลบรารีอย่าง more-routing ซึ่งสามารถใช้ร่วมกับ core-animated-pages โดยใช้การเชื่อมโยงข้อมูลและอาจให้สิ่งที่ดีที่สุดทั้ง 2 อย่าง

ประสิทธิภาพ

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

การเพิ่มประสิทธิภาพที่ง่ายดายคือการโหลด polyfill ของ Web Components แบบมีเงื่อนไข

การ์ดรายงาน Polymer ต้องได้รับการปรับปรุง

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

<script>
    if ('import' in document.createElement('link')) {
    // HTML Imports are supported
    } else {
    document.write(
        '<script src="bower_components/webcomponentsjs/HTMLImports.min.js"><\/script>'
    );
    }
</script>

นอกจากนี้ คุณยังจะได้รับประโยชน์อย่างมากจากเครือข่ายจากการเรียกใช้การนําเข้า HTML ทั้งหมดผ่านเครื่องมืออย่าง Vulcanize

การ์ดรายงาน Polymer ต้องได้รับการปรับปรุง

Vulcanize จะต่อข้อมูลนำเข้าเข้าด้วยกันเป็นกลุ่มเดียว ซึ่งจะช่วยลดจำนวนคำขอ HTTP ที่แอปส่งได้อย่างมาก

ออฟไลน์

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

เมื่อเร็วๆ นี้ Jake Archibald ได้เผยแพร่ตำราสูตร Service Worker ที่ยอดเยี่ยม แต่เราจะแนะนำวิธีเริ่มต้นใช้งานคร่าวๆ ให้คุณ

การติดตั้ง Service Worker นั้นง่ายมาก สร้างไฟล์ worker.js และลงทะเบียนเมื่อแอปพลิเคชันบูตขึ้น

การ์ดรายงาน Polymer ต้องได้รับการปรับปรุง

คุณต้องวาง worker.js ที่รูทของแอปพลิเคชันเพื่อให้สามารถขัดจังหวะคําขอจากเส้นทางใดก็ได้ในแอป

ในตัวแฮนเดิลการติดตั้งของเวิร์กเกอร์ ฉันแคชทรัพยากรจำนวนมาก (รวมถึงข้อมูลที่ขับเคลื่อนแอป)

การ์ดรายงาน Polym ควรได้รับการปรับปรุง

วิธีนี้ช่วยให้แอปของฉันมอบประสบการณ์การใช้งานสำรองอย่างน้อยให้แก่ผู้ใช้หากเข้าถึงแอปแบบออฟไลน์

ไปต่อเลย

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