I/O conference page
web dev best practices
- concat js and css files
- compress js and css
- quartermile api improvement after using yui compressor
latency
- use firebug for local testing
- measuring latency internationally
-- use js: create img element w/ onload fn and report netwrok latency back
-- do the same for data calls
image spriting
- use yslow to measure network requests
cahce-headers
- can be an apache config FilesMatch
- it looks like we can do this in php as well by just setting a header
- use a rand var in query string to bust cache
server-assisted optimizations
- for social networks, forcing performance tweaks results in network-level performance gain
- social networks usually have better infrastructure than app devs
- opensocial
-- gadgets.io.getProxyUrl puts the url passed in on the cdn of the container
-- content-rewrite feature in gadget spec controls which features are optimized
-- use batch operations for network requests
opensocial best practices
- use OS 0.9 data pipelining and proxied content
- look on wiki.opensocial to learn more about data pipelining
- invalidation pattern
-- invalidates cache for app associated w/ oauth key
database scaling
- joins are very expensive
- use master/slave architecture to scale horizontally
- use database partitioning to overcome replication costs
- bigtable already handles this
- use memcache to cache everything you can and filter db results in software-layer
- store frequently used data in a json blob
background processing
- as activities are generated, a note is made in a queue, on a seperate schdule, a bg process runs ops on the items in queue
- users see a slight delay (minutes)
- in app engine, use cron.yaml
quartermile's (qm) data model
- enforce hard limits up front
- orkut limits friend lists to 1K, but myspace allows 100k +
- qm create artificial team concept and updates are limited to them
- app engine limits results to 1000 rows
- use cron to process and store expensive queries in the background
- store data in OS app data
-- it's all public, so don't put secrets in here
-- user-writable via js
-- super fast
-- perfect for storing pre-rendered bulk data
--- in bg, render data, push it to app data. when app loads, retreive data from app data and store it in div!
- goals
-- keep gadgets fast! we're competing for a user's attention
//use screencasts in presos
template-only profiles
- a way to declare the data an app needs w/o js
- produces fast profile rendering
- "process-on-server" OS feature
- all app's on orkut profiles must use templates
summary
- invalidation, cache headers, bg processes, app data, limited profiles have benefits in multiple ways
- cahcing static content can reduce traffic by 90%
questions
//"office hours" supplement talk subjects
Like this:
Like Loading...
Related