Владимир М.
578 сообщений
#15 лет назад
Странно что все разбирают оптимизацию серверной части. тут самое узкое место - конкретно браузер, конкретно его жаваскрипт.
вызываете функцией саму себя? то есть не по таймеру, а непрерывно, рекуррентно? так комп от этого и виснет - напишите пустую js функу типа function hangUper(){ return hangUper();} в ней как видите нет никаких вызовов аяксом и вообще ничего нет - но она с удовольствием повесит комп рано или поздно...
--------------------
к задаче я бы подошел математически )).
возьмкм за постулат что курсор по экрану едет по траектории, обладающей двумя свойствами:
- непрерывность (т.е. курсор не может мгновенно перейти из точки 800, 600 в точку 600, 800)
- инертность - причем довольно высокая для курсора ползающего по веб-странице (т.е. курсор на протяжении многих поинтов ходит по прямой или по дуге монотонной кривизны)
--------------------
этого достаточно, чтобы написать предиктор, который будет интерполировать (с весьма высоким процентом точности) траекторию движения мыши между реальными замерами. частота же замеров с отсылкой по аяксу (интервал между ними) вычисляется из параметров пройденной за последние секунды траектории - чем она спокойнее тем реже нам надо мерять координаты.
Николай Г.
601 сообщение
#15 лет назад
Конечно, следует уточнить, чем собственно должен заниматься пользователь, что это вообще такое будет то... Но как правило курсор либо стоит на месте, либо перемещается с очень большой скоростью... Отсылать информацию, когда курсор не шевелится необязательно. А вот когда он шевелится - интерполировать практически бесполезно.
Владимир М.
578 сообщений
#15 лет назад
Цитата ("dervinar"):
Отсылать информацию, когда курсор не шевелится необязательно. А вот когда он шевелится - интерполировать практически бесполезно.
в общем то можно и так сказать.
кстати вы натолкнули меня на следующую мысль - уважаемый ТС, а может быть целесообразно вообще фиксить координаты (курсора) только в момент ее остановк? а траекторию рисовать просто как прямые между точками останова. а вообще зачем вам нужна траектрия? если у вас и вправду РАдмин, Spyware или просто продвинутый трейсер посетителей - то для вас важно фиксить значимые события а не то как елозит юзер курсором. а события - это его клики (или наведения на выпадающие меню, но обычно меню выпадает с задержкой и мышь соответсвенно юзер тоже фиксит в этот момент...
Виталий И.
55 сообщений
#15 лет назад
Оффтопик
По поводу того, что это будет: задумывалось сделать онлайн аэрохоккей (на данный момент я видел только с ботом, а это не так интересно как реальный противник)

Т.к. противник должен видеть где находится другой, очень важно передавать как пользователь елозит мышью.
Если передача будет медленной, отрывистой - эффекта не будет, должно выглядет какбуд-то всё непрерывно.

Есть идея передавать координаты реже (1-2 раза в секунду) и передавать координаты с округлением до десятков, а у конечного
пользователя сделать сглаживание, некоторые мелкие плавные движения, несоответствующие реальным действиям пользователя.
Евгений Б.
5330 сообщений
#15 лет назад
Цитата ("wellwit"):
Есть идея передавать координаты реже (1-2 раза в секунду) и передавать координаты с округлением до десятков, а у конечного
пользователя сделать сглаживание, некоторые мелкие плавные движения, несоответствующие реальным действиям пользователя.


округление не решит проблем.. все равно же циферки шлете

если надо отслеживать движение курсора для показа его "клиенту", то можно тупо таймер сделать и пофиг, что скорость низкая.. хотите больше, то улучшайте железо + каналы связи... главное точно отсылать места кликов
Владимир М.
578 сообщений
#15 лет назад
Я ж говорил - делать интерполяцию и реже мерять и слать координаты
Николай Г.
601 сообщение
#15 лет назад
Смотрите какое решение может быть... Что принципиально в случае аэрохоккея? Во первых, координаты(с абсолютной точностью) в те моменты, когда "клюшка"(не знаю как оно в аэрохоккее называется правильно) касается шайбы. При чем заметьте, не только координаты, но и направление и скорость - от этого зависит, как полетит дальше шайба. Лично я бы передавал координаты клюшки, а вот направление и скорость - шайбы после столкновения. Просто для того, чтобы при вычислениях не получились чуть-чуть разные результаты...

Во вторых - исключительно для красоты на самом то деле, передавать данные в те моменты, когда клюшка шайбы не касается. Тут вообще говоря интересны только координаты клюшки соперника (с очень низкой точностью, вот тут можно и округлять. Например в 2 байта эту информацию можно упихать). При чем передавать данные можно достаточно редко.

Но честно, аэрохоккей по идее даже более требователен к скорости будет, чем скажем контра... Не знаю.
Вадим П.
182 сообщения
#15 лет назад
С выходом adobe stratus (p2p), я бы предложил схему: js (client#1) -> flash -> p2p -> flash -> js (client#2). Обмен данным между клиентами будет намного проще, чем с использованием сервера.
Виталий И.
55 сообщений
#15 лет назад
Цитата ("dervinar"):
Но честно, аэрохоккей по идее даже более требователен к скорости будет, чем скажем контра... Не знаю.

Чёт не верится, контра ж вообще дофига данных передаёт и довольно часто, хотя точные координаты там не нужны.
Кстати, если это делать декстопным приложением, намного быстрее будет?
Николай Г.
601 сообщение
#15 лет назад
Поиграл в оффлайн аэрохоккей... За секунду шайба может раз 6-7 туда-сюда слетать. А расчетный пинг у нас в стране - порядка 200 мс... Для контры этого со скрипом, но нормально, а вот для аэрохоккея откровенно мало. Т.е. либо сделать медленный аэрохоккей, а тогда весь смысл теряется, либо уж не знаю...
Десктопное приложение - конечно лучше, но не намного.