Search code examples
javascripthtmlajaxperformanceahah

AJAX vs AHAH Is there a performance advantage?


My concern is performance, is there a reason to to send the client XML instead of valid HTML? Like most things, I am sure it is application dependent. My specific situation is where there is substantial content being inserted into the web page that has been pulled from a database.

What are the advantages of either approach? Is the size of the content even a concern? Or, in the case of using XML, will the time for the JavaScript to process the XML into HTML counterbalance the extra time that would have been required to send HTML to start with?

Thanks, Jeff


Solution

  • It's important to recognize that even when fetching HTML you shouldn't just stick it straight into the DOM without processing it. If it's not transmitted through a secure protocol it could be subject to MITM attacks. Any time saved parsing XML is spent on sanitizing the HTML to prevent script injections.

    XML is more portable too. The data served in XML can be used anywhere on any page. HTML is different in this aspect (although it can be styled with CSS), not all browsers have a readily available parser without inserting the content into the DOM. Some may have DOMDocument(), but you can't rely on it for cross browser purposes. With XML, you can also target and extract the data you need effortlessly using XPath. With HTML (x-browser), you'd need to insert into the DOM first or use the ever-so-unreliable regexp method that really shouldn't ever be used.

    JSON is more lightweight, it does away with a lot of the bulk that comes with XML and HTML. Being native markup for JavaScript objects, it's also very easy to parse. Unlike XML and HTML, you can also access JSON data cross domain using JSON with Padding (JSONP).

    In summary, you need to choose the method that best suits your needs. Most people tend to go with JSON these days because it's very light weight, can be accessed cross domain and requires very little effort to parse with JavaScript.