2 คะแนน โดย GN⁺ 2025-11-04 | 3 ความคิดเห็น | แชร์ทาง WhatsApp
  • แม้จะปรับแต่ง Nextcloud บนเซิร์ฟเวอร์ส่วนตัวแล้ว สาเหตุที่ยังตอบสนองช้าคือโครงสร้างการโหลด JavaScript มากเกินไป
  • ระหว่างการโหลดหน้าแรก มีการดาวน์โหลด JavaScript 15~20MB และแม้หลังบีบอัดแล้วยังเหลือราว 4~5MB ซึ่งยังหนักเกินไป
  • สคริปต์ของแต่ละแอปมีขนาดใหญ่มาก เช่น core-common.js (4.71MB), NotificationsApp.chunk.mjs (1.06MB), แอป Calendar 5.94MB, แอป Files 18.8MB, แอป Notes 20.91MB
  • ด้วยโครงสร้างแบบนี้ แม้แต่บน iPhone 13 mini ก็ยังมีดีเลย์ 5~10 วินาทีในการเปิดแอป Tasks
  • แม้จะเปลี่ยนบางฟังก์ชันไปใช้ Vikunja (JS 1.5MB) และ Immich แทน แต่ก็ยังแทนที่ทั้งหมดได้ยากเพราะความสามารถแบบบูรณาการของ Nextcloud

สาเหตุของประสิทธิภาพที่ลดลงของ Nextcloud

  • Nextcloud รวมฟังก์ชันหลากหลายไว้ด้วยกัน เช่น ไฟล์ ปฏิทิน รายชื่อติดต่อ โน้ต งาน และรูปภาพ แต่ ความเร็วที่ผู้ใช้รับรู้นั้นช้า
    • แม้อยู่ในสภาพแวดล้อมที่ฮาร์ดแวร์มีประสิทธิภาพเพียงพอ ก็ยังตอบสนองช้า
  • จากการวิเคราะห์ด้วยเครื่องมือสำหรับนักพัฒนา พบว่า สาเหตุหลักของความหน่วงคือปริมาณ JavaScript ที่มากเกินไป
    • ตอนโหลดหน้าแรกมีการดาวน์โหลด JavaScript 15~20MB
    • แม้จะส่งแบบบีบอัดแล้วก็ยังอยู่ที่ระดับ 4~5MB ซึ่งใหญ่มากเมื่อเทียบกับเว็บแอปทั่วไป (1MB)
  • แม้จะมีแคชของเบราว์เซอร์ แต่ก็ยังต้อง รันโค้ดจำนวนมากทุกครั้งที่เข้าใช้งาน ทำให้การโหลดล่าช้า

ขนาดของ JavaScript bundle หลัก

  • core-common.js : 4.71MB ทำหน้าที่เป็นฟังก์ชันร่วมสำหรับหลายแอป
  • NotificationsApp.chunk.mjs : 1.06MB
  • แอป Calendar: เพียงแค่มุมมองปฏิทินพื้นฐานก็ต้องใช้ 5.94MB
    • ในสภาพเครือข่ายที่ช้า อาจเกิดความล่าช้าในการโหลดเกิน 30 วินาที
  • แอป Files: มีสคริปต์จำนวนมาก เช่น EditorOutline (1.77MB), previewUtils (1.17MB), index (1.09MB), emoji-picker (0.9MB)
    • รวมทั้งหมด 18.8MB และในสภาพแวดล้อมจริงอาจต้องรอโหลดเกิน 1 นาที
  • แอป Notes: เฉพาะ notes-main.js ก็มีขนาด 4.36MB และรวมทั้งหมดอยู่ที่ 20.91MB

ผลกระทบต่อประสบการณ์ผู้ใช้

  • แม้แต่ตอนเปิด แอป Tasks ก็ยังมีดีเลย์ 5~10 วินาที
    • ตัวอย่าง: เวลาเปิดรายการซื้อของในร้านค้า ก็ไม่แสดงขึ้นมาทันที
  • สัดส่วนระหว่างฟังก์ชันกับขนาด bundle สูงผิดปกติ ทำให้เกิด ความไม่สมดุลระหว่างความสามารถกับประสิทธิภาพ
  • ด้วยโครงสร้างของ Nextcloud ที่มีไลบรารีและเครื่องมือส่วนกลางจำนวนมาก จึงเกิด ประสิทธิภาพที่ลดลงเพื่อแลกกับประสบการณ์แบบรวมศูนย์

