Вы используете массив как объект, разница между getElementbyId
и getElementsByClassName
такова:
getElementbyId
вернет вам объект. getElementsByClassName
вернет вам массив. Метод
blockquote>getElementsByClassName(classNames)
принимает строку, содержащую неупорядоченный набор уникальных разделенных пробелами маркеры, представляющие классы. При вызове метод должен возвращать живой объектNodeList
, содержащий все элементы документа, которые имеют все классы, указанные в этом аргументе, получив классы, разделив строку на пробелы. Если в аргументе нет токенов, тогда метод должен возвращать пустой NodeList.https://www.w3.org/TR/2008/WD-html5 -20080610 / dom.html # getelementsbyclassname
getElementById
Метод getElementById () обращается к первому элементу с указанным id.
blockquote>http://www.w3schools.com/jsref/met_doc_getelementbyid.asp
в вашем коде строки:
1- document.getElementsByClassName ('myElement'). Style.size = '100px';
blockquote>НЕ будет работать, как ожидалось, потому что
getElementByClassName
вернет массив, и массив будет НЕ имеет свойствоstyle
, вы будете обращаться к каждомуelement
, итерации их.Вот почему функция
getElementById
работает на вас, эта функция вернет вам прямой объект, и поэтому вы сможет получить доступ к свойствуstyle
.
Разве я не отвлекаю немного от моего приложения в обмен на небольшую скорость?
blockquote>Если ваша единственная защита потоковой передачи основана на синхронизации из
Vector
иHashtable
, вы почти наверняка испытываете проблемы.Обычно операции с крупнозернистыми данными необходимо синхронизировать - «синхронизировать каждую небольшую операцию с коллекциями и надеяться, что это достаточно хорошо» подход почти никогда не требуется, поэтому зачем брать его с небольшим ударом?
Если вы делитесь изменяемыми данными (например, коллекциями) между потоками, вам нужно подумать о том, как это сделать - использование
Vector
иHashtable
может дать вам ложное чувство безопасности.
Я не уверен на 100%, что вы получаете «безопасность», которая, по вашему мнению, вы есть. Я обычно обнаружил, что хочу сам синхронизировать, а не полагаться на встроенный материал (будь то Vector / Hashtable или Collections.synchronizedList (новый ArrayList ()) / Collections.synchronizedMap (новый HashMap ())) .
Я предпочитаю создавать свои собственные блокирующие мониторы и контролировать все блокировки. Если я этого не делаю, я, как правило, забываю блокировать сложные, многоступенчатые операции и не замечать этого. Мне нравится, как это заставляет вас задуматься о блокировке в вашей системе - иначе становится легко «чувствовать» себя в безопасности, когда на самом деле вы этого не делаете. Блокировка - это то, что действительно может испортить вас и быть гнездом ошибок, если вы не сделаете это правильно. Стоит задуматься о блокировке в том месте, где это необходимо, и понять, как ваша блокировка защищает доступ.
synchronized
несет существенный штраф за производительность и часто не является лучшим подходом к параллелизму.
Если вам нужны потокобезопасные коллекции, используйте те, что указаны в java.util.concurrent
.
Эта статья может быть полезной.
java.util.concurrent.ConcurrentHashMap
в качестве альтернативы для синхронной реализации карты. – Luiggi Mendoza 20 June 2012 в 19:11