В общем, селекторы идут в следующем порядке эффективности (от самой высокой до наименее эффективной):
foo > bar
) foo bar
) foo[bar="baz"]
) foo:hover
, [116 ]) Другое соображение заключается в том, что CSS-селекторы - это, по сути, поиск по дереву, поэтому чем больше вы можете вырезать из дерева, тем лучше. #foo .bar
- это отношение потомков, но если включение #foo
исключит большую часть вашего HTML из поиска, это сделает этот селектор более эффективным. Точно так же img[data-src]
теоретически будет быстрее, чем [data-src]
, потому что есть более ограниченный набор элементов, атрибут которых необходимо проверить.
(Я не знаю этого наверняка, но ожидаю, что правила CSS не всегда интерпретируются в строгом порядке справа налево. #foo .bar
, например, будет более эффективным если интерпретировать слева направо: сначала ищите элемент ID, тогда вам нужно только проверить его дочерние элементы на .bar
вместо поиска по всему документу. Я бы предположил, что очевидные оптимизации производительности, подобные этой, уже встроены в большинство или во все браузеры. engine.)
Есть также некоторые случаи, когда вы можете заменить методы javascript для правил css, такие как $('foo:nth-child(1)')
vs $('foo').first()
- в этом конкретном случае jQuery быстрее , хотя это конечно, не распространяется на все селекторы (поскольку для них нет соответствующих методов).
Если вы сомневаетесь, вы можете сравнить этот тип материала, просто повторно выполнив выделение (в соответствии с вашим настоящим HTML) в цикле:
benchmark = function(selector) {
var t1 = new Date();
for (var i=0; i<100000; i++) {
var x = $(selector);
}
var t2 = new Date();
console.log(selector, t2-t1, "ms")
}
benchmark('[data-src="bar"]')
benchmark('img[data-src="bar"]')
[1138 ] ... результаты которого подводят меня к моей главной точке: преждевременной оптимизации.
В большинстве случаев, с большинством веб-страниц, это мало что меняет в реальном мире. С очень простым HTML выше, селектор почти не имеет значения даже при 100 000 итерациях. На 10 000 итераций я даже не получаю последовательных результатов, из которых быстрее.
Если вы работаете с относительно большими деревьями HTML и сложными селекторами и начинаете видеть реальные проблемы с производительностью, которые, как вы подозреваете, связаны с этими поисками DOM, , тогда это хорошая идея, чтобы начать тестирование такого рода вещей. (Хотя даже тогда, большую часть времени вы увидите больше улучшений от кэширования и повторного использования предыдущих выборов, чем от тонкой настройки самих выборов.)
Используйте здравый смысл, старайтесь, чтобы ваши селекторы были простыми и понятными. укажите, и используйте их, когда это возможно, но, вероятно, не стоит потеть каждую миллисекунду, если вы не видите реальных проблем с производительностью.
Существует поток об этом на форуме Spring. Короткий ответ - то, что нет действительно никакого способа ввести единственное свойство с помощью аннотаций.
Я услышал, что поддержка использования аннотаций будет улучшена в Spring 3.0, таким образом, будет вероятно, что это будет скоро обращено.
Вы могли попытаться ввести значение свойства "my.service.url" к зарегистрированному в Вашем бобе.
Смотрите на: http://static.springframework.org/spring/docs/2.5.x/reference/beans.html#beans-factory-placeholderconfigurer
HTH.
можно сделать это при использовании конфигурации XML. Просто настройте PropertyPlaceholderConfigurer и укажите значение свойства в конфигурации
<bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<property name="locations">
<value>classpath:com/foo/jdbc.properties</value>
</property>
</bean>
<bean ...>
<property name="myServiceUrl" value="${my.service.url}"/>
</bean>
Я знаю, что с момента публикации исходного сообщения прошло некоторое время, но мне удалось наткнуться на решение этой проблемы для spring 2.5.x
Вы можете создавать экземпляры "String" beans в конфигурация spring xml, которая затем может быть введена в аннотированные компоненты
@Component
public class SomeCompent{
@Autowired(required=true
@Resource("someStringBeanId")
private String aProperty;
...
}
<beans ....>
<context:component-scan base-package="..."/>
<bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
...
</bean>
<bean id="someStringId" class="java.lang.String" factory-method="valueOf">
<constructor-arg value="${place-holder}"/>
</bean>
</beans>