में जे एस में वस्तु संपत्तियों के हटा दें। यह केवल आदिम कुंजी के लिए काम करता है, इसलिए कोई बाल्टी नहीं, कोई हैश-कोड इत्यादि। मुझे जिस समस्या का सामना करना पड़ा वह हटाई गई विधि को कार्यान्वित कर रहा है। सादा delete
का उपयोग करना अस्वीकार्य रूप से धीमा है। बड़े मानचित्रों के लिए यह ES6 मानचित्र हटाने से 300-400x धीमी है। यदि वस्तु का आकार बड़ा है तो मैंने बड़े प्रदर्शन में गिरावट देखी है। नोड जे एस 7.9.0 (और उदाहरण के लिए क्रोम 57) पर अगर वस्तु 50,855 गुण है delete
प्रदर्शन के रूप में ES6 मानचित्र में ही है। लेकिन 50856 गुणों के लिए ईएस 6 मानचित्र परिमाण के 2 आदेशों पर तेज़ है। यहाँ सरल कोड पुन: पेश करने के लिए है:धीरे बस अपने आप को मैं एक <a href="https://github.com/iskolbin/tsstringmap" rel="nofollow noreferrer">simple ES6 Map+Set-like implementation based on plain JS Object</a> लिखा टाइपप्रति का एक सा प्रशिक्षित करने के लिए वी 8
// for node 6: 76300
// for node 7: 50855
const N0 = 50855;
function fast() {
\t const N = N0
\t const o = {}
\t for (let i = 0; i < N; i++) {
\t \t o[i] = i
\t }
\t const t1 = Date.now()
\t for (let i = 0; i < N; i++) {
\t \t delete o[i]
\t }
\t const t2 = Date.now()
\t console.log(N/(t2 - t1) + ' KOP/S')
}
function slow() {
\t const N = N0 + 1 // adding just 1
\t const o = {}
\t for (let i = 0; i < N; i++) {
\t \t o[i] = i
\t }
\t const t1 = Date.now()
\t for (let i = 0; i < N; i++) {
\t \t delete o[i]
\t }
\t const t2 = Date.now()
\t console.log(N/(t2 - t1) + ' KOP/S')
}
fast()
slow()
मुझे लगता है मैं delete
गुण के बजाय सकता है सिर्फ undefined
या कुछ गार्ड वस्तु के लिए उन्हें सेट है, लेकिन इस इच्छा गड़बड़ कोड, क्योंकि hasOwnProperty
नहीं होगा सही ढंग से काम करें, for...in
लूप को अतिरिक्त चेक की आवश्यकता होगी और इसी तरह। क्या कोई और अच्छा समाधान है?
पीएस मैं नोड 7.9.0 का उपयोग कर रहा पर OSX सिएरा
संपादित टिप्पणियाँ लोगों के लिए धन्यवाद, मैं ओ पी/एस => KOP/एस तय की। मुझे लगता है कि मैंने बल्कि बुरी तरह से निर्दिष्ट सवाल पूछा, इसलिए मैंने शीर्षक बदल दिया। कुछ जांच के बाद मुझे पता चला कि उदाहरण के लिए फ़ायरफ़ॉक्स में ऐसी कोई समस्या नहीं है - लागत को हटाना रैखिक रूप से बढ़ता है। तो यह सुपर स्मार्ट वी 8 की समस्या है। और मुझे लगता है कि यह सिर्फ एक बग :(
मुझे ओएस एक्स पर क्रोम में एक ही प्रभाव दिखाई देता है। – Barmar
संबंधित: http://stackoverflow.com/questions/27397034/why-is-delete-slow-in-javascript –
हां, 'हटाएं' है धीमी होने के लिए जाना जाता है – Bergi