2017-01-19 19:35:50 +00:00
|
|
|
# อภิธานศัพท์ (Glossary)
|
2017-01-19 07:37:00 +00:00
|
|
|
|
2017-01-19 19:35:50 +00:00
|
|
|
เพจนี้จะบ่งบอกคำศัพท์ที่ถูกใช่บ่อยๆในการพัฒนา Electron
|
2017-01-19 07:37:00 +00:00
|
|
|
|
|
|
|
### ASAR
|
|
|
|
|
2017-01-19 19:38:12 +00:00
|
|
|
[ASAR (Atom Shell Archive Format)][asar] เป็น extension ของไฟล์
|
|
|
|
มันมีลักษณะความคล้ายครีง `tar` ที่รวมหลายไฟล์ลงไปในไฟล์เดียว
|
|
|
|
Electron สามารถอ่านไฟล์ ASAR ได้เลยโดยที่ไม่ต้อง unpack
|
2017-01-19 07:37:00 +00:00
|
|
|
|
2017-01-19 19:35:50 +00:00
|
|
|
กำลังทำ: ไฟล์ประเภท ASAR นั้น สร้างมาเพื่อเพิ่มประสิทธิถาพบนระบบปฎิบัติการ Windows
|
2017-01-19 07:37:00 +00:00
|
|
|
|
|
|
|
### Brightray
|
|
|
|
|
2017-01-19 19:38:12 +00:00
|
|
|
[Brightray][brightray] เป็น static library ที่ทำให้ [libchromiumcontent] ใช้ได้ง่ายขึ้น
|
|
|
|
ในแอพพิเคชั่น มันถูกสร้างขึ้นมาเพื่อ Electron โดยเฉพาะ
|
|
|
|
แต่ว่ามันสามารถเปิดใช้ในแอพที่ใช้ Chromium's render ซึ่งไม่ถูกสร้างจาก Electron ได้
|
2017-01-19 07:37:00 +00:00
|
|
|
|
2017-01-19 19:35:50 +00:00
|
|
|
Brightray เป็น dependency ของ Electron ที่ไม่ค่อยได้ใช้งานสำหรับผู้ใช้ Electron ทั่วไป
|
2017-01-19 07:37:00 +00:00
|
|
|
|
|
|
|
### DMG
|
|
|
|
|
2017-01-19 19:35:50 +00:00
|
|
|
DMG เป็นรูปแบบไฟล์ที่ใช้กับ Apple Disk Image
|
|
|
|
|
|
|
|
โดยส่วนมากไฟล์ DMG จะถูกใช้ในการแจกแจงตัวติดตั้งของแอพพิเคชั่น
|
|
|
|
คุณสามารถใช้ [electron-builder] ในการสร้างไฟล์ขึ้นมาได้
|
2017-01-19 07:37:00 +00:00
|
|
|
|
|
|
|
### IPC
|
|
|
|
|
2017-01-19 19:35:50 +00:00
|
|
|
IPC ย่อมาจาก Inter-Process Communication ซึ่ง Electron ใช้ IPC
|
|
|
|
ในการที่จะส่งข้อความ JSON ระหว่าง [โปรเซสหลัก][main] และ [ตัวเรนเดอร์][renderer]
|
2017-01-19 07:37:00 +00:00
|
|
|
|
|
|
|
### libchromiumcontent
|
|
|
|
|
2017-01-19 19:35:50 +00:00
|
|
|
เป็น library รวมที่มี Chromium Content โมดูลและ dependencies ต่างๆเข้าไปด้วย
|
|
|
|
(อาทิเช่น Blink, [V8], ฯลฯ)
|
|
|
|
|
|
|
|
### โปรเซสหลัก
|
2017-01-19 07:37:00 +00:00
|
|
|
|
2017-01-19 19:35:50 +00:00
|
|
|
โปรเซสหลักในส่วนมากจะเป็นไฟล์ `main.js` ซึ่งเป็นจุดเริ่มต้นของทุกๆแอพของ Electron
|
|
|
|
โปรเซสหลักเป็นตัวที่กำหนดการทำงานของแอพตั้งแต่ต้นจนจบ มันจะควบคุมองค์ประกอบของแอพเช่น
|
|
|
|
Menu, Menu Bar, Dock, Tray, ฯลฯ โปรเซสหลักนั้นจะรับผิดชอบการสร้างตัวเรนเดอร์ใหม่ในแอพ
|
2017-01-19 07:37:00 +00:00
|
|
|
|
2017-01-19 19:35:50 +00:00
|
|
|
Node API นั้นมาพร้อมกับ Electron
|
2017-01-19 07:37:00 +00:00
|
|
|
|
2017-01-19 19:38:12 +00:00
|
|
|
`package.json` จะสามารถใช้ระบุโปรเซสหลักของทุกๆแอพบน Electron ได้
|
|
|
|
นี้คือเหตุผลที่ `electron .` รู้ว่าไฟล์ไหนควรจะรันตอนเริ่มต้น
|
2017-01-19 07:37:00 +00:00
|
|
|
|
2017-01-19 19:35:50 +00:00
|
|
|
เพิ่มเติม: [process](#process), [renderer process](#renderer-process)
|
2017-01-19 07:37:00 +00:00
|
|
|
|
|
|
|
### MAS
|
|
|
|
|
2017-01-19 19:38:12 +00:00
|
|
|
MAS เป็นตัวย่อของ Mac App Store
|
|
|
|
ในการที่จะส่งไฟล์ลง MAS นั้นโปรดดู [การแนะนำการส่ง Mac App Store](Mac App Store Submission Guide)
|
2017-01-19 07:37:00 +00:00
|
|
|
|
|
|
|
### native modules
|
|
|
|
|
2017-01-19 19:35:50 +00:00
|
|
|
Native โมดูล (อีกชื่อคือ [addons]) คือโมดูลที่เขียนด้วย C หรือ C++
|
|
|
|
ที่สามารถจะโหลดอยู่ใน Node.js หรือ Electron โดยการใช้ฟังค์ชั่น require()
|
|
|
|
และใช้แบบเดียวกับโมดูล Node.js ธรรมดา
|
|
|
|
|
|
|
|
โดยส่วนมากมันถูกใช้เป็นอินเตอร์เฟสระหว่าง JavaScript และ Node.js ผ่านทาง C/C++
|
2017-01-19 07:37:00 +00:00
|
|
|
|
2017-01-19 19:35:50 +00:00
|
|
|
Native Node โมดูลจะได้รับการสนับสนุนจาก Electron
|
|
|
|
แต่ว่ามีความเป็นไปได้ว่า Electron นั้นจะใช้ V8 คนละเวอร์ชั่นกับ Node ที่มีอยู่ในระบบ
|
|
|
|
คุณจะต้องเป็นคนเลือก Electron's header ด้วยตนเอง
|
2017-01-19 07:37:00 +00:00
|
|
|
|
2017-01-19 19:35:50 +00:00
|
|
|
เพิ่มเติม: [วิธีการใช้ Native Node โมดูล][Using Native Node Modules]
|
2017-01-19 07:37:00 +00:00
|
|
|
|
|
|
|
## NSIS
|
|
|
|
|
2017-01-19 19:35:50 +00:00
|
|
|
NSIS ย่อมาจาก Nullsoft Scriptable Install System คือตัวติดตั้งที่ขับเคลื่อนด้วยสคริปท์
|
|
|
|
สำหรับระบบปฎิบัติการ Windows มันได้รับการจดลิขสิทธ์สำหรับใช้ทุกๆคน
|
|
|
|
มันถูกใช้แทนสินค้าเชิงพาณิชย์เช่น InstallShield
|
|
|
|
[electron-builder] นั้นรองรับการสร้าง NSIS
|
2017-01-19 07:37:00 +00:00
|
|
|
|
|
|
|
### process
|
|
|
|
|
2017-01-19 19:35:50 +00:00
|
|
|
โปรเซสคือ instance ของโปรแกรมที่กำลังทำงานอยู่
|
|
|
|
Electron แอพนั้นใช้ [โปรเซสหลัก][main] และ [ตัวเรนเดอร์][renderer] หนึ่งตัวขึ้นไปที่รัน
|
|
|
|
หลายๆโปรเกรมพร้อมๆกัน
|
2017-01-19 07:37:00 +00:00
|
|
|
|
2017-01-19 19:35:50 +00:00
|
|
|
ใน Node.js และ Electron นั้น แต่ละโปรเซสที่กำลังรันอยู่จะมี `process` object
|
|
|
|
Object ตัวนี้เป็น global ที่ให้ข้อมูลและการควบคุมของตัวโปรเซสนั้นๆ
|
2017-01-19 07:37:00 +00:00
|
|
|
|
2017-01-19 19:35:50 +00:00
|
|
|
เพราะว่ามันเป็น global ดังนั้นจึงไม่จำเป็นที่จะเรียก `require()` เพื่อใช้งาน
|
|
|
|
|
|
|
|
เพิ่มเติม: [โปรเซสหลัก](#main-process), [ตัวเรนเดอร์](#renderer-process)
|
2017-01-19 07:37:00 +00:00
|
|
|
|
|
|
|
### renderer process
|
|
|
|
|
2017-01-19 19:35:50 +00:00
|
|
|
ตัวเรนเดอร์ คือ หน้าต่างบราวเซอร์ของแอพพิเคชั่นของคุณ
|
|
|
|
มันแตกต่างจากโปรเซสหลักโดยที่มันจะสามารถมีอยู่พร้อมกันหลายตัวได้
|
|
|
|
และแต่ละตัวนั้นใช้ โปรเซส ที่ต่างกันออกไป
|
|
|
|
นอกจากนั้นมันยังสามารถซ่อนได้อีกด้วย
|
|
|
|
|
2017-01-19 19:38:12 +00:00
|
|
|
ใน บราวเซอร์ ทั่วๆไป
|
|
|
|
เว็ปเพจจะได้รับการรันด้วยสภาพแวดล้อมจำกัดและจะไม่สามารถใช้ทรัพยากร native ได้
|
2017-01-19 07:37:00 +00:00
|
|
|
|
2017-01-19 19:35:50 +00:00
|
|
|
แต่ว่าสำหับผู้ใช้ Electron นั้นเราสามารถให้
|
|
|
|
เว็ปเพจมีการปฏิสัมพันธ์กับระบบปฎิบัติการได้โดยผ่านทาง API ของ Node.js
|
2017-01-19 07:37:00 +00:00
|
|
|
|
2017-01-19 19:35:50 +00:00
|
|
|
เพิ่มเติม: [โปรเซสหลัก](#main-process), [ตัวเรนเดอร์](#renderer-process)
|
2017-01-19 07:37:00 +00:00
|
|
|
|
|
|
|
### Squirrel
|
|
|
|
|
2017-01-19 19:35:50 +00:00
|
|
|
Squirrel เป็น open-source framework ที่ทำให้แอพ Electron นั้น
|
|
|
|
อัพเดทได้อย่างอัตโนมัดเมื่อมีเวอร์ชั่นใหม่เข้ามา
|
|
|
|
|
|
|
|
เพิ่มเติม: [autoUpdater] API เพื่อการใช้งาน Squirrel เบื้องต้น
|
2017-01-19 07:37:00 +00:00
|
|
|
|
|
|
|
### userland
|
|
|
|
|
2017-01-19 19:38:12 +00:00
|
|
|
"Userland" แต่แรกทีมาจากสังคม unix ซึ่งหมายถึงโปรแกรมที่รันข้างนอก kernel ของระบบปฎิบัติการ
|
2017-01-19 19:35:50 +00:00
|
|
|
ภายหลังนี้ "userland" ได้รับความสนใจจากสังคม Node และ npm เพื่อใช้ในการอธิบายความแตกต่าง
|
|
|
|
ของ feature ที่พร้อมไช้งานใน "node core" กับ แพ็คเกจที่ได้รับการแจกจ่ายถายใน npm registry
|
|
|
|
ซึ่งมาจากเหล่าคนใช้ที่กว้างขวาง
|
2017-01-19 07:37:00 +00:00
|
|
|
|
2017-01-19 19:35:50 +00:00
|
|
|
Electron นั้นมีความคล้ายคลึงกับ Node ตรงที่มี API ที่ไม่เยอะแต่ว่ามีความสามารถเพียงพอ
|
|
|
|
ในการพัฒนา multi-platform แอพพิเคชั่น
|
|
|
|
|
|
|
|
ด้วยปรัชญาการออกแบบนี้เองที่ทำให้ Electron นั้นเป็นเครื่องมือที่มีความยืดหยุ่นโดยที่ไม่กำหนดให้ผู้ใช้
|
|
|
|
ใช้งานได้เพียงตามที่ออกแบบไว้
|
|
|
|
|
|
|
|
Userland ได้เปิดโอกาสให้ผู้ใช้สามารถสร้างและแบ่งปันเครื่องมือนอกเหนือจากอะไรก็ตามที่มีอยู่ใน "core"
|
2017-01-19 07:37:00 +00:00
|
|
|
|
|
|
|
### V8
|
|
|
|
|
2017-01-19 19:35:50 +00:00
|
|
|
V8 เป็น JavaScripe engine ของ Google ที่เป็น open source
|
|
|
|
มันถูกเขียนขึ้นด้วย C++ และถูกใช้ใน Google Chrome
|
|
|
|
|
|
|
|
Google Chrome เป็น open source บราวส์เซอร์ของ Google
|
|
|
|
|
|
|
|
V8 สามารถรันแยกเองต่างหากได้ หรือจะสามารถนำไปใช้กับแอพพิเคชั่น C++ อะไรก็ได้
|
2017-01-19 07:37:00 +00:00
|
|
|
|
|
|
|
### webview
|
|
|
|
|
2017-01-19 19:35:50 +00:00
|
|
|
`webview` เป็นแท็กที่ใช้ในการใส่ข้อมูลสำหรับคนใช้ทั่วไป (เช่นเว็ปภายนอก) ใน Electron แอพของคุณ
|
|
|
|
มันมีความคล้ายครึงกับ `iframe` แต่ว่าต่างกันโดยที่ webview รันโดยโปรเซสคนละตัว
|
2017-01-19 19:38:12 +00:00
|
|
|
มันไม่มี permission เหมือนกับเว็ปเพจของคุณและการมีปฏิสัมพันธ์ระหว่าง
|
|
|
|
แอพของคุงกับสิ่งที่ฝังอยู่จะเป็นไปโดยราบลื่นโดยที่ไม่ต้องซิ้งค์ (asynchronous)
|
2017-01-19 19:35:50 +00:00
|
|
|
|
|
|
|
ด้วยเหตุนี้เองทำให้ แอพของคุณปลอกภัยจากสิ่งที่ถูกฝัง
|
|
|
|
|
2017-01-19 07:37:00 +00:00
|
|
|
|
|
|
|
[addons]: https://nodejs.org/api/addons.html
|
|
|
|
[asar]: https://github.com/electron/asar
|
|
|
|
[autoUpdater]: api/auto-updater.md
|
|
|
|
[brightray]: https://github.com/electron/brightray
|
|
|
|
[electron-builder]: https://github.com/electron-userland/electron-builder
|
|
|
|
[libchromiumcontent]: #libchromiumcontent
|
|
|
|
[Mac App Store Submission Guide]: tutorials/mac-app-store-submission-guide.md
|
|
|
|
[main]: #main-process
|
|
|
|
[renderer]: #renderer-process
|
|
|
|
[Using Native Node Modules]: tutorial/using-native-node-modules.md
|
|
|
|
[userland]: #userland
|
|
|
|
[V8]: #v8
|