我想收集有关用户如何使用我的扩展程序的信息。我想的是,当用户与我的扩展程序交互到配置文件文件夹中的本地文件时,我将写入信息(时间,数据收集)。我会定期将该文件发送到服务器。
这是我正在尝试的正确方法吗?这会导致性能下降吗?
有没有更好的方法呢?
答案 0 :(得分:3)
您需要考虑的事项:磁盘I / O可能需要不可忽略的时间,例如:如果磁盘正忙或用户的配置文件位于网络位置。因此,打开文件,向其中写入一行数据并再次关闭文件的明显方法确实会降低性能,因为在写入文件时浏览器UI被阻止。您的选择是:
nsIBufferedOutputStream
和足够大的缓冲区。这将导致只有少数写操作会触发写入磁盘。缺点:您仍然经常进行同步写入操作,如果浏览器崩溃,缓冲区内容将不会写入磁盘 - 您的文件已损坏。NetUtil.asyncCopy()
异步写入数据,而不会阻止所有内容。文档中的代码示例显示了如何使用nsIStringInputStream
编写字符串。缺点:这可能不是非常有效的内存,需要为每个写操作创建一些XPCOM对象。答案 1 :(得分:1)
我认为这种态度没有任何问题,绝对比以小块方式臭名昭着更好。
但是你应该非常清楚地写下你想要发送那些数据(并且在用户安装附加组件后可能会显示一个带有一些信息的新标签页),因为有些用户不喜欢被发现。
您可以使用XMLHttpRequest
发送数据(请参阅here)。