การใช้คุณลักษณะการดีบักจะconsole.logลดประสิทธิภาพการดำเนินการของ JavaScript หรือไม่ จะส่งผลต่อความเร็วของการเรียกใช้สคริปต์ในสภาพแวดล้อมการผลิตหรือไม่
มีวิธีปิดใช้งานบันทึกคอนโซลในสภาพแวดล้อมการใช้งานจริงจากตำแหน่งคอนฟิกูเรชันเดียวหรือไม่?
การใช้คุณลักษณะการดีบักจะconsole.logลดประสิทธิภาพการดำเนินการของ JavaScript หรือไม่ จะส่งผลต่อความเร็วของการเรียกใช้สคริปต์ในสภาพแวดล้อมการผลิตหรือไม่
มีวิธีปิดใช้งานบันทึกคอนโซลในสภาพแวดล้อมการใช้งานจริงจากตำแหน่งคอนฟิกูเรชันเดียวหรือไม่?
console.logใช้เวลา ~ 50ms
                คำตอบ:
หากคุณกำลังจะมีสิ่งนี้ในไซต์สาธารณะหรือบางสิ่งบางอย่างใครก็ตามที่มีความรู้เพียงเล็กน้อยเกี่ยวกับการใช้เครื่องมือสำหรับนักพัฒนาสามารถอ่านข้อความแก้ไขข้อบกพร่องของคุณได้ สิ่งนี้อาจไม่ใช่พฤติกรรมที่พึงประสงค์ทั้งนี้ขึ้นอยู่กับสิ่งที่คุณกำลังบันทึก
วิธีที่ดีที่สุดวิธีหนึ่งคือการconsole.logรวมวิธีการใดวิธีการหนึ่งของคุณและคุณสามารถตรวจสอบเงื่อนไขและดำเนินการได้ที่ไหน ในรุ่นการผลิตคุณสามารถหลีกเลี่ยงการมีฟังก์ชันเหล่านี้ได้ นี้คำถามกองมากเกินพูดในรายละเอียดเกี่ยวกับวิธีการที่จะทำเช่นเดียวกันโดยใช้คอมไพเลอร์ปิด
ดังนั้นเพื่อตอบคำถามของคุณ:
conosle.logเจตจำนงยังคงสร้างความนิยมให้กับฟังก์ชันที่ถูกลบล้างอยู่ใช่หรือไม่
                    console.logบันทึกวัตถุจะทำให้หน่วยความจำรั่วเนื่องจากเบราว์เซอร์ยังคงรักษาโครงสร้างวัตถุไว้เพื่อให้นักพัฒนาสามารถขยายบันทึกได้
                    อันที่จริงconsole.logช้ากว่าฟังก์ชันว่างมาก การเรียกใช้การทดสอบ jsPerf นี้บน Chrome 38 ของฉันให้ผลลัพธ์ที่น่าทึ่ง:
