Skip to content

Instantly share code, notes, and snippets.

@joseph-montanez
Created March 19, 2012 00:20
Show Gist options
  • Save joseph-montanez/2086950 to your computer and use it in GitHub Desktop.
Save joseph-montanez/2086950 to your computer and use it in GitHub Desktop.
Components Test

Component Based Finished in: 935ms

Functional Based Finished in: 26ms

<cfscript>
timer label="Component Based Finished in" type="inline" {
import products2;
for (i = 0; i < 10000; i++) {
products = (new Products2()).getAll();
}
}
writeOutput("<br /><p>");
timer label="Functional Based Finished in" type="inline" {
include "products.cfc";
for (i = 0; i < 10000; i++) {
products = productsGetAll();
}
}
</cfscript>
<cfscript>
component
{
public void function createThumbnail(string original, string destination, size)
{
image = ImageRead(original);
imageScaleToFit(image, width, height);
imageWrite(image, destination, 0.75);
}
public struct function getAll() hint = "Get All Products"
{
if (!cacheKeyExists('products')) {
productFiles = directoryList("./products", false, "query");
products = StructNew();
for (i = 1; i <= productFiles.Recordcount; i = i + 1) {
fileName = productFiles["name"][i];
key = listToArray(fileName, ".")[1];
directory = productFiles["directory"][i];
if (!FindNoCase(".json", fileName) or FindNoCase("~", fileName)) {
continue;
}
jsonData = fileRead(directory & "/" & fileName);
try {
item = deserializeJSON(jsonData);
structInsert(products, key, item);
if (structKeyExists(item, "images")) {
if (isArray(item.images)) {
for (n = 1; n <= ArrayLen(item.images); n++) {
imagePath = item.images[n];
smallImagePath = imagePath & '.small.jpg';
tinyImagePath = imagePath & '.tiny.jpg';
sizes = [[smallImagePath, 420], [tinyImagePath, 131]];
for (j = 1; j <= ArrayLen(sizes); j++) {
size = sizes[j];
thumbnailName = size[1];
width = size[2];
height = size[2];
if (!fileExists(thumbnailName)) {
this.createThumbnail(imagePath, thumbnailName, width);
}
}
}
}
}
}
catch (any e) {
if (e.type == "java.lang.OutOfMemoryError") {
writeOutput("Please upload a smaller image <br />");
} else {
//Write an email or log error?
writeDump(e);
}
}
}
cachePut('products', products);
} else {
products = cacheGet('products');
}
return products;
}
}
</cfscript>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment