我使用OS.File.read
来读取文件内容。在Window的焦点上我做OS.File.stat
并检查它的最后修改日期。然后我记录这个日期。在窗口的下一个焦点上我再次OS.File.stat
该文件,如果修改日期是新的,那么我将对其进行OS.File.read
。
我想知道有更有效的方法吗?例如:我启动OS.File.read
,默认情况下它获取的文件头应该包括上次修改的日期,我检查它作为它的读数,如果它不是一个新的日期而不是我取消读取。从编码的角度来看,这会更有效,但从性能的角度来看可能不是那么多?
答案 0 :(得分:1)
效率更高取决于文件本身以及使用模式和系统工作负载。
通常情况下,OS.File.stat
然后选择性地读取可能会更有效率,因为文件I / O可能是瓶颈而且您只是避免了一些I / O(大多数情况下)
对于经常阅读但只偶尔写入的小文件,只读取文件可能更有效。文件元数据和数据可能在操作系统磁盘缓存中,因此文件I / O变得非常快,实际的线程间消息传递开销和OS.File
的js-ctypes开销成为瓶颈。然而,这是一个非常特殊的情况。
此外,如果文件经常更改,那么几乎每个OS.stat
+检查都会导致必须再次读取文件,那么只读取文件也可能更有效。但在这种情况下,我会认真思考如果选择使用文件是正确的方法,或者另一种通信方式是否会更好(例如套接字)。
所以,我选择.stat
/ check / .read
,因为对磁盘缓存和系统工作负载进行假设可能不好。
但是,如果可能的话,我首先要避免轮询文件。如果它是特定于您的加载项的文件,您不希望其他进程写入,则读取一次,之后将数据保存在共享位置的内存中,例如JS Code Module或{ {1}} SDK附加组件或main.js
引导加载项。写入时,也会更新缓存的数据。
如果您担心某些其他进程可能会同时编写您的文件,那么只需使用独占锁打开您的文件,并且在加载项运行时不要再关闭它。
bootstrap.js
如果您希望其他程序写入该文件并且没有问题,或者您首先使用该文件进行进程间通信,则无法避免重新读取该文件,当然。