หน้าแรก
หน้าแรก
ที่ AppSignal เราช่วยนักพัฒนาด้วยประสิทธิภาพของแอปพลิเคชัน เรากำลังตรวจสอบแอปจำนวนมากที่ส่งคำขอนับพันล้านรายการ เราคิดว่าเราสามารถช่วยบล็อกโพสต์เกี่ยวกับ Ruby และประสิทธิภาพได้เล็กน้อย ปัญหาการสืบค้น N+1 เป็นการต่อต้านรูปแบบทั่วไปในแอปพลิเคชัน Rails ORM จำนวนมาก เช่น ActiveRecord ของ Rails มีการโหล
นอกจากการแคชตุ๊กตารัสเซียแล้ว ยังมีเทคนิคเพิ่มเติมในการเร่งประสิทธิภาพในแอป Rails คราวนี้เราจะดูการรองรับ GET แบบมีเงื่อนไขในตัวของ Rails ซึ่งช่วยให้คุณจัดเก็บหน้าที่แสดงผลในแคชของเบราว์เซอร์ของผู้ใช้ 👋 และหากคุณต้องการอ่านเพิ่มเติมเกี่ยวกับประสิทธิภาพนอกแคช ยังมีอีกมากมายที่เราเขียนเกี่ยวกับประส
ข้อยกเว้นที่เพิ่มขึ้นสามารถได้รับการช่วยเหลือเพื่อรันเส้นทางรหัสทางเลือกเมื่อมีสิ่งผิดปกติ แต่มีหลายวิธีในการจัดการข้อยกเว้น ใน AppSignal Academy ฉบับนี้ เราจะพูดถึง retry และ ensure คีย์เวิร์ด และเราจะพิจารณาการเพิ่มข้อยกเว้นที่ได้รับการช่วยเหลือ สมมติว่าเรากำลังสื่อสารกับ Web API ที่ไม่น่าเชื่อถื
Turbolinks เป็นการเพิ่มประสิทธิภาพที่เพิ่ม รับรู้ ประสิทธิภาพโดยฉลาดในการสลับหน้าและโหลดเนื้อหาในแอปของคุณใหม่ ไม่เหมือนกับคำขอ GET แบบมีเงื่อนไข โดยไม่จำเป็นต้องเปลี่ยนแปลงโค้ด Ruby ในแอป Rails ของคุณ Turbolinks 5 คือไลบรารี JavaScript ที่ทำงานได้ทุกที่ (แม้จะไม่มี Rails ก็ตาม เช่นเดียวกับหน้าสแตติ
ถึงเวลาสำหรับ Ruby Magic อีกตอนแล้ว! คราวนี้ เราจะมาดูคุณสมบัติมหัศจรรย์ที่สุดชิ้นหนึ่งของ Ruby ซึ่งมีวิธีการส่วนใหญ่ที่คุณจะใช้เมื่อทำงานกับคลาสที่นับได้ของ Ruby เช่น Array , Hash และ Range . ในกระบวนการนี้ เราจะเรียนรู้สิ่งที่คุณสามารถทำได้ด้วยวัตถุที่นับได้ วิธีแจงนับทำงาน และวิธีทำให้วัตถุสามารถ
เราได้พูดคุยเกี่ยวกับ retry คีย์เวิร์ดขณะพูดถึงการลองใหม่หลังจากข้อยกเว้น คู่หูที่ไม่ค่อยมีใครรู้จัก redo ทำงานเหมือนกัน แต่จะรันการวนซ้ำแบบวนซ้ำแทนที่จะเป็นทั้งบล็อก The redo คีย์เวิร์ด ดังที่เราได้เรียนรู้ในบทความของ Academy ก่อนหน้านี้ retry ให้คุณลองโค้ดใหม่อีกครั้งในบล็อก: begin puts "I
แทนที่จะนับเรคคอร์ดที่เกี่ยวข้องในฐานข้อมูลทุกครั้งที่โหลดเพจ คุณลักษณะการแคชตัวนับของ ActiveRecord อนุญาตให้จัดเก็บตัวนับและอัปเดตทุกครั้งที่มีการสร้างหรือลบออบเจ็กต์ที่เกี่ยวข้อง ในตอนนี้ของ AppSignal Academy เราจะเรียนรู้ทั้งหมดเกี่ยวกับตัวนับแคชใน ActiveRecord ลองใช้ตัวอย่างคลาสสิกของบล็อกที่มี
ใน Ruby Magic ฉบับนี้ เราจะเรียนรู้เกี่ยวกับการสตรีมไฟล์ใน Ruby ว่า IO เป็นอย่างไร คลาสจัดการการอ่านไฟล์โดยไม่ต้องโหลดลงในหน่วยความจำทั้งหมด และวิธีอ่านไฟล์ต่อบรรทัดด้วยการบัฟเฟอร์การอ่านไบต์ มาดำดิ่งกันเลย! “Slurping” และไฟล์สตรีมมิ่ง File.read ของ Ruby วิธีอ่านไฟล์และส่งคืนเนื้อหาทั้งหมด irb>
การแคชแฟรกเมนต์ของ Rails ช่วยเพิ่มความเร็วได้มากขึ้นเมื่อแคชส่วนใหญ่ของเพจถูกแคชไว้ สิ่งนี้ยากกว่าสำหรับหน้าที่มีเนื้อหาแบบไดนามิกหรือเฉพาะผู้ใช้จำนวนมาก วิธีแก้ไขคือใช้ “JavaScript sprinkles” ซึ่งเหมือนกับ hagelslag แต่ไม่มีช็อกโกแลตและมีคำขอพิเศษให้โหลดเนื้อหาเฉพาะผู้ใช้หลังจากที่หน้าที่เหลือได้รั
จำได้ไหมว่าตอนที่คุณยังเป็นเด็ก และคุณซื้อการ์ตูน omnibus double edition เหล่านั้นหรือไม่? การอ่านนั้นวิเศษแค่ไหน? เราจะไม่แสร้งทำเป็นว่าสิ่งนี้จะลืมไม่ลง แต่เราคิดว่าเราได้รวบรวมตัวเลือก Best-of AppSignal Academy ที่หนาเป็นพิเศษเพื่อให้คุณอ่านที่ชายหาด สวนสาธารณะ หรือในวันอาทิตย์ที่สบายๆ จะทำให้วัน
ตัวเลขสุ่มมีประโยชน์สำหรับวัตถุประสงค์ที่หลากหลาย เช่น ในการเล่นเกม การเข้ารหัส และการจำลองการสร้าง ในทางเทคนิค คอมพิวเตอร์ไม่สามารถสร้างตัวเลขสุ่มโดยการคำนวณเพียงอย่างเดียว เป็นไปไม่ได้โดยพื้นฐานแล้วที่จะสร้างตัวเลขสุ่มอย่างแท้จริงบนอุปกรณ์ที่กำหนดได้ สิ่งที่ดีที่สุดที่คุณหวังได้คือตัวเลขสุ่มเทียม
สิ่งหนึ่งที่ทำให้ Ruby ยอดเยี่ยมคือเราสามารถปรับแต่งเกือบทุกอย่างตามความต้องการของเรา สิ่งนี้มีประโยชน์และเป็นอันตราย การยิงตัวเองเป็นเรื่องง่าย แต่เมื่อใช้อย่างระมัดระวัง อาจส่งผลให้มีวิธีแก้ปัญหาที่ทรงประสิทธิภาพ ที่ Ruby Magic เราคิดว่ามีประโยชน์และอันตรายเป็นการผสมผสานที่ยอดเยี่ยม มาดูกันว่า Ru
ก่อนหน้านี้เราได้ดูการแคชส่วนย่อยใน Rails บน AppSignal Academy วิธีนี้ช่วยปรับปรุงประสิทธิภาพของการดูได้อย่างมากด้วยการแคชส่วนที่มีขนาดเล็กลง เมื่อแคชบางส่วน เรามีประโยชน์เพิ่มเติมในการนำกลับมาใช้ใหม่ในส่วนอื่นในมุมมองของเราโดยเสียค่าใช้จ่ายเพียงเล็กน้อย วิธีนี้ใช้ได้ผลดีกับคอลเล็กชันขนาดเล็ก แต่ปั
การสร้างฟีเจอร์เรียลไทม์ใน Rails ทำได้ง่ายกว่ามากกับไลบรารี เช่น Action Cable ใน AppSignal Academy ในตอนนี้ เราจะเจาะลึกเกี่ยวกับการอัปเดตตามเวลาจริงและเล่นกับการสร้างเซิร์ฟเวอร์ WebSocket แบบมินิมอล เพื่อดูว่ามันทำงานอย่างไรภายใต้ประทุน เราจะสร้างแอปพลิเคชันที่ผลักดัน และใช้ Pub/Sub ผ่าน WebSocket
ใน Ruby Magic เราชอบที่จะดำดิ่งสู่ความมหัศจรรย์เบื้องหลังสิ่งที่เราใช้ทุกวันเพื่อทำความเข้าใจวิธีการทำงาน ในฉบับนี้ เราจะมาสำรวจความแตกต่างระหว่างบล็อก โปรค และแลมบ์ดา ในภาษาโปรแกรมที่มีฟังก์ชันระดับเฟิร์สคลาส ฟังก์ชันสามารถเก็บไว้ในตัวแปรและส่งต่อเป็นอาร์กิวเมนต์ไปยังฟังก์ชันอื่นๆ ฟังก์ชันยังใช้ฟั
Ruby and Rails มีหลายวิธีที่ใช้ตรวจสอบการมีอยู่ของค่าหรือสถานะของวัตถุ Ruby ให้ #nil? และ #empty? และ ActiveSupport ของ Rails เพิ่ม #blank? และ #present? . ทั้งหมดนี้ทำงานในแบบของตัวเอง และสิ่งสำคัญคือต้องรู้ว่าแต่ละรายการประเมินข้อมูลอย่างไร เนื่องจากการใช้วิธีการที่ผิดในโค้ดของคุณอาจทำให้เกิดผลลัพ
Type coercion คือการเปลี่ยนประเภทของวัตถุไปเป็นอีกประเภทหนึ่งพร้อมกับค่าของวัตถุนั้น ตัวอย่างเช่น การเปลี่ยนจำนวนเต็มเป็นสตริงด้วย #to_s หรือลอยเป็นจำนวนเต็มด้วย #to_i . #to_str . ที่อาจจะไม่ค่อยมีใครรู้จัก และ #to_int วิธีการที่ใช้วัตถุบางอย่างทำเช่นเดียวกันในแวบแรก แต่มีข้อแตกต่างบางประการ ใน App
ข้อมูลเป็นส่วนสำคัญของแอปพลิเคชันซอฟต์แวร์ส่วนใหญ่ การทำแผนที่และการสืบค้นข้อมูลจากฐานข้อมูลเป็นงานที่เกิดซ้ำในชีวิตของนักพัฒนา ด้วยเหตุนี้ จึงเป็นสิ่งสำคัญที่จะต้องเข้าใจกระบวนการและสามารถใช้ abstractions ที่ทำให้งานง่ายขึ้นได้ ในโพสต์นี้ คุณจะพบการเปรียบเทียบระหว่าง ActiveRecord (Ruby) และ Ecto (
ใน Ruby Magic ก่อนหน้านี้ เราพบวิธีแทรกโมดูลลงในคลาสอย่างน่าเชื่อถือโดยเขียนทับ .new method ทำให้เราสามารถห่อ method ที่มีพฤติกรรมเพิ่มเติมได้ ครั้งนี้ เรากำลังก้าวไปอีกขั้นโดยแยกพฤติกรรมนั้นออกเป็นโมดูลของตัวเอง เพื่อให้เราสามารถนำกลับมาใช้ใหม่ได้ เราจะสร้าง Wrappable โมดูลที่จัดการส่วนขยายคลาสสำห
นี่เป็นส่วนที่สองของซีรีส์ ActiveRecord vs. Ecto ซึ่ง Batman และ Batgirl ต่อสู้กันเพื่อสืบค้นฐานข้อมูล และเราเปรียบเทียบแอปเปิ้ลกับส้ม หลังจากตรวจสอบสคีมาฐานข้อมูลและการย้ายข้อมูลใน ActiveRecord กับ Ecto ตอนที่หนึ่ง โพสต์นี้จะกล่าวถึงวิธีที่ทั้ง ActiveRecord และ Ecto ช่วยให้นักพัฒนาสามารถสืบค้นฐานข