ความแตกต่างระหว่างการเขียนโปรแกรมฝั่งเซิร์ฟเวอร์และฝั่งไคลเอ็นต์คืออะไร


104

ฉันเคยเห็นคำถาม (ส่วนใหญ่เกี่ยวกับ Stack Overflow) ซึ่งขาดความรู้พื้นฐานนี้ ประเด็นของคำถามนี้คือการให้ข้อมูลที่ดีสำหรับผู้ที่กำลังมองหาและผู้ที่อ้างอิงถึง

ในบริบทของการเขียนโปรแกรมเว็บความแตกต่างระหว่างการเขียนโปรแกรมฝั่งเซิร์ฟเวอร์และการเขียนโปรแกรมฝั่งไคลเอ็นต์คืออะไร ภาษาใดที่คุณใช้และแต่ละภาษาใช้เมื่อใด


5
การเขียนโปรแกรมฝั่งเซิร์ฟเวอร์คือการเขียนโค้ดที่ทำงานบนเซิร์ฟเวอร์โดยใช้ภาษาที่เซิร์ฟเวอร์รองรับ (เช่น Java, PHP, C # เป็นไปได้ที่จะเขียนโค้ดที่รันบนฝั่งเซิร์ฟเวอร์ใน JavaScript) การเขียนโปรแกรมฝั่งไคลเอ็นต์คือการเขียนโค้ดที่จะทำงานบนไคลเอนต์และทำในภาษาที่สามารถเรียกใช้งานโดยเบราว์เซอร์เช่น JavaScript
FrustratedWithFormsDesigner

1
อันนี้ค่อนข้างดี: programmers.stackexchange.com/questions/138561/…
JeffO

7
ฉันคิดว่าคุณควรรวมไว้ในคำถามที่คุณอ้างถึงในการเขียนโปรแกรมเว็บเท่านั้นเนื่องจากในรูปแบบปัจจุบันคำตอบยังไม่สมบูรณ์ ตัวอย่างเช่นไม่จำเป็นต้องทำการสื่อสารกับเซิร์ฟเวอร์ไคลเอ็นต์ใน HTTP; ฝั่งไคลเอ็นต์อาจไม่ใช้เบราว์เซอร์เป็นต้น
K.Steff

@KSteff คุณสามารถแก้ไขคำถามของฉันเพื่อเพิ่มได้
Madara Uchiha

2
เมื่อเว็บยังเด็กมันเป็นการดีที่จะใช้ตรรกะของคุณยกของหนัก ๆ บนฝั่งเซิร์ฟเวอร์ (java / c ++) และทำให้ตรรกะของเบราว์เซอร์เบาบางลงโดยเจตนา - โดยเฉพาะอย่างยิ่งเมื่อเบราว์เซอร์กลับมาไม่พร้อม ตอนนี้การเน้นนี้กลับด้านเช่นเดียวกับเครื่องมือที่ใช้เบราว์เซอร์ (Angular.js) ซึ่งเป็นที่ ๆ ส่วนใหญ่ของเว็บแอพพลิเคชั่นการยกของหนักขึ้นอยู่กับตรรกะ (ห่างจากตรรกะด้านเซิร์ฟเวอร์ที่ถูกปล้นมากขึ้น) สิ่งนี้ได้รับการอำนวยความสะดวกโดยเบราว์เซอร์ที่มีความแข็งแรงทางอุตสาหกรรมที่ทันสมัยซึ่งทำงานด้วยเครื่องมือจาวาสคริปต์ที่รวดเร็วมาก
Scott Stensland

คำตอบ:


123

พื้นหลัง

การพัฒนาเว็บนั้นเกี่ยวกับการสื่อสาร ในกรณีนี้การสื่อสารระหว่างสอง (2) ฝ่ายผ่านโปรโตคอล HTTP:

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

การเขียนโปรแกรมของแต่ละด้านหมายถึงโค้ดที่ทำงานที่เครื่องเฉพาะเซิร์ฟเวอร์หรือไคลเอนต์

ตัวอย่างพื้นฐาน

  1. ผู้ใช้เปิดเว็บเบราว์เซอร์ของเขา (คนไคลเอนต์ )
  2. ผู้ใช้เรียกดูhttp://google.com
  3. ไคลเอนต์ (ในนามของผู้ใช้ ) ส่งการร้องขอไปยังhttp://google.com (คนเซิร์ฟเวอร์ ) สำหรับหน้าบ้านของพวกเขา
  4. เซิร์ฟเวอร์แล้วยอมรับคำขอและการตอบกลับลูกค้าที่มีข้อมูล meta-บางคน (ที่เรียกว่าหัว ) ตามด้วยแหล่งที่มาของหน้าเว็บ
  5. ไคลเอ็นต์แล้วได้รับต้นฉบับของหน้าและทำให้มันกลายเป็นเว็บไซต์ที่สามารถดูได้ของมนุษย์
  6. ผู้ใช้ประเภทStack Overflowในแถบการค้นหาและเครื่องรีดEnter
  7. ไคลเอ็นต์ส่งข้อมูลนั้นไปยังเซิร์ฟเวอร์
  8. เซิร์ฟเวอร์ประมวลผลว่าข้อมูลและตอบกลับด้วยการจับคู่หน้าผลการค้นหา
  9. ไคลเอนต์อีกครั้งหนึ่งที่แสดงผลหน้าสำหรับผู้ใช้เพื่อดู

การเขียนโปรแกรม

การเขียนโปรแกรมฝั่งเซิร์ฟเวอร์

การเขียนโปรแกรมฝั่งเซิร์ฟเวอร์เป็นชื่อทั่วไปสำหรับชนิดของโปรแกรมที่มีการทำงานบนเซิร์ฟเวอร์

การใช้ประโยชน์

  • ประมวลผลอินพุตของผู้ใช้
  • รวบรวมหน้า
  • โครงสร้างการใช้งานเว็บ
  • ดำเนินการกับที่เก็บข้อมูลถาวร (SQL, ไฟล์)

ภาษาตัวอย่าง

  • PHP
  • หลาม
  • ASP.Net ใน C #, C ++ หรือ Visual Basic
  • เกือบทุกภาษา (C ++, C #, Java) สิ่งเหล่านี้ไม่ได้ออกแบบมาเฉพาะสำหรับงาน แต่ตอนนี้มักจะใช้สำหรับบริการเว็บระดับแอปพลิเคชัน

การเขียนโปรแกรมฝั่งไคลเอ็นต์

เช่นเดียวกับฝั่งเซิร์ฟเวอร์การเขียนโปรแกรมฝั่งไคลเอ็นต์เป็นชื่อของโปรแกรมทั้งหมดที่ทำงานบนไคลเอนต์

การใช้ประโยชน์

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

ตัวอย่างภาษา

  • JavaScript (ส่วนใหญ่)
  • HTML *
  • CSS *
  • ภาษาใด ๆ ที่ทำงานบนอุปกรณ์ไคลเอนต์ที่โต้ตอบกับบริการระยะไกลเป็นภาษาฝั่งไคลเอ็นต์

* HTML และ CSS ไม่ใช่ "ภาษาการเขียนโปรแกรม" ต่อการค้นหา พวกเขาจะมาร์กอัปไวยากรณ์โดยที่ไคลเอ็นต์แสดงผลหน้าสำหรับผู้ใช้


8
+1 สำหรับคำตอบที่ดีพร้อมตัวอย่างของการใช้งาน! เพียงเพื่อ nitpick: HTML และ CSS ไม่ใช่ภาษาโปรแกรมจริงดังนั้นจึงไม่ควรเปรียบเทียบกับ "PHP, ASP และเกือบทุกภาษา (C ++, C #, Java)" ActionScript อาจเป็นอีกตัวอย่างที่ดีของภาษาฝั่งไคลเอ็นต์
FrustratedWithFormsDesigner

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

3
ฉันจะเพิ่มความจริงที่ว่าสภาพแวดล้อมเซิร์ฟเวอร์มีการควบคุมมากขึ้น คุณไม่รู้ว่าลูกค้าคืออะไร นอกจากนี้ยังมีข้อกังวลด้านความปลอดภัย (สำหรับทั้งสองฝ่าย) เมื่อทำสิ่งต่าง ๆ กับลูกค้า
หิน

1
ดังนั้นเพิ่มมันรู้สึกฟรี
Madara Uchiha

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

27

ในคำพูดของคนธรรมดา:

ที่นี่ฉันจะพูดคุยเกี่ยวกับการเขียนโปรแกรมเว็บเท่านั้น

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

ภารกิจหลักคือ:

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

คนอยู่ในความดูแลของการเขียนโปรแกรมส่วนหน้าต้องรู้ :

  • จาวาสคริปต์
  • CSS
  • HTML
  • การออกแบบกราฟิกขั้นพื้นฐาน
  • อาแจ็กซ์
  • อาจจะเป็น Flash
  • บางไลบรารี JavaScript ของบุคคลที่สามเช่น JQuery
  • การออกแบบ UI
  • การออกแบบข้อมูล ฯลฯ

การเขียนโปรแกรมฝั่งเซิร์ฟเวอร์เกี่ยวข้องกับการสร้างเนื้อหาแบบไดนามิก มันทำงานบนเซิร์ฟเวอร์ เซิร์ฟเวอร์เหล่านี้จำนวนมาก "ไร้หัว" หน้าเว็บส่วนใหญ่ไม่คงที่พวกเขาค้นหาฐานข้อมูลเพื่อแสดงข้อมูลส่วนบุคคลที่ผู้ใช้อัพเดท ด้านนี้มีปฏิสัมพันธ์กับส่วนหลังเช่นพูดฐานข้อมูล

การเขียนโปรแกรมนี้สามารถทำได้หลายภาษา:

  • PHP
  • Java และ jsp
  • งูเห่า
  • Perl
  • หลาม
  • Ruby on Rails เป็นต้น

รหัสนี้เกี่ยวข้องกับ:

  • การสืบค้นฐานข้อมูล
  • เข้ารหัสข้อมูลลงใน html
  • แทรกและอัปเดตข้อมูลลงในฐานข้อมูล
  • กฎและการคำนวณทางธุรกิจ

บุคคลที่รับผิดชอบการเขียนโปรแกรมฝั่งเซิร์ฟเวอร์ต้องรู้ว่า:

  • บางภาษาที่กล่าวถึงข้างต้น
  • HTML
  • SQL,
  • การเขียนสคริปต์ linux / unix shell
  • OOP
  • กฎเกณฑ์ทางธุรกิจ ฯลฯ

"บุคคลที่รับผิดชอบการเขียนโปรแกรมส่วนหน้าจะต้องรู้" ต้อง? ฉันจะบอกว่าคุณสามารถอยู่รอดได้อย่างสมบูรณ์แบบด้วย HTML, CSS, Javascript และ Ajax เท่านั้น บอกว่าการเขียนโปรแกรมฝั่งเซิร์ฟเวอร์ที่จะทำอย่างไรกับการสร้างเนื้อหาแบบไดนามิกและไม่ได้บอกว่าเหมือนกันสำหรับด้านลูกค้าอาจจะให้สัญชาติญาณผิด ...
nbro

"หน้าเว็บส่วนใหญ่ไม่คงที่พวกเขาค้นหาฐานข้อมูลเพื่อแสดงข้อมูลส่วนตัวที่ผู้ใช้อัพเดทอยู่ด้านนี้มีการโต้ตอบกับแบ็คเอนด์เช่นฐานข้อมูล" ฉันจะใช้ถ้อยคำใหม่เป็น: "หน้าถูกสร้างขึ้นแบบไดนามิกโดยการกรอกชิ้นส่วนแบบไดนามิกที่มีเนื้อหาตัวแปรซึ่งดึงมามักจะจากฐานข้อมูล back-end อยู่แล้วทุกอย่างที่เกี่ยวข้องกับการเขียนโปรแกรมฝั่งเซิร์ฟเวอร์, IMO.
พฤศจิกายน

อีกครั้งโดยทั่วไปฉันจะพูดว่า "... คนควรรู้ ... " และไม่ต้อง "ต้อง" ...
nbro

@nbro ทำไมคุณไม่เพียงแค่เขียนคำตอบของคุณเอง?

@ColeTrumbo การเชื่อมต่อระหว่างความคิดเห็นของฉันและของคุณคืออะไร ผู้คนวิจารณ์คำตอบของผู้อื่นเพื่อปรับปรุงได้หรือไม่
nbro

14

คำตอบอื่น ๆ ได้เน้นไปที่การเขียนโปรแกรมฝั่งไคลเอ็นต์และฝั่งเซิร์ฟเวอร์: ภาษาส่วนใหญ่ที่ใช้งานสิ่งที่ต้องทำให้สำเร็จ ฯลฯ

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

ความปลอดภัยและการอนุญาต

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

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

การปรับใช้และแพลตฟอร์ม

ในการเขียนโปรแกรมฝั่งเซิร์ฟเวอร์การปรับใช้จะต้องเกิดขึ้นจากนอกรหัสของคุณโดยใช้เครื่องมือบางชนิด (แม้ว่าจะเป็นmake installหรือgit clone) และการปรับใช้นี้มักจะทำด้วยตนเอง - หรืออย่างน้อยก็คาดว่าจะเกิดขึ้นในการดูแลแบบกึ่ง ทาง ระบบ (หมายถึงระบบปฏิบัติการ) ที่คุณปรับใช้มักจะเหมือนกันในหลาย ๆ เครื่อง แต่สามารถปรับแต่งได้ตามความต้องการของคุณ

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

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

ผลกระทบของรัฐและทุติยภูมิ

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

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

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

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


3

นี่คือโดยไม่ตั้งใจที่จะเป็นคำตอบที่ยอมรับได้; ค่อนข้างฉันเสนอให้เป็นจุดเสริม (เพื่อตอบwhen do you use each of themคำถาม) ที่ยังไม่ได้กล่าวถึงในคำตอบอื่น ๆ ป่านนี้คือ:

การคุ้มครองทรัพย์สินทางปัญญา

ซอร์สโค้ดที่อยู่บนฝั่งไคลเอ็นต์ (เช่นใน Javascript) สามารถอ่านได้ง่ายและ / หรือมีความสามารถในการทำวิศวกรรมย้อนกลับหากมันถูกทำให้งงงวย

ซอร์สโค้ดที่อยู่บนฝั่งเซิร์ฟเวอร์อย่างไรก็ตามสามารถปกป้องอัลกอริธึมที่เป็นกรรมสิทธิ์ได้อย่างปลอดภัยและส่งคืนผลลัพธ์เท่านั้น กล่องดำแปลก ๆ


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

@MadaraUchiha ดังนั้นคำนำ: "นี่ไม่ได้มีไว้เพื่อเป็นคำตอบที่ยอมรับได้ แต่ฉันขอเสนอเป็นจุดเสริม"
Kosta Kontos

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