How to effectively use page properties

deki-users
2009-09-10
2013-02-26
  • As I monkey around with page properties, I keep coming up with more questions on how to use them effectively.

    Let's talk about page ratings as an example.  In my current implementation, each page has a single property that stores both the collection of ratings from individuals, and also the total ratings, so the page doesn't have to wade through the values to display the current ratings (that effort is handled client-side, when the property is being written).

    So where do all these page ratings properties get stored?  Here are some interesting issues:
    1) They can't necessarily be stored on the page itself, because it's easy to imagine a page that is restricted for editing, but still wants to allow ratings.
    2) You'd prefer that the star rating template could figure out on its own where the data is stored (without an argument), so it's not dependent on a correct call to work properly.
    3) If I centralized the page ratings on a single page, I introduce a potentially performance problem.  Let's say I have 10,000 pages, that means I'll have a single page with 10,000 properties.  How slow will it be to fetch the properties from there?  I don't know, testing that scenario would take some effort.  There'd have to be *some* performance implications.
    4) I could cross my fingers and use the page's talk page, though it's a bit of a pain to figure out the exact path for the talk page, and once again I have no guarantee that the users will have write access to the talk page (though I don't imagine it's too common to restrict the talk pages, it can be done).

    I just noticed that the dekiapi() functions for accessing properties don't actually offer the option of accessing the properties from a different page.  So if I want to relocate the properties elsewhere, I'll need to  roll some new Javascript (probably not a big deal, but still).

    So I'm left scratching my head at the moment.  What's a smart way to approach this?  *Is* there a smart way, or am I asking properties to do more than they're designed for at the moment?

    To view responses click here: http://forums.developer.mindtouch.com/showthread.php?t=6287