I've written an add-on that makes heavy use of ID properties for storing and retrieving custom game-engine metadata within .blend files. I've always been annoyed by the fact that Blender seems to reload the entire scene anytime a property is set with a new value. My scenes potentially have hundreds of materials, so the reload operation is lengthy while my graphics driver re-compiles *all* the 3D view shaders whenever I set a property.
I understand that it is a safe assumption to reload the scene anytime a property is set, but the properties in my particular add-on have absolutely no effect on the content of the scene. To mitigate the issue, I have added a new RNAProperty flag to Blender called 'NO_SCENE_UPDATE'. It's used like so:
class MyAddonProps(bpy.types.PropertyGroup):
prop1 = bpy.props.IntProperty(name="Prop One", options={'ANIMATABLE', 'NO_SCENE_UPDATE'})The biggest issue with this approach is I've been unable to make it backwards-compatible with non-patched Blender builds (which insist on throwing an exception for unknown option enumerations); so my add-on does this to exclude the property in vanilla Blender (I did the mod in a separate Git branch):
PROP_OPTS = {'ANIMATABLE'}
if bpy.app.build_branch == b'no_scene_update (modified)':
PROP_OPTS = {'ANIMATABLE', 'NO_SCENE_UPDATE'}
class MyAddonProps(bpy.types.PropertyGroup):
prop1 = bpy.props.IntProperty(name="Prop One", options=PROP_OPTS)I realise this is a tricky proposition to implement, but it has helped my productivity tremendously.