Fanboi Channel

มิตรสหายนักพัฒนาซอฟต์แวร์ท่านหนึ่ง

Last posted

Total of 364 posts

287 Nameless Fanboi Posted ID6:th.rM.5QXX

ตั้งแต่เห็น Frontend ใหม่ที่พยายามจะเอาชนะ React รู้สึกว่าตัวนี้ SolidJS น่าเชียร์สุดแล้ว
เห็น Vue, Svelte มา สิ่งนึงที่ผมไม่ชอบ (แต่คาดว่าคนส่วนใหญ่ชอบ) คือ มันมีความพยายามในการเบลอเส้นระหว่าง Primitive Variable กับ Reactivity โดยการบอกว่าถ้ามีตัวแปรตัวนึง ชื่อ x แล้วเราเอา x ไปใส่ใน template engine แล้วเราสามารถมอง x เป็นเหมือน Primitive ที่ใช้ได้เหมือนกันเด๊ะๆ เช่น x++ ไปเลย เดี๋ยว template engine จะไล่ตามเก็บให้เอง
(ซึ่งตรงนี้ส่วนตัวผมชอบ Vue มากกว่าที่อย่างน้อยมันพยายามจะบอกว่าช่วย wrap พวกนี้ไว้ใน class หน่อย)
คือการพยายามเบลอเส้นตรงนี้มันอาจจะทำให้ Learning curve น้อยลง เพราะเราสามารถคิดว่าก็แค่ variable ธรรมดาเองได้ แต่มันทำให้สองคอนเซปต์ คือ real primitive variable กับ reactive variable มันรวมกันแยกจากกันไม่ออก ทำความเข้าใจการทำงานได้ยากขึ้น
ส่วน React มันบังคับว่าต้องเปลี่ยนผ่าน setState ซึ่งมันทำให้แยกออกง่ายขึ้นว่าทำไมถึงเกิด reactivity ได้ อ้อ เพราะการเซ็ตมันต้องเซ็ตผ่านตัวนี้นี่เอง แล้วทุกตัวแปรเป็น Immutable นี่เอง ทำ API แบบนี้มันอาจจะเพิ่ม Learning curve ในช่วงแรกเพราะมันไม่คุ้นเคย แต่มันไม่ทำให้ผมต้องบอกคนอื่นว่า "จงศรัทธา ใช้ count++ ไปซะ เดี๋ยวมันทำ Magic ให้เอง" ระยะยาวผมว่ามันเข้าใจง่ายกว่าแถม extensible กว่าด้วย
ผมเชื่อในหลัก Simple > Easy ความไม่เอาคอนเซปต์สองอย่างมาจับรวมจนเป็นยำเนื้อแปลกๆ SImple คือแต่ละอย่างไม่ผสมกัน ทำความเข้าใจแต่ละส่วนของระบบได้ง่ายเพราะมีระเบียบชัดเจน ส่วน Easy คือเริ่มง่าย ผมก็ชอบระบบที่ Simple มากกว่าถึงแม้อาจจะต้องเริ่มเรียนเยอะกว่า
SolidJS นี่ก็ออกแบบด้วย Philosophy แบบเดียวกัน วิธีที่ใช้คือทุกๆ Reactive ต้องเรียกผ่าน function เสมอ ซึ่งเพิ่มไปทั้งทั้งจังหวะดึงมาใช้และจังหวะ set ซึ่งโอเคมากๆ (และตรงนี้เปิดโอกาสให้ใช้ Primitive set ได้ด้วยโดยที่ยังชัดเจนว่าทำไมถึงใช้ได้ เพราะคุณเข้าถึง variable ตรงๆ ไม่ได้ถ้าไม่ผ่าน function) ทำให้ผมไม่รู้สึกแหม่งๆ กับตัวนี้ ดังที่เขาบอกไว้ในเว็บเลย
"Simple is better than easy. A lesson that comes hard for fine-grained reactivity. Explicit and consistent conventions even if they require more effort are worth it. The aim is to provide minimal tools to serve as the basis to build upon."
(ขอจิกกัดหน่อยว่าตอน Rich Harris คนสร้าง Svelte โฆษณาว่า เราเชื่อมกับ Primitive เลยไม่ต้องเรียนรู้อะไรเพิ่ม คุณแค่ count++ มาเดี๋ยว Svelte ฟังให้เอง นี่สิคือ Reactivity ที่แท้จริงไม่เหมือนใน React ผมคิดในใจแหละว่านั่นแหละคือ Blur Magic ที่แท้จริง และส่วนตัวในขณะที่คนฟังเฮว่าเจ๋งมากๆ ผมน่ะรู้สึกว่า that's not a feature นะ แต่ก็เข้าใจได้ว่าทำไมคนชอบ มันเริ่มง่ายกว่าจริงแหละ)
ฟีเจอร์ของ SolidJS ที่ดีกว่า React คือเวลาใช้พวก effect ไม่ต้อง track dependency จัดการได้ในตัวเองไม่ต้องให้เราบอก สามารถทำ bundle size น้อยกว่า ทำงานเร็วกว่า สามารถแยกออกได้ในตัวเองว่าต้อง re-render เยอะขนาดไหน และก็ตัว State ต่างๆ สามารถอยู่นอก Component ได้ตราบใดที่อยู่ใน reactive scope (ทำให้ไม่จำเป็นต้องใช้ Store เลย แต่ก็มี API สำหรับการสร้าง Store มาให้)
ถ้าไม่นับพวกแยกภาษาใหม่ไปเลยอย่าง Elm ผมว่ามันเป็น Frontend ที่เข้าใจ Reactivity และออกแบบ Fundamental API มาดีตรงกับ Philosophy ที่ผมใช้เขียนโปรแกรม และทำหลายอย่างได้ดีกว่า React ก็เหลือแต่ ecosystem ละจะไปได้ดีขนาดไหน

Be Civil — "Be curious, not judgemental"

  • FAQs — คำถามที่ถามบ่อย (การใช้บอร์ด การแบน ฯลฯ)
  • Policy — เกณฑ์การใช้งานเว็บไซต์
  • Guidelines — ข้อแนะนำในการใช้งานเว็บไซต์
  • Deletion Request — แจ้งลบและเกณฑ์การลบข้อความ
  • Law Enforcement — แจ้งขอ IP address

All contents are responsibility of its posters.