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