OS.File检查OS.read之前的最后修改日期

时间:2014-06-27 23:31:34

标签: javascript file-io firefox-addon

我使用OS.File.read来读取文件内容。在Window的焦点上我做OS.File.stat并检查它的最后修改日期。然后我记录这个日期。在窗口的下一个焦点上我再次OS.File.stat该文件,如果修改日期是新的,那么我将对其进行OS.File.read

我想知道有更有效的方法吗?例如:我启动OS.File.read,默认情况下它获取的文件头应该包括上次修改的日期,我检查它作为它的读数,如果它不是一个新的日期而不是我取消读取。从编码的角度来看,这会更有效,但从性能的角度来看可能不是那么多?

1 个答案:

答案 0 :(得分:1)

简答:取决于?!

效率更高取决于文件本身以及使用模式和系统工作负载。

通常情况下,OS.File.stat然后选择性地读取可能会更有效率,因为文件I / O可能是瓶颈而且您只是避免了一些I / O(大多数情况下)

对于经常阅读但只偶尔写入的小文件,只读取文件可能更有效。文件元数据和数据可能在操作系统磁盘缓存中,因此文件I / O变得非常快,实际的线程间消息传递开销和OS.File的js-ctypes开销成为瓶颈。然而,这是一个非常特殊的情况。

此外,如果文件经常更改,那么几乎每个OS.stat +检查都会导致必须再次读取文件,那么只读取文件也可能更有效。但在这种情况下,我会认真思考如果选择使用文件是正确的方法,或者另一种通信方式是否会更好(例如套接字)。

结论

所以,我选择.stat / check / .read,因为对磁盘缓存和系统工作负载进行假设可能不好。

可以避免磁盘I / O吗?

但是,如果可能的话,我首先要避免轮询文件。如果它是特定于您的加载项的文件,您不希望其他进程写入,则读取一次,之后将数据保存在共享位置的内存中,例如JS Code Module或{ {1}} SDK附加组件或main.js引导加载项。写入时,也会更新缓存的数据。

如果您担心某些其他进程可能会同时编写您的文件,那么只需使用独占锁打开您的文件,并且在加载项运行时不要再关闭它。

bootstrap.js

如果您希望其他程序写入该文件并且没有问题,或者您首先使用该文件进行进程间通信,则无法避免重新读取该文件,当然。