           (deferred:nextc it
             (lambda ()
               (with-current-buffer buffer
-                (ycmd-notify-file-ready-to-parse)))))))))
+                (let ((tick (buffer-chars-modified-tick)))
+                  (unless (equal tick ycmd--last-modified-tick)
+                    (setq ycmd--last-modified-tick tick)
+                    (ycmd-notify-file-ready-to-parse)))))))))))
 
 (defun ycmd--on-save ()
   "Function to run when the buffer has been saved."

        (if (ycmd--server-ready? :include-subserver)
            (progn
              (ycmd--with-all-ycmd-buffers
                (ycmd--report-status 'unparsed))
              (throw 'ready t))
          ;; timeout after specified period
          (when (< ycmd-startup-timeout

      (deferred:$
        (ycmd--request "/event_notification" content)
        (deferred:nextc it handler))
      ;; catch
      (deferred:error it
        (lambda (err)
          (message "Error sending %s request: %s" event-name err)