console.logจะช้ากว่าการเรียกฟังก์ชันว่างประมาณ 10,000 เท่าไม่ใช่ว่าคุณจะสังเกตเห็นความล่าช้าของประสิทธิภาพหากคุณมีการconsole.…โทรจำนวนพอสมควรที่เริ่มทำงานหนึ่งครั้ง (หนึ่งร้อยจะใช้เวลา 2 มิลลิวินาทีในการติดตั้ง Chrome ของฉัน - หรือ 20 มิลลิวินาทีเมื่อคอนโซลเปิดอยู่) แต่ถ้าคุณบันทึกข้อมูลลงในคอนโซลซ้ำ ๆ เช่นการเชื่อมต่อผ่านrequestAnimationFrameมันอาจทำให้สิ่งต่างๆยุ่งเหยิงได้
ในการทดสอบนี้ฉันได้ตรวจสอบแนวคิดของ "บันทึกที่ซ่อนอยู่" ที่กำหนดเองสำหรับการใช้งานจริงซึ่งมีตัวแปรที่เก็บข้อความบันทึกพร้อมให้บริการตามต้องการ ปรากฎว่าเป็น
console.log,console.logแม้ว่า ทั้งสองเป็นฟังก์ชันที่ก่อให้เกิดผลข้างเคียง
                    console.logโดยตัวมันเองไม่ได้ส่งผลกระทบต่อประสิทธิภาพอย่างแท้จริงในแบบที่คุณจะสังเกตเห็นได้เว้นแต่คุณจะผูกเข้ากับตัวจัดการการเลื่อน / ปรับขนาด สิ่งเหล่านี้เรียกว่ามากและหากเบราว์เซอร์ของคุณต้องส่งข้อความไปยังคอนโซลเช่น 30 / 60x ต่อวินาทีมันอาจน่าเกลียด แล้วก็มีข้อผิดพลาดของ IE ที่ไม่อนุญาตให้คุณconsole.logปิดคอนโซลเลย :(
                    logging-on x 3,179 ops/sec ±2.07% (56 runs sampled) logging-off x 56,058,330 ops/sec ±2.87% (56 runs sampled) logging-off-stringify x 1,812,379 ops/sec ±3.50% (58 runs sampled) log-nothing x 59,509,998 ops/sec ±2.63% (59 runs sampled)
                    const DEBUG = true / false
DEBUG && console.log('string')
    หากคุณสร้างทางลัดไปยังคอนโซลในสคริปต์หลักทั่วไปเช่น:
var con = console;
จากนั้นใช้ con.log ("ข้อความ") หรือ con.error ("ข้อความแสดงข้อผิดพลาด") ตลอดทั้งรหัสของคุณในการผลิตคุณสามารถ rewire con ในตำแหน่งหลักเพื่อ:
var con = {
    log: function() {},
    error: function() {},
    debug: function() {}
}
    console.log = function(){}
                    การใช้คุณลักษณะการดีบัก console.log จะลดประสิทธิภาพการดำเนินการของ JavaScript หรือไม่ จะส่งผลต่อความเร็วของการเรียกใช้สคริปต์ในสภาพแวดล้อมการผลิตหรือไม่
แน่นอนว่าconsole.log()จะลดประสิทธิภาพของโปรแกรมของคุณเนื่องจากต้องใช้เวลาในการคำนวณ
มีวิธีปิดใช้งานบันทึกคอนโซลในสภาพแวดล้อมการใช้งานจริงจากตำแหน่งคอนฟิกูเรชันเดียวหรือไม่?
ใส่รหัสนี้ที่จุดเริ่มต้นของสคริปต์ของคุณเพื่อแทนที่ฟังก์ชัน console.log มาตรฐานเป็นฟังก์ชันว่าง
console.log = function () { };
    การเรียกใช้ฟังก์ชันใด ๆ จะทำให้ประสิทธิภาพลดลงเล็กน้อย แต่ไม่console.logควรมีผลกระทบใด ๆ
อย่างไรก็ตามมันจะทำให้เกิดข้อผิดพลาดที่ไม่ได้กำหนดในเบราว์เซอร์รุ่นเก่าที่ไม่รองรับ console
การตีประสิทธิภาพจะน้อยมากอย่างไรก็ตามในเบราว์เซอร์รุ่นเก่าจะทำให้เกิดข้อผิดพลาดของ JavaScript หากคอนโซลผู้ใช้เบราว์เซอร์ไม่ได้เปิดlog is not a function of undefinedอยู่ ซึ่งหมายความว่าโค้ด JavaScript ทั้งหมดหลังจากการเรียก console.log จะไม่ทำงาน
คุณสามารถสร้าง wrapper เพื่อตรวจสอบว่าwindow.consoleเป็นอ็อบเจ็กต์ที่ถูกต้องหรือไม่จากนั้นเรียก console.log ใน wrapper สิ่งง่ายๆเช่นนี้จะได้ผล:
window.log = (function(console) {
    var canLog = !!console;
    return function(txt) {
        if(canLog) console.log('log: ' + txt);
    };
})(window.console);
log('my message'); //log: my message
นี่คือซอ: http://jsfiddle.net/enDDV/
ฉันทำการทดสอบ jsPerf นี้: http://jsperf.com/console-log1337
ดูเหมือนจะใช้เวลาไม่นานกว่าการเรียกฟังก์ชันอื่น ๆ
แล้วเบราว์เซอร์ที่ไม่มีคอนโซล API ล่ะ? หากคุณจำเป็นต้องใช้ console.log สำหรับการดีบักคุณอาจรวมสคริปต์ไว้ในการปรับใช้งานจริงของคุณเพื่อแทนที่คอนโซล API ดังที่ Paul แนะนำในคำตอบของเขา
ฉันทำวิธีนี้เพื่อรักษาลายเซ็นดั้งเดิมของวิธีคอนโซล ในตำแหน่งทั่วไปโหลดก่อน JS อื่น ๆ :
var DEBUG = false; // or true 
จากนั้นตลอดรหัส
if (DEBUG) console.log("message", obj, "etc");
if (DEBUG) console.warn("something is not right", obj, "etc");