В коде Google Analytics async используется очень четкий шаблон проектирования для выполнения кода javascript.
Код зависит от библиотеки, и он не знает, загружена ли библиотека или нет. Если библиотека еще не загрузилась, она просто ставит в очередь все команды в объект Array. Когда библиотека загружается, он просто создает объект _gaq и выполняет все команды в последовательности, в которую он был включен. Затем он перезаписывает функцию push, поэтому будущие команды выполняются сразу же.
Идея состоит в том, чтобы заставить команды работать очень быстро, когда они поставлены в очередь. Код действительно оценивается только после загрузки библиотеки.
Они также загружают библиотеку с параметрами async=true
. Это практически не влияет на фактическое время загрузки страницы.
Команды выглядят так же, как и версии синхронизации, но первая строка - это имя функции, а следующие параметры - это параметры функции. Вы также можете вставлять функции в этот массив, и функции будут выполняться в последовательности, а также с нулевым контекстом. Поэтому, если вам нужно что-то сделать синхронно с библиотекой, вы можете нажать функцию, чтобы сделать это внутри _gaq.
Я думаю, что это очень умное решение, но я никогда не видел его раньше. Кто-нибудь знает имя этого шаблона проектирования или где он используется помимо кода отслеживания Google Analytics?