การใช้งานบริการทางเลือก

  • บางฟังก์ชันถูกแยกไปใช้ Vikunja (จัดการงาน, JS 1.5MB) และ Immich (จัดการรูปภาพ)
    • Vikunja อาจไม่สมบูรณ์แบบ แต่ด้วยขนาด JS ที่เล็กกว่า จึงให้ ความเร็วที่รู้สึกได้ดีกว่า
  • อย่างไรก็ตาม ด้วย ความเป็นแพลตฟอร์มแบบบูรณาการและความสะดวกในการใช้งาน ของ Nextcloud จึงยากที่จะทดแทนได้ทั้งหมด

บทสรุปและมุมมองที่เปลี่ยนไป

  • โครงสร้างปัจจุบันของ Nextcloud อาจมีข้อจำกัดในโลกความจริง เช่น เหตุผลที่สมควรหรือการขาดแคลนบุคลากร
  • ถึงอย่างนั้น การถดถอยของประสบการณ์ผู้ใช้และการเข้าถึง ก็ยังเป็นปัญหาที่ชัดเจน
  • บทความของผู้เชี่ยวชาญด้าน web performance อย่าง Alex Russell ทำให้ตระหนักถึงความสำคัญของ web performance และปัญหา ความละเลยในการดูแลเรื่องประสิทธิภาพและการเข้าถึง ของทีมพัฒนา
  • ในการพัฒนาเว็บแอป ควรคำนึงถึงปัญหา performance inequality ด้วย

3 ความคิดเห็น

 
ndrgrd 2025-11-04

มันก็ช้าเฉย ๆ ไม่ใช่แค่ไคลเอนต์ที่ช้า แต่ฝั่งเซิร์ฟเวอร์ก็ช้าด้วย
บนเครื่อง 8745HS แค่สร้างภาพขนาดย่อของไฟล์ PDF ไม่กี่ร้อยไฟล์ก็ใช้เวลาหลายชั่วโมงแล้วยังไม่เสร็จเลย
ใช้ไฟล์เซิร์ฟเวอร์ตัวอื่นอะไรก็ยังดีกว่า ถ้าไคลเอนต์เป็น Windows ก็ใช้ smb ส่วนอย่างอื่นใช้ WebDAV server ผ่าน rclone หรือ dufs จะดีกว่าครับ

 
yeorinhieut 2025-11-05

