Improve memory-efficiency of DOMElement_toString in domstubs
Test case: Using the PDF file from https://github.com/mozilla/pdf.js/issues/8534 node --max_old_space_size=200 examples/node/pdf2svg.js /tmp/FatalProcessOutOfMemory.pdf Before this patch: Node.js crashes due to OOM after processing 10 pages. After this patch: Node.js crashes due to OOM after processing 19 pages.
This commit is contained in:
		
							parent
							
								
									8e9b4b5ff2
								
							
						
					
					
						commit
						849d8cfa24
					
				| @ -91,24 +91,27 @@ DOMElement.prototype = { | ||||
|   }, | ||||
| 
 | ||||
|   toString: function DOMElement_toString() { | ||||
|     var attrList = []; | ||||
|     for (i in this.attributes) { | ||||
|       attrList.push(i + '="' + xmlEncode(this.attributes[i]) + '"'); | ||||
|     var buf = []; | ||||
|     buf.push('<' + this.nodeName); | ||||
|     if (this.nodeName === 'svg:svg') { | ||||
|       buf.push(' xmlns:xlink="http://www.w3.org/1999/xlink"' + | ||||
|                ' xmlns:svg="http://www.w3.org/2000/svg"'); | ||||
|     } | ||||
|     for (var i in this.attributes) { | ||||
|       buf.push(' ' + i + '="' + xmlEncode(this.attributes[i]) + '"'); | ||||
|     } | ||||
| 
 | ||||
|     buf.push('>'); | ||||
| 
 | ||||
|     if (this.nodeName === 'svg:tspan' || this.nodeName === 'svg:style') { | ||||
|       var encText = xmlEncode(this.textContent); | ||||
|       return '<' + this.nodeName + ' ' + attrList.join(' ') + '>' + | ||||
|              encText + '</' + this.nodeName + '>'; | ||||
|     } else if (this.nodeName === 'svg:svg') { | ||||
|       var ns = 'xmlns:xlink="http://www.w3.org/1999/xlink" ' + | ||||
|                'xmlns:svg="http://www.w3.org/2000/svg"' | ||||
|       return '<' + this.nodeName + ' ' + ns + ' ' + attrList.join(' ') + '>' + | ||||
|              this.childNodes.join('') + '</' + this.nodeName + '>'; | ||||
|       buf.push(xmlEncode(this.textContent)); | ||||
|     } else { | ||||
|       return '<' + this.nodeName + ' ' + attrList.join(' ') + '>' + | ||||
|              this.childNodes.join('') + '</' + this.nodeName + '>'; | ||||
|       this.childNodes.forEach(function(childNode) { | ||||
|         buf.push(childNode.toString()); | ||||
|       }); | ||||
|     } | ||||
|     buf.push('</' + this.nodeName + '>'); | ||||
|     return buf.join(''); | ||||
|   }, | ||||
| 
 | ||||
|   cloneNode: function DOMElement_cloneNode() { | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user