- We design and build extraordinary applications for companies looking to make the next great idea a reality.
- learn more
A quick update on Really Simple History
Progress on Really Simple History is progressing nicely, though I'm taking a break this week to finish up my presentation for next week's O'Reilly Web 2.0 Expo in San Francisco (more on that tomorrow).
In taking RSH one step closer to a 1.0 release, I am basically re-writing everything from the ground up. My objectives include the following:
- Fix all outstanding bugs: This is a no-brainer.
- Support more browsers: For IE8, I'll be using its built-in hash-change event to get rid of timers. For Firefox 3, I'll basically just road-test to make sure everything still works. For Safari 3 and Opera 9.5, I'll do better version detection so that hacks required by earlier releases of those browsers get deployed only for the versions that need them. Safari 2 and Opera <9.5 will still be hack city, but the latest and greatest will use the same methods as Firefox.
- Untangle the code: In Brad Neuberg's original RSH 0.4, he had to support only two different methods of history management: The IE6 version, and the verison for Opera/Firefox. (Safari wasn't supported). Thanks to huge bugs in Safari 2.x and Opera 9.x (prior to 9.5), RSH 0.6 needed branching code within several different methods to handle four different versions of its history storage routine. With support for IE8, that will jump to five separate implementations. Clearly, the library would be much easier to develop, debug, maintain and read if code to support each implementation weren't intermixed within several methods. At the cost of a KB or so in code size, I plan to use lazy function definition so that browser-specific code can be encapsulated better within each method.
- Use one global object rather than two: dhtmlHistory and dhtmlStorage will go the way of the dinosaurs to make way for one unified object called rsh.
- Lock down the code: I'm using Douglas Crockford's JavaScript Module Pattern and closures to make private methods truly private. The new rsh object will expose only those methods that application developers actually need to use.
- Simplify, simplify, simplify: The plain-vanilla version of the new rsh object will support the use case that, according to my users, is most popular: The use of the URL hash as a virtual querystring. RSH 0.4 and 0.6 also offered an alternate use case in which the URL hash could serve as the key to recover a large JSON data store squirreled away on the page in a hidden form field. However, this use case seems to be used by a minority of application developers, and it adds great complexity and size to the library. I will still provide this functionality, but it will be isolated in its own plug-in.
- Adapt or die: Speaking of plug-ins, all low-level DOM functionality (cross-browser event listeners, JSON utilities, etc.) will likewise be isolated in a separate adapter file. I'll then call upon members of the RSH community for help fashioning adapters for various popular Ajax frameworks. The result will be a modular library that can be deployed with its own adapter in the absence of an Ajax framework, but whose size can be reduced when low-level functionality can be delegated to other frameworks at use in the application.
I look forward to sharing the code-in-progress in the coming weeks.
Topics: Ajax Bookmarking, Really Simple History
Comments: 7 so far
Leave a comment
About Pathfinder
Recent
- Faster JavaScript for Firefox 3.1 Thru JIT
- Implementing linked multiselects with jQuery, LiveQuery, and Low Pro: Part 2: First pass at the actual code
- I’m Cranky Because I’m Not Getting Enough REST
- Flex Gauge Component Example with source
- Plugging Some Cool Tools
- Implementing linked multiselects with jQuery, LiveQuery, and Low Pro: Part 1: Requirements and interaction design
- Many Varied Components, or… Multi Variable Complexity, or… Mainly Vanilla Coding
- Custom Flex 3 Lightweight Preloader with source code
- Mass Assigning Inheritance Column Values for ActiveRecord STI with Rails
- Working effectively as a team of one: Five tips for front-end developers on Agile teams
Archives
- August 2008
- July 2008
- June 2008
- May 2008
- April 2008
- March 2008
- February 2008
- January 2008
- December 2007
- November 2007
- October 2007
- September 2007
- August 2007
- July 2007
- June 2007
- May 2007
- April 2007
- March 2007
- February 2007
- January 2007
- December 2006
- November 2006
- October 2006
- September 2006
- August 2006
- July 2006
- June 2006
- May 2006
- April 2006
- March 2006
Topics
.NET
3d
3D GPS
Accessibility
actionscript
activerecord
Add new tag
ADO.NET Entity Framework
Adobe
Adobe AIR
Advertising
agile
Agile Development
AIR
Ajax
Ajax Applications
Ajax Bookmarking
Ajax Components
Ajax Development
Ajax Examples
Ajax Frameworks
Ajax Intervention
Ajax libraries
AJAX Obfuscation
Ajax Performance
Ajax Products
Ajax Tools
Ajax Widgets
Analysis
Android
Announcement
Announcements
antennae
Apollo
Application Architecture
Application Development
ASP.NET
Asynchronous Processing
awards
Back Button
Benchmarking
Best Practices
BitmapData.draw
BJAX
Blaze Advisor
blog
blogging
Books
Browsers
Business Reasons for Ajax
Business Rules
C#
Canvas
Case Studies
Chicago
CMS
COBOL
Code Generation
Color
COMET
Conference
Consistency
Content Management
CRM
CSS
Custom Flex Component
Degrafa
Design
Design Patterns
Desktop
Desktop RIA
Developer's Notebook
Diagnose
Dojo
Domain Knowledge
Drools
Echo2
Echo3
Editorial
ERP
Ethnographic Research
Ext JS
Facebook
FileReference
Firefox
Firefox Extensions
Flash
flash awards
flash player 10
Flex
flexunit
Flow
Frameworks
front end
front end development
Games
Gauge Component
Google
Google calendar
Google Gears
Grails
Graphics
Greasemonkey
Groovy
GStreamer
Gwittir
GWT
Healthcare
Hibernate
IDE
Ideation
IE
IE6
IE7
IE8
ILOG JRules
Information Architecture
Innovation
Instructional Design
Interaction Design
Interview
iPhone
iTunes
Java
Javascript
JavaScript frameworks
Javascript Libraries
JBoss Rules
Jess
Jetty
JIT
Jobs
jQuery
JSF
JSON
JSR-94
Lazlo
Legacy Systems
lightweight
LinkedIn
LINQ
Logical Model and Conceptual Model
Low Pro
Mac
Mash Note
Mashups
MetaWidget
Methodology
Microformats
Microsoft
Mobile
Mootools
Mozilla
Music
MVC
MySql
Object-Oriented
Object Relation Mapping (ORM)
Office
OOP
Open Screen
Open Source
Opera
ORM
pagination
Pair Programming
papervision3d
Patterns
Peer Creation
Performance
Personas
PHP
plugin
preloader
process
Web/Tech
Progressive Enhancement
Project Website
Prototype
Prototyping
PV3D
QA
qooxdoo
Radiant CMS
rails
Really Simple History
References
Requirements
Requirements
Alice Toth
Requirements Visualization
Restlet
RETE
Review
Rich Interactions
ruby
Ruby on Rails
SaaS
Safari
San Francisco
Scalability
Scenarios
Scriptaculous
SDLC
Search
Security
Selenium
Semantic web
SEO
Server Side
Silverlight
SOA
Social Networking
Software Processes
Songbird
SpiderMonkey
Sprajax
Spreadsheets
Standards
STI
Story Telling
Struts
Tamarin
Task Flows
Test Driven Development
Testing
Tilt Component
Tools
TraceMonkey
Training
Trends
Tumblr
Tutorial
Tutorials
Unit Tests
Usability
Usability Testing
User Experience
user experience design
user interface
User Interface Standards
User Research
UXD
Video
Visualization
VLC
Volta
Web/Tech
Web 2.0
Web Design
Web Development
Webkit
Weblogs
Web Services
Web Standards
Widgets
will_paginate
Windows
Wireframes
WordPress
workflow
XML
XML Metadata
XUL
Yahoo Map AS3 API
Zeigarnik
Zeigarnik Effect
ZK