copyparty ดีเลยครับ

 
GN⁺ 2025-11-04
ความคิดเห็นบน Hacker News
  • ฉันอยากจะชอบ Nextcloud มาก ๆ คิดว่าการมีอยู่ของมันก็น่าทึ่งแล้ว
    แต่ถึงภายนอกจะดูเหมือนทำงานได้ดี บางครั้งก็เกิด ข้อผิดพลาดที่กู้คืนไม่ได้ แบบพังไปเลย
    เคยพยายามสำรองรูปครอบครัวอัตโนมัติด้วยแอป iOS/Android แต่แอป iOS บางครั้งขึ้นข้อผิดพลาด “locked webdav” หรือไม่ก็ซิงก์ค้างไปเฉย ๆ
    สุดท้ายเลยต้องอัปโหลดรูป 80GB ใหม่ทั้งหมดตั้งแต่ต้น
    มันไม่เสถียรพอสำหรับให้ครอบครัวใช้งาน จึงต้องการทางเลือกที่เชื่อถือได้ ซึ่งในทางปฏิบัติก็แทบไม่มีอะไรนอกจาก iCloud

    • แอป iOS เคยตัดการเชื่อมต่อบัญชีตอนทำงานเบื้องหลังจน ข้อมูลสูญหาย
      ฉันวางไฟล์ผ่านการเชื่อมกับแอป Files แต่ไม่มีการซิงก์และข้อมูลก็หายไปโดยไม่มีคำเตือนใด ๆ
    • ช่วงหลังมีทางเลือกขนาดเบามากที่คนทำขึ้นชื่อ copyparty
      copyparty GitHub — มีเฉพาะฟีเจอร์ที่จำเป็นและไม่มีส่วนเกินที่ไม่จำเป็น
    • ถ้าใช้เพื่อสำรองรูป Immich ให้ประสบการณ์ที่ดีกว่ามาก
      แต่ถ้าจะใช้แทน Dropbox ก็ยังไม่มีตัวเลือกที่เหมาะจริง ๆ
    • ถ้าเป็นเรื่องรูปภาพ ฉันคิดว่า Immich ดีที่สุด
    • ฉันเปลี่ยนการอัปโหลดบนมือถือไปใช้ FolderSync แล้ว ซึ่งทำงานได้สมบูรณ์แบบ
      แอปทางการมีบั๊กเยอะ แต่ฝั่งเซิร์ฟเวอร์เสถียรดี
  • Nextcloud ช้าเพราะมีการเรียก JavaScript มากเกินไป
    การรีเฟรชหน้าปฏิทินหนึ่งครั้งทำให้เกิด network call 124 ครั้ง และในนั้นมี 31 ครั้งที่ไม่ได้แคช
    แต่ละปฏิทินใช้เวลามากกว่า 30ms ทำให้ยิ่งมีปฏิทินมาก ความหน่วงก็ยิ่งสะสม
    แม้ในเครือข่ายภายในก็ยังใช้เวลา 1 วินาที และในสภาพแวดล้อม 4G ใช้มากกว่า 33 วินาที โครงสร้างการออกแบบเองก็ไม่มีประสิทธิภาพ

    • มีไฟล์ JS มากเกินไป และมี AJAX request มากเกินไป
      โครงสร้างแบบ REST ลักษณะนี้บนเครือข่ายมือถือจะมี latency จากการรับส่งไปกลับสูง จึงช้าเป็นธรรมดา
      ฉันคิดว่าถึงเวลาใช้ WebSocket แทน REST แล้ว
    • เมื่อก่อน Nextcloud Calendar ดีมากจริง ๆ แต่ หลังรีดีไซน์ก็พังหมด
      การเพิ่มหรือแก้ไขนัดหมายไม่สะดวก และ UI ก็ดูเด็กลงด้วย ไม่มีเว็บปฏิทินโอเพนซอร์สที่ใช้งานได้ดีจริง ๆ
    • ถ้าจะแก้ปัญหาแบบนี้ โปรโตคอลการซิงก์ข้อมูล ต้องดีขึ้น
      แนวทางแบบ Electric SQL น่าสนใจ
      และข้อเสนอปรับปรุง JS อย่าง TC39 import proposal ก็อาจช่วยได้
  • ฉันเคยดูแล ซอฟต์ฟอร์ก ของ Nextcloud มาก่อน แต่โครงสร้างพื้นฐานมันซับซ้อนเกินไป
    แค่ใส่แพตช์ปรับปรุงประสิทธิภาพไม่กี่ตัว ความเร็วในการเรนเดอร์ตัวจัดการไฟล์ก็เร็วขึ้นหลายเท่าแล้ว
    แต่โค้ดเบสเป็น โครงสร้างแบบซ้อนเลเยอร์ทับกันไปเรื่อย ๆ จนไม่น่าไว้วางใจ
    สุดท้ายฉันก็เลิกทำโปรเจกต์นี้ไป ความซับซ้อนแบบนี้ดูเหมือนจะเป็นปัจจัยที่ค้ำระบบนิเวศของผู้ให้บริการโฮสติ้งไว้

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

    • ถ้า JS เยอะเกินไป overhead สะสมจากการ parse, execute, DOM manipulation ก็จะสูงมาก
      เมื่อก่อนแค่เกิน 200KB ก็ต้องตรวจเรื่อง optimization แล้ว แต่ Nextcloud มีถึง 15MB
    • สาเหตุอาจเป็นเพราะการแคชทำงานได้ไม่ดี หรือมี การ preload ที่ไม่จำเป็น
  • ฉันใช้ Nextcloud สำรองรูปครอบครัวมา 7 ปีแล้ว
    มันปกป้องความเป็นส่วนตัวได้ดีและค่อนข้างเสถียร แต่ ไม่แนะนำอย่างยิ่ง ถ้าจะใช้แทน Google Docs
    การอัปโหลดไฟล์ใหญ่หรือการโหลด thumbnail ยังไม่เสถียรและช้า
    ถึงอย่างนั้นก็ไม่มีตัวเลือกอื่น และฉันก็ไม่อยากฝากข้อมูลไว้กับ AI ของบริษัทใหญ่
    อยากให้คนในครอบครัวใช้มันอย่างจริงจังมากกว่านี้

    • ฉันสงสัยว่า Immich จะเป็นทางเลือกนั้นได้ไหม ได้ยินมาว่ามันเก่งเรื่องจัดการรูปและวิดีโอ
  • ฉันเคยใช้ self-hosted file manager มาหลายตัว
    ไล่มาตั้งแต่ Ajaxplorer → Pydio → Nextcloud → FileRun และพอใจ FileRun มากที่สุด
    มันเร็ว เสถียร และทำงานได้ดีบนเบราว์เซอร์มือถือด้วย
    ตอนนี้เป็นแบบเสียเงินแล้ว แต่ก็คุ้มค่า
    copyparty ก็เบาและเร็ว แต่ไม่ค่อยเป็นมิตรกับผู้ใช้ทั่วไป
    ฉันคิดถึงฟีเจอร์ “file request” ของ FileRun

    • ฉันชอบ filebrowser ถ้าใช้คู่กับ Syncthing ก็จะเหมือน Dropbox ขนาดย่อม
      filebrowser GitHub
      filebrowser-docker
    • ใน copyparty ก็สามารถสร้างลิงก์อัปโหลดคล้ายกันได้ด้วยฟีเจอร์ “shares(--shr)”
      ลิงก์เดโม
    • copyparty รองรับแค่ การซิงก์ทางเดียว จึงแทน Nextcloud ได้ยาก
      ฉันกำลังคิดจะใช้ร่วมกับ Syncthing แต่ก็กังวลเรื่องภาระ CPU
  • Nextcloud ช้าและใหญ่เทอะทะ แต่เสถียร
    บริษัทขนาด 8 คนของเราใช้มาหลายปีโดยไม่มีปัญหา
    เว็บแอปช้าจนแทบไม่ค่อยใช้ และใช้เดสก์ท็อปซิงก์ไคลเอนต์เป็นหลัก
    ปลั๊กอินยืนยันตัวตนด้วย IMAP มีประโยชน์มาก ทำให้จัดการผู้ใช้ได้ง่าย

    • หลายคนบอกว่าเว็บแอปช้า แต่เว็บแอปก็มีข้อดีหลายอย่าง
      สามารถปรับแต่งได้อย่างอิสระด้วย uBlock, userstyle, userscript เป็นต้น
  • เมื่อก่อนฉันเคยพบ ช่องโหว่ในตัวดู PDF ของ Nextcloud แล้วรายงานไป
    ปัญหาคือมันรวมตัวดู PDF แบบเก่าที่ทำด้วย JS ไว้ด้วย และตอนอายุ 16 ฉันได้เงิน $100
    บทความในบล็อกของฉัน

    • ฉันก็เคยพยายามแสดง PDF ในแอปภายใน div เหมือนกัน แต่สุดท้ายก็ต้องใช้ pdf.js
  • หลายคนไม่พอใจกับโปรเจกต์โอเพนซอร์ส แต่ มีน้อยคนที่ลงมือปรับปรุงเอง
    ฉันรัก Nextcloud แม้มันจะช้า แต่ฉันเป็นเจ้าของข้อมูลของตัวเอง และเพราะเป็น โค้ด AGPL จึงแก้ไขเองได้ด้วย
    ใช้งานฟรีได้ และยังเพิ่มส่วนขยายได้เหมือน “เลือกซื้อ”
    ฉันใช้มานานกว่า 6 ปีโดยไม่มีปัญหาใหญ่ และอิสรภาพแบบนี้ยอดเยี่ยมจริง ๆ
    มันไม่สมบูรณ์แบบ แต่ก็เป็นโปรเจกต์ที่น่าขอบคุณที่มีอยู่

  • ข้อดีของ Nextcloud คือ สามารถจัดการเครื่องมือทำงานร่วมกันทั้งหมดได้ในแพลตฟอร์มเดียว
    ทั้งไฟล์ ปฏิทิน โน้ต ออฟฟิศ รูปภาพ Talk และประสบการณ์ที่รวมเป็นหนึ่งเดียว
    แพ็กเกจ AIO ช่วยแก้ปัญหาเรื่องอัปเดตและเสถียรภาพไปได้มาก
    แต่เพราะมันอยู่บน PHP ประสิทธิภาพจึงด้อยกว่า และ UI ก็น่าจะขัดเกลาให้เหมือน Synology DSM มากกว่านี้

    • เปลี่ยนภาษาอย่างเดียวไม่ได้ทำให้เร็วขึ้นมากนัก
      ปัญหาคือ โครงสร้าง I/O ที่ไม่มีประสิทธิภาพ และการเรียก XHR จำนวนมาก
      PHP เข้าถึงง่าย จึงเอื้อต่อการมีส่วนร่วมจากคอมมูนิตี้
    • เผื่อข้อมูลไว้ Owncloud Infinite Scale คือเวอร์ชันที่เขียนใหม่ด้วย Go
      เอกสารทางการ — แต่พึ่งพา Docker มากและมีข้อจำกัดด้านสภาพแวดล้อม