[Edited]
In a simple word, we can say
Mage::getModel('catalog/product')->load(1) is object of Magento product class Mage_Catalog_Product_Model.
Where ,$collection->getFirstItem() is object of Magento product collection class Mage_Catalog_Product_Model_Resource_Product_Collection
or Mage_Catalog_Model_Resource_Category_Flat_Collection.
The difference between those two depends on magento flat setting
I try to describe my point of view in below
When use Product flat setting enable:
Table:
`getFirstItem()`,product has been load from `catalog_product_flat_STOREID` table.
`load()`, product is load from product master table `catalog_product_entity` with join with `multiple models,modules`.
Attributes:
**getFirstitem:** You can only get `few product attributes values Whose setting is enable for Use in Product listing.
load():get all attributevalues of a particular product with inventory prices,tax etc in full details.`
Speedup:
**getFirstitem:** it more firster ,because of `data is coming from single table`.
`load()` surely slow because `multiple eav tables join,multiple module join like tax,inventory etcs`
When disable product Flat setting:
Table:
`getFirstItem():` product has `been load from catalog_product_entity table and join multiple eav,products eav using`
function like `addAttributeToSelect,addAttributeToSort,addAttributeToFilter()` etc.
`load()` same `beehive whenever flat is enable`
Attributes:
`getFirstitem:`You can get `only those attribute value whose are select via addAttributeToSelect.,addUrlRewriteToResult() etc.`
`load():` get `all attribute values of a particular product with inventory prices, tax etc in full details`.
Speedup:
`getFirstitem:` T`otaly depend on attribute selection and join product t related models`.
load() s`urely slow because multiple eav tables join, multiple module join like tax, inventory etc`.
As per my point view ,it totally depends on attribute selection,filter etc of product. If your attribute value is filled collection then you need to use collection.
Otherwise use Product model load. Because of collection is not enable giving all data.