您的问题围绕着哪个更快,在浏览器中处理超过 10,000 行,或者向远程服务器发送请求以返回较小的结果集。一个有趣的问题,它取决于运行时的上下文和环境。发送到远程服务器主要会导致网络延迟,服务器开销很小。
所以你在性能方程中有两个变量,客户端的处理速度和网络延迟。还有第三个变量,数据量,但在你的问题中这是恒定的 10k。
如果客户端浏览器和网络都很快,请使用您喜欢的任何内容。
如果网络速度较快,请使用远程服务器方法,但请注意不要让服务器因数千个小请求而过载。
如果客户端速度更快,可能会使用本地方法。(见下文)
如果两者都很慢,那么您可能需要选择其中一个,或者花费大量时间和精力来优化它。
两个客户端都很慢很容易发生,我在 3G 上的手机浏览器属于这一类,随机 Ajax 请求的网络延迟约为 200 毫秒,并且对于某些 JavaScript 也表现不佳。
由于用户认为性能是最重要的,您可以在初始页面加载中将每个字母的前 N 个值作为变量预加载,然后将这些用于第一次击键结果,这可以为您购买几毫秒。
如果您使用服务器方法,您始终可以为下一次击键发送请求的结果和一些值。这与用户看到的内容重叠,并使其在慢速网络上显得更加敏捷。例如
Client --> request 'ch'
Server responds with a few result for each potential next letter
'cha' = ...
'chb' = ...
Etc
This of course requires some specialized javascript to alternate between Ajax requests and using cached results from previous requests to prefill the selection.
If you are going with the local client searching through all 10k records, then make sure the server returns the records in sorted order. If your autocomplete scanning is able to use 'starting with' selection rather than 'contains' (eg typing RO will match Rotorua but not Paeroa) then you can greatly reduce processing time by using http://en.wikipedia.org/wiki/Binary_search_algorithm techniques, and I'm sure there are lots of SO answers on this area.