 
   positionLeftForLineAndColumn: (lineElement, column) ->
     return 0 if column is 0
+
+    @pixelLeftCache ?= {}
+    cacheKey = lineElement.getAttribute('line-id')+':'+column
+
+    if @pixelLeftCache[cacheKey]?
+      #console.log 'hit', cacheKey
+      return @pixelLeftCache[cacheKey]
+
     delta = 0
     iterator = document.createNodeIterator(lineElement, NodeFilter.SHOW_TEXT, acceptNode: -> NodeFilter.FILTER_ACCEPT)
     while textNode = iterator.nextNode()

    range.collapse()
    leftPixels = range.getClientRects()[0].left - Math.floor(@scrollView.offset().left) + Math.floor(@scrollLeft())
    range.detach()
    leftPixels

  pixelOffsetForScreenPosition: (position) ->

    @pendingChanges = []
    @newCursors = []
    @newSelections = []
    @lineId = 0
    @pixelLeftCache = {}

    if editSession?
      @edit(editSession)
