คอลเลกชันในตัวของวัตถุแอปพลิเคชันมีเนื้อหาประเภทง่าย ๆ ซึ่งสามารถใช้งานได้โดยแอปพลิเคชันเริ่มต้น ("คีย์") ด้านล่างนี้เป็นประสบการณ์บางอย่างในการทำแคชโดยเนื้อหาและ StaticObjects ของวัตถุแอปพลิเคชัน ASP JavaScript มาเรียนรู้เพิ่มเติมเกี่ยวกับเรื่องนี้ด้านล่าง!
เมื่อใช้ application.contents คุณสามารถใช้สิ่งที่น่าเกลียดเช่น:
สำหรับ (var i = 0; i <15000; i ++) {
Application.lock ();
// application.contents (i) = "sdfdsffdsaf";
แอปพลิเคชัน (i) = "sdfdsffdsaf";
application.unlock ();}
ที่นี่ฉันเก็บสตริง 1.5W ในแอปพลิเคชันเนื้อหาซึ่งมีจำนวน 234ms
หลังจากใช้ application.staticObjects แทน:
กำหนดพจนานุกรมเป็น staticObject เพื่อจัดเก็บข้อมูลเนื่องจาก StaticObject ไม่อนุญาตให้เข้าถึงโดยตรง
<object id = "dict" runat = "เซิร์ฟเวอร์" scope = "แอปพลิเคชัน" โปรแกรม = "scripting.dictionary"> </jobch>
Scripting.dictionary นั้นเร็วมากและจะไม่ส่งผลกระทบต่อการเปรียบเทียบความเร็วในการรวบรวม StaticObjects
ความเร็วของพจนานุกรม:
var d = new ActiveXObject ("Scripting.dictionary");
สำหรับ (var i = 0; i <15000; i ++) {
d.item (i) = "sdfdsffdsaf";}
การแก้ไข 1.5W, 172ms
แน่นอนวัตถุที่กำหนดเอง var d = new Object (); D [i] = .. เร็วกว่า 1.5W เท่าที่ราคา 80-90ms เท่านั้น แต่ฟังก์ชั่นนั้นอ่อนแอกว่ามากดังนั้นคุณยังคงใช้พจนานุกรม
ดูการทดสอบอย่างเป็นทางการด้านล่าง
สำหรับ (var i = 0; i <15000; i ++) {
Application.lock ();
application.staticObjects ("dict"). รายการ (i) = "sdfdsffdsaf";
application.unlock ();}
เวลานานถึง 6953ms ในขั้นต้นมีการตัดสินว่าความเร็วในการเข้าถึงของคอลเลกชัน StaticObjects ไม่สามารถตอบสนองความต้องการของแคชได้ ความเร็วนี้เกือบจะเหมือนกับเวลาที่ ADO OLEDB อ่าน SQL Server 2000
อย่างไรก็ตามฉันไม่ได้วางแผนที่จะยอมแพ้ทันทีเพราะข้อได้เปรียบของ StaticObjects คือมันสามารถจัดเก็บวัตถุและพจนานุกรมยังสามารถจัดเก็บวัตถุอื่น ๆ ซึ่งสามารถใช้เป็นวัตถุแคชไม่ใช่แค่ข้อมูล
ฉันใส่วัตถุในแอปพลิเคชัน StaticObjects ("dict"):
application.staticObjects ("dict"). รายการ ("o") = new Object ();
สำหรับ (var i = 0; i <15000; i ++) {
Application.lock ();
application.staticObjects ("dict"). รายการ ("o") [i] = "sdfdsffdsaf";
application.unlock ();}
6656ms เร็วขึ้นเล็กน้อย อีกหนึ่งเลเยอร์ของวัตถุไม่ทำให้ความเร็วช้าลง ความเร็วที่ช้าไม่ได้เป็นเพราะโครงสร้างที่ซับซ้อน แต่เป็นเพราะการเข้าถึงอาชีพของ StaticObjects
การอ้างอิงของ Pre-store Dict
var t = application.staticObjects ("dict");
สำหรับ (var i = 0; i <15000; i ++) {
Application.lock ();
t.item ("o") [i] = "sdfdsffdsaf";
application.unlock ();}
3094ms ประสบความสำเร็จในการลดเวลาลงกว่าครึ่ง จะเกิดอะไรขึ้นถ้ากลยุทธ์การประหยัดก่อนใน JS นั้นช่วยประหยัด T.Item ("O") ได้เช่นกัน?
var t = application.staticObjects ("dict"). รายการ ("o");
สำหรับ (var i = 0; i <15000; i ++) {
Application.lock ();
t [i] = "sdfdsffdsaf";
application.unlock ();}
125ms ประสบความสำเร็จในที่สุดเพียงครึ่งหนึ่งของแอปพลิเคชัน ดูเหมือนว่าเวลาส่วนใหญ่จะได้รับ 'การอ้างอิง' แทนที่จะเป็นพื้นที่หน่วยความจำ StaticObjects ที่ได้รับการปกป้องอย่างช้าๆ StaticObjects มีมาตรการรักษาความปลอดภัยที่ดีกว่าเนื้อหาเนื่องจากต้องเก็บวัตถุ
อาศัยฟังก์ชั่นที่ทรงพลังของพจนานุกรมห่อหุ้มอย่างเหมาะสมและเข้าถึงโดยใช้วิธีการที่เป็นที่นิยมเช่น put (), get (), มี () ฯลฯ มันเป็นแคชที่ทรงพลัง
//// หมายเหตุ
ฉันห่อหุ้มองค์ประกอบ. sct; เขียนโดย ASP JavaScript ส่งมันถ้าคุณมีเวลาดังนั้นฉันจะอยู่ที่นี่วันนี้
มีการทดสอบความเร็วที่อ้างอิงโดย Contens และ StaticObjects มันเป็น 0ms ใน 20 เท่าความเร็วประมาณ 5 เท่าและ 500-1500 เท่าคือ 10 เท่าของความแตกต่างความเร็ว อย่างไรก็ตามการเข้าถึงหลังจากการได้มาจะไม่ได้รับผลกระทบ
ประสบการณ์บางอย่างในการสร้างแคชในวัตถุแอปพลิเคชัน ASP JavaScript และ StaticObjects ได้รับการแนะนำให้รู้จักกับคุณที่นี่ หลังจากอ่านสิ่งนี้แล้วคุณจะได้รับประโยชน์มากมายหรือไม่?