我知道,只要在服务器端生成页面,数据库始终是帐篷中的长杆。
但是在 Web 服务器上也有很多文件 i/o 正在进行。脚本代码充满了 include/require 语句。此外,通常将模板化的 html 存储在应用程序外部的文件中,这些文件会相应地加载和填充。
当涉及到 Web 开发时,文件 i/o 起多大作用?它会成为一个问题吗?什么时候过分?Web 服务器/语言是否缓存任何内容?
它在你的经历中真的很重要吗?
我知道,只要在服务器端生成页面,数据库始终是帐篷中的长杆。
但是在 Web 服务器上也有很多文件 i/o 正在进行。脚本代码充满了 include/require 语句。此外,通常将模板化的 html 存储在应用程序外部的文件中,这些文件会相应地加载和填充。
当涉及到 Web 开发时,文件 i/o 起多大作用?它会成为一个问题吗?什么时候过分?Web 服务器/语言是否缓存任何内容?
它在你的经历中真的很重要吗?
10 年前,磁盘比处理器快得多,以至于您不必担心太多。在磁盘成为问题之前,您会用完 CPU(或使 NIC 饱和)。如今,CPU 和千兆网卡可能会使磁盘成为瓶颈,但是......
大多数非数据库磁盘使用都很容易并行化。如果您没有将托管架构设计为通过添加更多系统来横向扩展,那么这比微调磁盘访问更重要。
如果您设计为水平扩展,通常只购买更多服务器比试图弄清楚如何优化磁盘便宜。更不用说,用于模板的 SSD 甚至 RAM 磁盘之类的东西都不会成为问题。
很少有一个服务架构可以水平扩展,流行到足以引起可扩展性问题,但利润不足以在您的机架中再买一个 1u。
只有当您与外界的带宽与磁盘带宽相似时,文件 I/O 才会成为一个因素(对于静态内容和静态页面包括)。这意味着您的连接速度非常快,正在快速 LAN 上提供内容,或者磁盘非常慢(或者存在大量磁盘争用)。所以很可能答案是否定的。
当然,这假设您不是仅为文件的一小部分加载大文件。
文件 I/O 是可能影响 Web 应用程序性能的众多因素之一,包括带宽、网络连接、内存等。确定文件 I/O 是否导致您出现任何问题的最有效方法是在服务器上运行一些分析,看看这是否是您性能的限制因素。
这在很大程度上取决于您从磁盘加载的文件类型,许多小文件与一些大文件具有非常不同的属性。Web 服务器可以缓存文件,既可以在内存内部缓存,也可以向客户端指示可以缓存文件(例如图像),因此不需要每次都请求。
不要过早优化。它的邪恶,或者什么。
但是,I/O 是您在计算机上可以做的最慢的事情。尽量保持在最低限度,但不要让 Knuth 看到你在做什么。
我想说,只有在您提供大量静态内容时,文件 IO 速度才会成为问题。当您处理数据并执行代码以呈现页面时,从磁盘读取页面本身的时间可以忽略不计。在您提供的静态文件无法放入内存的情况下,文件 I/O 很重要,例如在提供视频或图像文件时。它也可能发生在 html 文件中,但由于 html 文件的大小很小,所以这种可能性较小。