Posted by: vx on: May 25, 2009
Caching of image data in your Flex application is one of the best ways to avoid loading those large images again and again, and this can improve performance and reduce overhead of loading external resources.
We are not discussing about using the cacheAsBitmap property to improve rendering performance or the cachePolicy property to speed up animations. Its the caching of actual bitmap data of an image. As the 2 are different in one case we just cache the image data of an image that has to be animated and component doesnot reload any image. in the other case we reload the data on demand for example user profile with display picture. In this case the picture mostly does not change (well it does but we can handle it differently) so we dont need to reload the image at each time the user profile data of the same person is called.. so we can impliment a cache here.
You’ll need a hash map to store the image data. A Dictionary or an associative array will also work just fine. Loading an image for the first time is the same as usual. You create a new Image object and add a listener for the COMPLETE event or it could be any of your custom event for the sake of example we will follow :
var image : Image = new Image ();
image.addEventListener (Event.COMPLETE, onImageLoad);
Once the image has finished loading, you add a copy of the bitmap data to the hash map using the image URL as the hash key as the URL for any image will always be distinct:
private var imageCache : hashMap = new hashMap(); // create hashmap only once
private function onImageLoad (event : Event) : void{
var image : Image = event.target as Image;
var imageURL : String = image.source;
if (! imageCache.containsKey (imageURL))
{
var bitmapData : BitmapData = new BitmapData
(image.content.width, image.content.height, true);
bitmapData.draw (image.content);
imageCache.put (imageURL, bitmapData);
}
}
The above method is called and the image is cached in the hash map. Now you can use the image as many times as we want without ever having to load it again. A good exapmle of this could be loading user profile whenever you reload the profile data one need not fetch the user profile picture. the picture can directly be accessed from the hashmap.
How do we use the image we stored, Its simple you need to check the hash map each time you call for the loading the image just check if you’ve already cached it:
// check the hashmap when ever next you want to load the image
if (imageCache.containsKey (imageURL)){
image.source = new Bitmap (imageCache.getValue (imageURL));
}
thats it now you can use the cache whenever required.
Posted by: vx on: May 25, 2009
Date objects don’t have a built-in compare() method, but comparing dates easy.Don’t look at the Date objects , but rather the values represented by the objects using the Date.getTime() method:
Date.getTime() : Returns the number of milliseconds since midnight January 1, 1970, universal time, for a Date object. Use this method to represent a specific instant in time when comparing two or more Date objects.
This makes comparing dates as trivial as comparing numbers. Here’s a simple method that compares two dates, returning minus one (-1) if the first date is before the second, zero (0) if the dates are equal, or one (1) if the first date is after the second:
public function compare (date1 : Date, date2 : Date) : Number {
var date1Timestamp : Number = date1.getTime ();
var date2Timestamp : Number = date2.getTime ();
var result : Number = -1;
if (date1Timestamp == date2Timestamp){
result = 0;
} else if (date1Timestamp > date2Timestamp){
result = 1;
}
return result;
}
Posted by: vx on: May 21, 2009

to see large version, right click save as image
Posted by: vx on: May 21, 2009
the Bindable tag is widely used in flex and in simpleterms its used to bind an entity to other entity if there is a change in the source.
The tag can have the following form:
[Bindable]
public var foo;
The Flex compiler automatically generates an event named propertyChange for the property. If the property value remains the same on a write, Flex does not dispatch the event or update the property.
You can also specify the event name, as the following example shows:
[Bindable(event="fooChanged")]
public var foo;
In this case, you are responsible for generating and dispatching the event, typically as part of some other method of your class. You can specify a [Bindable] tag that includes the event specification if you want to name the event, even when you already specified the [Bindable] tag at the class level.
In order for binding to work you need to make sure changes to the data are known to the framework. Unlike most of dynamic languages implementations, ActionScript 3 is built for speed and heavily utilizes direct access to the properties and methods. In this situation the only way for data to notify the world about the changes is to embed the code to fire change events.
Flex compiler helps in a big way by introducing [Bindable] and [Managed] tags. If you prefix your variable with [Bindable] tag, compiler does the following:
1. Inspects every public property and setter of you variables class and generates wrapper getters/setters that adds event notification.
2. Every time “bindable” property is being used, compiler references these getters/setters instead of original properties
Comments