![颠覆性检查和出口之间的性能差异?](https://linux22.com/image/483090/%E9%A2%A0%E8%A6%86%E6%80%A7%E6%A3%80%E6%9F%A5%E5%92%8C%E5%87%BA%E5%8F%A3%E4%B9%8B%E9%97%B4%E7%9A%84%E6%80%A7%E8%83%BD%E5%B7%AE%E5%BC%82%EF%BC%9F.png)
运行你的 web 应用程序时,Subversion 检出和导出之间是否存在性能差异?
我们已经在部署过程中实现了这一点,而没有测量差异(感觉很糟糕,而且很糟糕)。
我们的目的是:
a)转储开销(.svn 文件夹及其内容)和
b)改进任何目录遍历内容
您有这方面的经验或测量吗?
答案1
这将是沉重依赖于应用程序。对于我部署的应用程序,这无关紧要,因为应用程序内部绝对不会进行应用程序目录的目录遍历。某些框架(尤其是 Rails)会自动加载应用程序内的文件并进行目录遍历以发现这些文件,但典型Dir['**/**']
类型的事务会跳过任何“隐藏”目录,例如 .svn 和 .git。
如果由于某种原因,您的应用程序或框架需要遍历应用程序文件夹下的所有文件并且不忽略隐藏目录,则可能会产生一些微不足道的影响,但这将特定于应用程序和情况,因此您很难从通用答案中寻求很多建议。
尽管如此,如果您没有理由将更改从部署推回到 SVN 服务器,并且您正在使用多目录滚动式部署机制(即,每次导出/签出到新目录,然后更新符号链接或类似内容),您不妨改用导出。如果您svn update
每次都只是在部署目录中,那么为了提高效率,您可能希望坚持使用它。
答案2
Subversion 客户端写入导出的 IO 比签出的要少,因为签出确实做了大量的锁定和日志写入。
尽管如此,我发现在 Web 服务器文档根目录中进行签出而不是导出要好得多,因为您可以简单地“svn update”到最新版本或运行“svn update -r PREV”来撤消错误的推送。因此,我发现这种便利性胜过减少 IO 的任何优势。这假设您没有导出,然后通过 FTP 将导出内容发送到您的 Web 服务器。
您如何部署至您的网络服务器?
答案3
SVN(尤其是签入)的一个真正不同之处在于病毒扫描。如果您可以关闭 .svn 目录的 AV,那么您会看到不同。