     writer() while writer = @documentWriters.shift()
 
   startPollingDocument: ->
-    window.addEventListener('resize', @performDocumentPoll)
+    window.addEventListener('resize', @requestDocumentPoll)
     @observer.observe(document, {subtree: true, childList: true, attributes: true})
 
   stopPollingDocument: ->
-    window.removeEventListener('resize', @performDocumentPoll)
+    window.removeEventListener('resize', @requestDocumentPoll)
     @observer.disconnect()
 
-  performDocumentPoll: =>
+  requestDocumentPoll: =>
     if @documentUpdateRequested
       @performDocumentPollAfterUpdate = true
     else
-      poller() for poller in @documentPollers
-      return
+      @debouncedPerformDocumentPoll()
+
+  performDocumentPoll: ->
+    poller() for poller in @documentPollers
+    return

  documentUpdateRequested: false
  documentReadInProgress: false
  performDocumentPollAfterUpdate: false

  constructor: ->
    @views = new WeakMap

    @documentReaders = []
    @documentPollers = []

    @observer = new MutationObserver(@requestDocumentPoll)
    @debouncedPerformDocumentPoll = _.throttle(@performDocumentPoll, @minimumPollInterval).bind(this)

  # Essential: Add a provider that will be used to construct views in the
  # workspace's view layer based on model objects in its model layer.
