Подтвердить что ты не робот

PhoneGap + jQuery Mobile = время отклика медленного нажатия

Я знаю, что в Интернете много вопросов, но я пробовал каждое решение (все ответы этот вопрос), и ни один из них работал.

Когда я запускаю сайт в своем браузере для ПК, все прекрасно, но как только я развожусь по телефону, время отклика очень отсталое.

Я попытался использовать FastClick, установив hoverDelay в 0 и привязывая собственные события, но результат тот же.

Я использую Android 4.1. Поблагодарите любую помощь, кроме того, что я пробовал.

4b9b3361

Ответ 1

Чтобы ускорить JQM, вам нужно отключить любые переходы.

Это отстой, но переходы JQM слишком медленны для мобильных устройств, даже на iOS. Нам просто нужно подождать несколько лет, пока аппаратное обеспечение не ускорится, я подозреваю. Это несмотря на то, что команда JQM пытается повысить производительность в 1.2. Я до сих пор не могу использовать переходы, не чувствуя себя вялыми.

Я всегда использую эти настройки, чтобы получить лучшую производительность из jQuery mobile.

$.mobile.defaultPageTransition   = 'none'
$.mobile.defaultDialogTransition = 'none'
$.mobile.buttonMarkup.hoverDelay = 0

Кроме того, если вы пишете какой-либо javascript, не привязывайтесь к событиям 'click'. Щелчок слишком медленный на мобильных устройствах, так как он имеет дополнительную задержку в 300 мс до запуска события.

Поскольку вы используете JQM, вместо этого вы можете использовать собственное событие click vclick (которое под капотом использует события touchstart и touchend).

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

Ответ 2

Вам лучше будет использовать событие tap, чем событие click, если вы хотите обойти это для мобильного приложения.

Прочитайте Tap vs. Click: Death by Notorance Джон Бендер

Ответ 3

Этот фрагмент кода работал у меня

var ua = navigator.userAgent, 
event = (ua.match(/iPad|Android/i)) ? "touchstart" : "click";

$("button,a").bind(event, function()
{
    $(this).trigger('click');
});