Home Arrow Icon Knowledge base Arrow Icon Global Arrow Icon มีผลกระทบด้านประสิทธิภาพเมื่อใช้ getAllValues ​​() มากกว่า getValue ()


มีผลกระทบด้านประสิทธิภาพเมื่อใช้ getAllValues ​​() มากกว่า getValue ()


เมื่อเปรียบเทียบ `getAllValues ​​()` กับ `getValue ()` ผลกระทบของประสิทธิภาพส่วนใหญ่ขึ้นอยู่กับบริบทและการใช้งานเฉพาะของวิธีการเหล่านี้ในระบบหรือกรอบที่คุณใช้ อย่างไรก็ตามมีหลักการทั่วไปบางประการที่สามารถนำทางความเข้าใจของเรา:

ข้อควรพิจารณาประสิทธิภาพทั่วไป

1. จำนวนการโทร: โดยทั่วไปการโทรน้อยลงเพื่อดึงข้อมูลมีประสิทธิภาพมากกว่าการโทรหลายครั้ง หาก `getAllValues ​​()` ดึงข้อมูลที่จำเป็นทั้งหมดในการโทรครั้งเดียวมันอาจมีประสิทธิภาพมากกว่าการเรียก `getValue ()` หลายครั้งสำหรับแต่ละค่า

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

3. การแคชและการเพิ่มประสิทธิภาพ: บางระบบอาจแคชผลลัพธ์หรือเพิ่มประสิทธิภาพการโทรซ้ำไปยัง `getValue ()` ซึ่งสามารถลดความแตกต่างของประสิทธิภาพได้ อย่างไรก็ตามหาก `getAllValues ​​()` ได้รับการปรับให้เหมาะสมสำหรับการดึงข้อมูลจำนวนมากมันอาจยังคงมีประสิทธิภาพที่ดีขึ้น

สถานการณ์เฉพาะ

- สคริปต์ Google Apps: ในสคริปต์ Google Apps โดยใช้ `getValues ​​()` (คล้ายกับ `getAllValues ​​()`) แนะนำโดยทั่วไปในการโทรหลายครั้ง `getValue ()` การโทรเพราะลดจำนวนการโต้ตอบกับ Google Sheets API ซึ่งสามารถปรับปรุงประสิทธิภาพได้อย่างมีนัยสำคัญ [3]

- การสะท้อนและการเข้าถึงคุณสมบัติ: ใน. NET Reflection วิธีการเช่น `getProperties ()` สามารถช้าเนื่องจากค่าใช้จ่ายของการสะท้อนตัวเอง อย่างไรก็ตามผลการแคชสามารถปรับปรุงประสิทธิภาพได้อย่างมาก [1] [7]

- ServiceNow: ใน ServiceNow, `getValue ()` โดยทั่วไปเร็วกว่า `getDisplayValue ()` เพราะมันดึงค่าดิบโดยไม่ต้องประมวลผลเพิ่มเติม [5]

บทสรุป

ตัวเลือกระหว่าง `getAllValues ​​()` และ `getValue ()` ควรขึ้นอยู่กับข้อกำหนดเฉพาะของแอปพลิเคชันของคุณและลักษณะประสิทธิภาพของระบบที่คุณทำงานด้วย หากคุณต้องการค่าทั้งหมดและสามารถเรียกคืนได้อย่างมีประสิทธิภาพด้วย `getAllValues ​​()` มันน่าจะเป็นตัวเลือกที่ดีกว่า อย่างไรก็ตามหากคุณต้องการเพียงส่วนย่อยของค่าหรือถ้า `getValue ()` ได้รับการปรับให้เหมาะสมสำหรับกรณีการใช้งานของคุณอาจเป็นที่นิยม พิจารณาปัจจัยต่าง ๆ เช่นขนาดข้อมูลเวลาแฝงเครือข่ายและการเพิ่มประสิทธิภาพเฉพาะของระบบเมื่อทำการตัดสินใจนี้

การอ้างอิง:
[1] https://lotsacode.wordpress.com/2010/04/13/reflection-type-getproperties-and-performance/
[2] https://www.reddit.com/r/googleappsscript/comments/px959t/getRangeGetValues_performance_implication_when/
[3] https://stackoverflow.com/questions/42776311/optimizing-code-getValue-and-looping
[4] https://drupal.stackexchange.com/questions/214036/getValue-of-multiple-values-field-return-only-the-first-value
[5] https://www.servicenow.com/community/in-other-news/how-to-use-getdisplayvalue-and-getvalue-for-gliderecord-or/ba-p/2896719
[6] https://www.servicenow.com/docs/bundle/yokohama-api-reference/page/app-store/dev_portal/api_reference/glideform/concept/c_glideformapi.html
[7] http://www.mattwarren.org/2016/12/14/why-is-reflection-slow/
[8] https://www.ag-grid.com/angular-data-grid/component-cell-renderer/
[9] https://salesforce.stackexchange.com/questions/8829/getInstance-vs-getValues-custom-setting