Реализация аналитики в моем расширении Firefox? - PullRequest
1 голос
/ 18 октября 2011

Я хочу собрать информацию о том, как пользователь использует мое расширение.Я думаю, что собираюсь записывать информацию (время, собранные данные) всякий раз, когда пользователь взаимодействует с моим расширением, в локальный файл в папке профиля.И я буду периодически отправлять этот файл на сервер.

Это правильный способ сделать то, что я пытаюсь?Это приведет к снижению производительности?

Есть ли лучший способ сделать это?

Ответы [ 2 ]

3 голосов
/ 19 октября 2011

Что нужно учесть: дисковый ввод-вывод может занимать немалое количество времени, например если диск занят или профиль пользователя находится в сетевом расположении. Таким образом, очевидный подход к открытию файла, записи в него строки данных и повторному закрытию файла действительно ухудшил бы производительность, поскольку пользовательский интерфейс браузера блокируется во время записи в файл. Ваши варианты:

  • Откройте файл один раз и используйте nsIBufferedOutputStream с достаточно большим буфером. Это приведет к тому, что только некоторые из ваших операций записи будут инициировать запись на диск. Недостатки: у вас все еще время от времени возникают синхронные операции записи, и если браузер дает сбой, содержимое буфера не будет записано на диск - ваш файл поврежден.
  • Используйте NetUtil.asyncCopy() для асинхронной записи данных, не блокируя все. Пример кода в документации показывает, как можно написать строку, используя nsIStringInputStream. Недостаток: это, вероятно, не очень эффективно с точки зрения памяти, для каждой операции записи необходимо создать несколько объектов XPCOM.
  • Используйте базу данных SQLite , она предоставляет асинхронный API и обеспечивает согласованность даже в случае сбоя браузера. Если вы открываете соединение с базой данных только один раз, а затем время от времени записываете в него, то должно быть более эффективным, чем приведенное выше решение (но я не тестировал). Недостаток: ваш результат - это файл базы данных, а не простой текстовый файл, вы должны либо преобразовать его перед отправкой на сервер, либо сервер должен обработать базу данных SQLite (что может быть сложнее, чем чтение текстового файла). *
1 голос
/ 19 октября 2011

Я не вижу ничего плохого в этом отношении, определенно лучше, чем печально известная его рассылка маленькими кусочками.

Однако вы должны очень четко записать, что вы хотите отправить эти данные (и, возможно, отобразить новую вкладку с некоторой информацией после того, как пользователь установит надстройку), потому что некоторым пользователям не очень нравится шпионить.

Вы можете отправить данные с помощью XMLHttpRequest (см. здесь ).

...