Sounds like you are making some great choices about refactoring RSH and moving it forward.
Wanna grab a free lunch at Google next week when you are in town? Ping me by email and we can schedule a time to meet.
Comment by Brad Neuberg, Tuesday, April 15, 2008 @ 8:08 pm
thanks, that was good to know
Comment by bloggers mosaic, Wednesday, April 16, 2008 @ 9:06 am
This is good information, thanks for the update! A number of users on the RSH group have posted about IE6/7 losing the cached history object when navigating offsite then clicking the back button. I’ve really wanted to use RSH, but this bug has kept me from doing so as I’m in an intranet scenario where (roll eyes) IE is the standard browser. I really hope this is an item that you’re working on as, regardless, IE (specifically legacy versions of it) tends to rule the airwaves so to speak.
Comment by Kerr, Thursday, April 17, 2008 @ 7:50 am
Great news. I dont know wether it has been suggested but it would be great if you added some way of changing existing history entries after they have been added. I guess the ability to change the most recent history entry would be the most desireable.
Comment by Robert Kajic, Tuesday, April 29, 2008 @ 3:05 am
Agree completely with the “bloggers mosaic” comment about the problems with IE6 and IE7. Unless it supports Internet Exploder I can’t use it in a commercial environment.
If anyone knows of a COMPLETELY FUNCTIONAL history manager please email me at tewehrej@moc.oohay (reverse the name and ISP in the email address — possibly vain attempt to stop spam-bots on my part).
Jerry H.
Comment by Jerry Hewett, Tuesday, April 29, 2008 @ 4:11 pm
This is great news. Any idea of a release date?
Comment by Jamie Hill, Thursday, July 24, 2008 @ 2:34 pm
Sorry for the double comment but do you know a way to determine which of the ‘back’ or ‘forward’ buttons were clicked in the listener.
Thanks,
Jamie
Comment by James Hill, Monday, July 28, 2008 @ 12:16 pm