这种负载当然是可以管理的,具体取决于您希望每个字段包含多少数据,或者更确切地说,取决于您确定每个字段可以包含的最大数据量。在 PHP 中,HTTP POST 请求正文的最大大小(即包含表单编码值的部分)由ini value post_max_size 确定。它的默认值为 2MB,但您可以在 php.ini 中更改它:
post_max_size = 10M # megabytes
或者在你的.htaccess:
php_value post_max_size 10M
设置时要小心,因为它不应超过系统上可用的 RAM 量。还要考虑到您可能有多个用户请求此页面,如果他们每个人都为他们的请求分配了过多的 RAM,他们可能会挂起或崩溃您的服务器。
但是,请考虑这里的数学。即使您有 100 个字段,每个字段包含 20 个字节,也只有 2000 个字节,大约 2 KB。即使 1 Mbps 的上传速度非常慢,您的用户也可以每秒上传 128 KB。在这个速度下,100 个字段中的每一个都必须包含 1311 字节的数据,上传过程需要 1 秒。
在 Apache 上,the default timeout is 300 seconds,因此在 Apache 超时之前,您的表单字段必须包含总计 37.5 MB 的空间。您的主机(或您的服务器管理员)可能会稍微更改此设置,并且可能设置为更合理的值,例如 30 秒。但仍处于此限制,您将需要 3.75 MB 的数据,这可能比 100 个字段所能包含的数据多得多。
你也不应该关心客户端,因为even the stingiest browser (IE) limits POST uploads to 2 GB。
基本上,我的观点是,即使连接速度很慢,HTTP 和您的服务器也能够处理这么多字段。我不确定 PHP 解析所有这些需要多长时间(您必须在服务器上对其进行基准测试),但我想影响可以忽略不计。
从用户的角度来看,我会说 100 个字段将是一个非常令人生畏的景象。如果可能的话,最好将您的表单分成更友好和更小的步骤,引导用户完成填写表单的过程。如果您不想将表单拆分为多个步骤,请至少查看saving the state of the form with javascript。请注意,在W3C recommends 5MB of storage space for localStorage 中,这应该有足够的空间来存储您的所有字段。也看看this fallback that uses cookies,但要疲倦。 Cookie 的限制比localStorage 更多。我读过cookies are limited to 4KB each and 20 cookies per domain。您可能希望将存储的表单字段分配到多个 cookie 中,例如 10 个 cookie 中的 10 个表单字段。您可以使用 encodeURIComponent() 在 cookie 中存储多个输入值:
var inputs = document.forms[0].getElementsByTagName('input')
i = 0,
date = new Date(),
expires;
// Expires date (1 day in future)
date.setTime(date.getTime()+(24*60*60*1000));
expires = date.toGMTString();
for(var cookieNumber = 0; cookieNumber < 10; cookieNumber++) {
var cookie = [];
for(; i < (cookienumber * 10 + 10); i++) {
cookie.append(encodeURIComponent(inputs[i].name) + '=' + encodeURIComponent(inputs[i].value));
}
document.cookie = 'savedForm' + cookieNumber + '=' + cookie.join('&') + '; expires =' + expires;
}
为确保在用户输入时保存所有内容,您可能需要更新您存储的数据onchange,或者,如果您希望最多保存第二次,请更新onkeyup。
另外,为了方便用户,当提交表单时,所有保存的cookie和localStorage表单字段数据都应该被清除,这样当他们再次访问表单时,所有字段都将为空并读取新数据输入。