6e89f0a006cdbb50151504b3107096e365136687Jenny Han Donnelly<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
6e89f0a006cdbb50151504b3107096e365136687Jenny Han Donnelly<html>
6e89f0a006cdbb50151504b3107096e365136687Jenny Han Donnelly<head>
6e89f0a006cdbb50151504b3107096e365136687Jenny Han Donnelly<title>DataSchema Tests</title>
6e89f0a006cdbb50151504b3107096e365136687Jenny Han Donnelly<script type="text/javascript" src="/build/yui/yui.js"></script>
6e89f0a006cdbb50151504b3107096e365136687Jenny Han Donnelly</head>
6e89f0a006cdbb50151504b3107096e365136687Jenny Han Donnelly
c28f85fdfe5f4318a887f384ac1e58d40414fdbaLuke Smith<body class="yui3-skin-sam">
6e89f0a006cdbb50151504b3107096e365136687Jenny Han Donnelly<h1>DataSchema Performance Tests</h1>
6e89f0a006cdbb50151504b3107096e365136687Jenny Han Donnelly<p><select id="testSelector"></select> <input type="button" value="Run Test" id="btnRun" disabled=true></p>
6e89f0a006cdbb50151504b3107096e365136687Jenny Han Donnelly
6e89f0a006cdbb50151504b3107096e365136687Jenny Han Donnelly<script type="text/javascript">
83051cc2f61c3e17f61b8f8f409a69c057db0e6bJenny DonnellyYUI({
c77d701a41f1b77424b988c2e63f2a8e6829c7e6Luke Smith filter: (window.location.search.match(/[?&]filter=([^&]+)/) || [])[1] || 'min',
c77d701a41f1b77424b988c2e63f2a8e6829c7e6Luke Smith allowRollup: false,
c77d701a41f1b77424b988c2e63f2a8e6829c7e6Luke Smith useBrowserConsole: false
83051cc2f61c3e17f61b8f8f409a69c057db0e6bJenny Donnelly}).use("console", "profiler", "dump", "datatype", "dataschema", function(Y) {
83051cc2f61c3e17f61b8f8f409a69c057db0e6bJenny Donnelly
83051cc2f61c3e17f61b8f8f409a69c057db0e6bJenny Donnelly // Set up the page
83051cc2f61c3e17f61b8f8f409a69c057db0e6bJenny Donnelly var btnRun = Y.one("#btnRun"),
83051cc2f61c3e17f61b8f8f409a69c057db0e6bJenny Donnelly selectTest = Y.one("#testSelector"),
83051cc2f61c3e17f61b8f8f409a69c057db0e6bJenny Donnelly allTests = [],
83051cc2f61c3e17f61b8f8f409a69c057db0e6bJenny Donnelly myConsole = new Y.Console().render();
83051cc2f61c3e17f61b8f8f409a69c057db0e6bJenny Donnelly
83051cc2f61c3e17f61b8f8f409a69c057db0e6bJenny Donnelly
83051cc2f61c3e17f61b8f8f409a69c057db0e6bJenny Donnelly btnRun.set("disabled", false);
83051cc2f61c3e17f61b8f8f409a69c057db0e6bJenny Donnelly Y.on("click", function(e){
83051cc2f61c3e17f61b8f8f409a69c057db0e6bJenny Donnelly run();
83051cc2f61c3e17f61b8f8f409a69c057db0e6bJenny Donnelly }, btnRun);
83051cc2f61c3e17f61b8f8f409a69c057db0e6bJenny Donnelly
83051cc2f61c3e17f61b8f8f409a69c057db0e6bJenny Donnelly function register(testName, testFn) {
83051cc2f61c3e17f61b8f8f409a69c057db0e6bJenny Donnelly var index = allTests.length;
83051cc2f61c3e17f61b8f8f409a69c057db0e6bJenny Donnelly allTests[index] = testFn;
83051cc2f61c3e17f61b8f8f409a69c057db0e6bJenny Donnelly
83051cc2f61c3e17f61b8f8f409a69c057db0e6bJenny Donnelly var optionEl = document.createElement("option");
83051cc2f61c3e17f61b8f8f409a69c057db0e6bJenny Donnelly optionEl.innerHTML = testName;
83051cc2f61c3e17f61b8f8f409a69c057db0e6bJenny Donnelly selectTest.appendChild(optionEl);
83051cc2f61c3e17f61b8f8f409a69c057db0e6bJenny Donnelly }
83051cc2f61c3e17f61b8f8f409a69c057db0e6bJenny Donnelly
83051cc2f61c3e17f61b8f8f409a69c057db0e6bJenny Donnelly function run() {
83051cc2f61c3e17f61b8f8f409a69c057db0e6bJenny Donnelly var test = selectTest.get("value");
83051cc2f61c3e17f61b8f8f409a69c057db0e6bJenny Donnelly Y.log("Starting " + test, "info", "perf");
83051cc2f61c3e17f61b8f8f409a69c057db0e6bJenny Donnelly allTests[selectTest.get("selectedIndex")].apply(this);
83051cc2f61c3e17f61b8f8f409a69c057db0e6bJenny Donnelly Y.log(test + " completed", "info", "perf");
83051cc2f61c3e17f61b8f8f409a69c057db0e6bJenny Donnelly }
83051cc2f61c3e17f61b8f8f409a69c057db0e6bJenny Donnelly
83051cc2f61c3e17f61b8f8f409a69c057db0e6bJenny Donnelly //Define tests
83051cc2f61c3e17f61b8f8f409a69c057db0e6bJenny Donnelly register("Test basic JSON schema parsing", function() {
83051cc2f61c3e17f61b8f8f409a69c057db0e6bJenny Donnelly // Setup
83051cc2f61c3e17f61b8f8f409a69c057db0e6bJenny Donnelly var schema = {
83051cc2f61c3e17f61b8f8f409a69c057db0e6bJenny Donnelly resultListLocator:"results",
83051cc2f61c3e17f61b8f8f409a69c057db0e6bJenny Donnelly resultFields: [
83051cc2f61c3e17f61b8f8f409a69c057db0e6bJenny Donnelly "id",
83051cc2f61c3e17f61b8f8f409a69c057db0e6bJenny Donnelly "firstname",
83051cc2f61c3e17f61b8f8f409a69c057db0e6bJenny Donnelly "lastname"
83051cc2f61c3e17f61b8f8f409a69c057db0e6bJenny Donnelly ]
83051cc2f61c3e17f61b8f8f409a69c057db0e6bJenny Donnelly },
83051cc2f61c3e17f61b8f8f409a69c057db0e6bJenny Donnelly data_in = {
83051cc2f61c3e17f61b8f8f409a69c057db0e6bJenny Donnelly results: []
83051cc2f61c3e17f61b8f8f409a69c057db0e6bJenny Donnelly },
83051cc2f61c3e17f61b8f8f409a69c057db0e6bJenny Donnelly data_out, i=0, startTime, endTime;
83051cc2f61c3e17f61b8f8f409a69c057db0e6bJenny Donnelly
83051cc2f61c3e17f61b8f8f409a69c057db0e6bJenny Donnelly // Populate data
83051cc2f61c3e17f61b8f8f409a69c057db0e6bJenny Donnelly for(; i<10000; i++) {
83051cc2f61c3e17f61b8f8f409a69c057db0e6bJenny Donnelly data_in.results[i] = {"id":i, "firstname":"George", "lastname":"Washington"};
83051cc2f61c3e17f61b8f8f409a69c057db0e6bJenny Donnelly }
83051cc2f61c3e17f61b8f8f409a69c057db0e6bJenny Donnelly
83051cc2f61c3e17f61b8f8f409a69c057db0e6bJenny Donnelly // The test
83051cc2f61c3e17f61b8f8f409a69c057db0e6bJenny Donnelly startTime = new Date();
83051cc2f61c3e17f61b8f8f409a69c057db0e6bJenny Donnelly data_out = Y.DataSchema.JSON.apply(schema, data_in);
83051cc2f61c3e17f61b8f8f409a69c057db0e6bJenny Donnelly endTime = new Date();
83051cc2f61c3e17f61b8f8f409a69c057db0e6bJenny Donnelly Y.log(endTime-startTime);
6e89f0a006cdbb50151504b3107096e365136687Jenny Han Donnelly
83051cc2f61c3e17f61b8f8f409a69c057db0e6bJenny Donnelly });
6e89f0a006cdbb50151504b3107096e365136687Jenny Han Donnelly
83051cc2f61c3e17f61b8f8f409a69c057db0e6bJenny Donnelly register("Test JSON schema parsing w/locators", function() {
83051cc2f61c3e17f61b8f8f409a69c057db0e6bJenny Donnelly // Setup
83051cc2f61c3e17f61b8f8f409a69c057db0e6bJenny Donnelly var schema = {
83051cc2f61c3e17f61b8f8f409a69c057db0e6bJenny Donnelly resultListLocator: "level_one.level_two[1]",
83051cc2f61c3e17f61b8f8f409a69c057db0e6bJenny Donnelly resultFields: [
83051cc2f61c3e17f61b8f8f409a69c057db0e6bJenny Donnelly {key:"name", locator:"fruit.goodforpie[1].name"},
83051cc2f61c3e17f61b8f8f409a69c057db0e6bJenny Donnelly {key:"calories", locator:"fruit.goodforpie[1].calories", parser:"number"},
83051cc2f61c3e17f61b8f8f409a69c057db0e6bJenny Donnelly {key:"profile", locator:"fruit.goodforpie[1].profile.taste[0]"}
83051cc2f61c3e17f61b8f8f409a69c057db0e6bJenny Donnelly ]
83051cc2f61c3e17f61b8f8f409a69c057db0e6bJenny Donnelly },
83051cc2f61c3e17f61b8f8f409a69c057db0e6bJenny Donnelly results = [],
83051cc2f61c3e17f61b8f8f409a69c057db0e6bJenny Donnelly data_in = {
83051cc2f61c3e17f61b8f8f409a69c057db0e6bJenny Donnelly level_one: {
83051cc2f61c3e17f61b8f8f409a69c057db0e6bJenny Donnelly level_two: [
83051cc2f61c3e17f61b8f8f409a69c057db0e6bJenny Donnelly "foo"
83051cc2f61c3e17f61b8f8f409a69c057db0e6bJenny Donnelly ]
83051cc2f61c3e17f61b8f8f409a69c057db0e6bJenny Donnelly }
83051cc2f61c3e17f61b8f8f409a69c057db0e6bJenny Donnelly },
83051cc2f61c3e17f61b8f8f409a69c057db0e6bJenny Donnelly data_out, i=0, startTime, endTime;
83051cc2f61c3e17f61b8f8f409a69c057db0e6bJenny Donnelly
83051cc2f61c3e17f61b8f8f409a69c057db0e6bJenny Donnelly // Populate data
83051cc2f61c3e17f61b8f8f409a69c057db0e6bJenny Donnelly for(; i<10000; i++) {
83051cc2f61c3e17f61b8f8f409a69c057db0e6bJenny Donnelly results[i] = {
83051cc2f61c3e17f61b8f8f409a69c057db0e6bJenny Donnelly "id": i,
83051cc2f61c3e17f61b8f8f409a69c057db0e6bJenny Donnelly "fruit":{
83051cc2f61c3e17f61b8f8f409a69c057db0e6bJenny Donnelly "goodforpie": [
83051cc2f61c3e17f61b8f8f409a69c057db0e6bJenny Donnelly {"name":"apple", "calories":"70"},
83051cc2f61c3e17f61b8f8f409a69c057db0e6bJenny Donnelly {"name":"banana", "calories":"70", "profile":{
83051cc2f61c3e17f61b8f8f409a69c057db0e6bJenny Donnelly "taste":["sweet"]
83051cc2f61c3e17f61b8f8f409a69c057db0e6bJenny Donnelly }
83051cc2f61c3e17f61b8f8f409a69c057db0e6bJenny Donnelly },
83051cc2f61c3e17f61b8f8f409a69c057db0e6bJenny Donnelly ]
6e89f0a006cdbb50151504b3107096e365136687Jenny Han Donnelly }
6e89f0a006cdbb50151504b3107096e365136687Jenny Han Donnelly }
83051cc2f61c3e17f61b8f8f409a69c057db0e6bJenny Donnelly }
83051cc2f61c3e17f61b8f8f409a69c057db0e6bJenny Donnelly data_in.level_one.level_two[1] = results;
83051cc2f61c3e17f61b8f8f409a69c057db0e6bJenny Donnelly
83051cc2f61c3e17f61b8f8f409a69c057db0e6bJenny Donnelly // The test
83051cc2f61c3e17f61b8f8f409a69c057db0e6bJenny Donnelly startTime = new Date();
83051cc2f61c3e17f61b8f8f409a69c057db0e6bJenny Donnelly data_out = Y.DataSchema.JSON.apply(schema, data_in);
83051cc2f61c3e17f61b8f8f409a69c057db0e6bJenny Donnelly endTime = new Date();
83051cc2f61c3e17f61b8f8f409a69c057db0e6bJenny Donnelly Y.log(endTime-startTime);
83051cc2f61c3e17f61b8f8f409a69c057db0e6bJenny Donnelly });
83051cc2f61c3e17f61b8f8f409a69c057db0e6bJenny Donnelly
83051cc2f61c3e17f61b8f8f409a69c057db0e6bJenny Donnelly register("Test XML schema parsing", function() {
83051cc2f61c3e17f61b8f8f409a69c057db0e6bJenny Donnelly var schema = {
83051cc2f61c3e17f61b8f8f409a69c057db0e6bJenny Donnelly resultListLocator: "item",
83051cc2f61c3e17f61b8f8f409a69c057db0e6bJenny Donnelly resultFields: [{key:"type", locator:"@type"}, {key:"rank", parser:Y.DataType.Number.parse}, "name", {key:"subnameatt", locator:"subitem/name/@type"}, {key:"age", locator:"subitem/age", parser:"number"}]
83051cc2f61c3e17f61b8f8f409a69c057db0e6bJenny Donnelly },
83051cc2f61c3e17f61b8f8f409a69c057db0e6bJenny Donnelly data_in = "<myroot rootatt='5'><top>topvalue</top><second nested='nestedsecond' /><allitems><livehere>",
83051cc2f61c3e17f61b8f8f409a69c057db0e6bJenny Donnelly data_out, i=0, startTime, endTime;
83051cc2f61c3e17f61b8f8f409a69c057db0e6bJenny Donnelly
83051cc2f61c3e17f61b8f8f409a69c057db0e6bJenny Donnelly //Populate data
83051cc2f61c3e17f61b8f8f409a69c057db0e6bJenny Donnelly for(; i<10000; i++) {
83051cc2f61c3e17f61b8f8f409a69c057db0e6bJenny Donnelly data_in += "<item type='foo'><name type='nametype0'>Abc</name><rank>"+i+"</rank><subitem><name type='subnametype0'>subABC</name><age>10</age></subitem></item>";
83051cc2f61c3e17f61b8f8f409a69c057db0e6bJenny Donnelly }
83051cc2f61c3e17f61b8f8f409a69c057db0e6bJenny Donnelly data_in += "</livehere></allitems></myroot>";
83051cc2f61c3e17f61b8f8f409a69c057db0e6bJenny Donnelly data_in = Y.DataType.XML.parse(data_in);
83051cc2f61c3e17f61b8f8f409a69c057db0e6bJenny Donnelly
83051cc2f61c3e17f61b8f8f409a69c057db0e6bJenny Donnelly // The test
83051cc2f61c3e17f61b8f8f409a69c057db0e6bJenny Donnelly startTime = new Date();
83051cc2f61c3e17f61b8f8f409a69c057db0e6bJenny Donnelly data_out = Y.DataSchema.XML.apply(schema, data_in);
83051cc2f61c3e17f61b8f8f409a69c057db0e6bJenny Donnelly endTime = new Date();
83051cc2f61c3e17f61b8f8f409a69c057db0e6bJenny Donnelly Y.log(endTime-startTime);
6e89f0a006cdbb50151504b3107096e365136687Jenny Han Donnelly });
83051cc2f61c3e17f61b8f8f409a69c057db0e6bJenny Donnelly});
6e89f0a006cdbb50151504b3107096e365136687Jenny Han Donnelly</script>
6e89f0a006cdbb50151504b3107096e365136687Jenny Han Donnelly</body>
6e89f0a006cdbb50151504b3107096e365136687Jenny Han Donnelly</html>