Есть кеш - вы можете получить к нему доступ с помощью $.cache
.И, как сказал TJ Crowder, это, скорее всего, причина того, что вы не убираете себя должным образом.
Сделайте Object.keys($.cache).length;
в своей консоли, чтобы проверить размер кэша - поиграйте некоторое время и снова проверьте, чтобыподтвердите, что кэш увеличивается, чтобы подтвердить утечки на основе jquery
, и вы вызываете утечку, поскольку mouseup не отменяет привязку событий mouseup и mmousemove
$(document).mouseup(function(){
$(document).unbind('mouseup').unbind('mousemove');
isDown = false;
startFrame = currentFrame;
});
, это должно сильно помочь
Проблема заключалась в том, что в основном каждый раз, когда вы нажимали мышь, вы снова и снова связывали mousemove и mouseup, поэтому после нескольких нажатий все вычисления умножались на количество нажатий мыши.Вы также можете использовать пространство имен для событий mousemove и mouseup для отмены привязки по пространству имен, а не по двум событиям по отдельности.
Кэшированные переменные также могут немного помочь - особенно при таких тяжелых операциях - mousemove запускает много
edit:
для удаления событий с анонимными функциями используйте пространства имен
var doc = $(document);
doc.bind('mousedown', function(e) {
doc.bind('mousemove.namespace', function(e) { ... });
doc.bind('mouseup.namespace', function(e) {
doc.unbind('.namespace');
// do whatever else you need to do on mouseup
});
});
просто измените пространство имен на то, что вам больше подходит!Обратитесь к документации jQuery для получения дополнительной информации о событиях в пространстве имен http://docs.jquery.com/Namespaced_Events
, кроме того, если вы не передадите какую-либо функцию типу события, который хотите отменить, он отменит все события данного типа независимо от его пространства именили если он был назван функцией или анонимным