2013-03-22 2 views
1

я работал с JavaScript API обработки, и я увидел эту цитату:Javascript цепочки методов и времени

Поскольку JavaScript является языком сценариев, каждая строка кода занимает ценное время процессора. Один из способов улучшить время процессора - это цепной вызов методов для сокращения строк кода. Такие объекты, как esri.Graphic и esri.symbol. * Предоставляют методы настройки, которые возвращают сам объект, позволяя цепочку методов.

Менее эффективен:

var symbol = new esri.symbol.SimpleMarkerSymbol(); 
symbol.setSize(10); 
symbol.setColor(new dojo.Color([255,0,0])); 

Более эффективное:

var symbol = new esri.symbol.SimpleMarkerSymbol().setSize(10).setColor(new dojo.Color([255,0,0]));

При объединении вызовов методов, необходимо определить баланс между эффективностью и читаемости ваш код. Ваш код может быть более читабельным и поддерживаемым, если вы избегаете цепочки; однако вы потеряете преимущество в производительности, которое предлагает цепочка.

Я понимаю, что в Java, метод цепочки и стек методов должны скомпилироваться с одним и тем же байт-кодом. Однако, поскольку это язык сценариев, действительно ли это поддерживает воду? Кроме того, если это так, стоит ли жертвовать читабельностью кода для производительности этого раздела кода?

И для справки о том, где я получил этот текст от: http://help.arcgis.com/en/webapi/javascript/arcgis/jshelp/inside_graphics.html

Edit: После некоторого тестирования производительности, я обнаружил, что это на самом деле не имеет значения, является ли методы прикованы или нет. (Один раз один был бы быстрее, в другой раз другой был бы быстрее)

+1

Звучит как мусор для меня. – sje397

+0

Почему бы вам не протестировать его: http://jsperf.com/ –

+0

Я скептически отношусь к тому, что большинство современных браузеров компилируют JS для машинного кода перед его выполнением. – Dve

ответ

2

Цепочные методы, подобные этому, могут повысить производительность, но только в ограниченных сценариях, где API, который вы используете, построен для обеспечения этой функциональности. Первый пример, который приходит на ум, - это jQuery.

Вызов $ ("# test") требует времени, чтобы вернуть объект jquery, который ссылается на #test.

Когда вы связываете метод, он повторно использует этот объект.

Проверьте это испытание, которое я сделал в качестве примера.

http://jsperf.com/chaining-demo

+1

Прохождение DOM дважды вместо хранения и методов цепочки не очень много общего. В вопросе OPs используемый объект хранится в локальной переменной. Вы должны были бы проверить для sth, как 'var test = $ (" # test "). Show(); test.hide(); ' – C5H8NNaO4

+0

Я отредактировал его, чтобы фактически показать, что на самом деле выглядит код примера. Так как он сохраняет объект и редактирует его в unchained версии, он выглядит как производительность не влияет. – CBredlow