jQuery v1.11.3
В предоставленных ответах содержится много полезной информации. Но в последнее время я потратил много времени, пытаясь связать все воедино в рабочее решение для решения двух задач:
Помимо этого поста и Обнаружения устройств с сенсорным экраном с помощью Javascript , я нашел этот пост Патрика Лаука чрезвычайно полезным: https://hacks.mozilla.org/2013/04/ Обнаружение прикосновения, почему не «как» /
Вот код ...
$(document).ready(function() {
//The page is "ready" and the document can be manipulated.
if (('ontouchstart' in window) || (navigator.maxTouchPoints > 0) || (navigator.msMaxTouchPoints > 0))
{
//If the device is a touch capable device, then...
$(document).on("touchstart", "a", function() {
//Do something on tap.
});
}
else
{
null;
}
});
Важно! Метод *.on( events [, selector ] [, data ], handler )
должен иметь селектор, обычно элемент, который может обрабатывать событие «touchstart» или любое другое подобное событие, связанное с касаниями. В данном случае это элемент гиперссылки «а».
Теперь вам не нужно обрабатывать обычное нажатие мыши в JavaScript, потому что вы можете использовать CSS для обработки этих событий, используя селекторы для элемента «a» гиперссылки, например:
/* unvisited link */
a:link
{
}
/* visited link */
a:visited
{
}
/* mouse over link */
a:hover
{
}
/* selected link */
a:active
{
}
Примечание. : Есть и другие селекторы ...
Это очень общий вопрос, но я добавлю пару мыслей.
Если вы программируете, ориентированные на интерфейсы, то гибкость не сильно пострадает. Например,
void foo(List<E> list);
Цена неправильного выбора может быть замечена в снижении производительности. Например, выбор LinkedList, когда вы ищете прямой доступ (как в ArrayList).
У наборов есть похожая проблема. Если вы хотите сохранить отсортированные коллекции без дубликатов, SortedSet будет более разумным выбором, чем HashSet. В последнем случае вам придется отсортировать весь Набор вручную (это вызов Collections.sort ())
Что касается карт , есть много разных реализаций. У каждого своя цель. Например, есть SortedMap , аналог SortedSet. Затем есть WeakHashMap , который не работает как HashMap в том смысле, что ключи могут быть удалены сборщиком мусора. Как вы понимаете, выбор между HashMap и WeakHashMap нетривиален. Как всегда, все зависит от того, что вы хотите с ними реализовать.
Что касается истории, в моем текущем проекте мы заменили HashSet на SortedSet, потому что это сказалось на производительности. Однако DataCenter не загорелся.
Мои два цента.
Какое это имеет значение, если вы следуете хорошей объектно-ориентированной практике в зависимости от абстрактного типа ?
Если, например, вы обнаружите, что использовали неправильную карту
, вы просто измените используемую реализацию, и поскольку все ваши зависимости находятся на карте
, все работает как раньше, только с различные рабочие характеристики.
Я думаю, вы можете использовать HashMap, HashSet и ArrayList в качестве основных реализаций. Когда вам нужен отсортированный набор, хорошо знать, что TreeSet доступен; Аналогичным образом, когда вы делаете рекурсивные вещи, хорошо иметь LinkedList в заднем кармане. Но запрограммируйте интерфейсы, а затем вы можете поменять реализации по мере необходимости. И если одна и та же коллекция требует обработки как (например) как LinkedList, так и ArrayList, нетрудно создать одну из другой.
Работайте с реализациями по умолчанию, которые вы указали. Когда есть проблемы с производительностью и есть основания полагать, что альтернативная реализация будет лучше, замените ее и измерьте разницу. Если вам нужно особое поведение (например, отсортированные наборы), используйте специальные классы.