php – Web应用程序:预处理并在一个页面加载中发送所有项目,或将项目分成单独的客户端请求?

我的任务是监督我们公司古老的(20世纪90年代!)
PHP应用程序的重写/现代化.当然,我既兴奋又惶恐地接近这个任务.我花了几周时间研究框架,库,基准测试等.

该系统的主要功能之一是从后端MySQL db加载数据项并将它们呈现给前端用户.显示哪些项目是一个复杂的问题,但它可以是任何组合或项目数量.比方说,就像目录一样.用户可以查看一个项目,浏览项目类别或搜索项目.此外,可见性和其他特定项目级别数据有许多限制和条件.

我的具体问题是:

**有关加载和显示项目数据的专家有哪些想法?在页面加载时间,服务器压力或任何其他因素……我应该
(A):让服务器计算所有输出数据,然后在初始页面请求中将其发送到客户端(浏览器)?

(B):或者,我应该在javascript变量中输出基本页面骨架和ID列表,然后让客户端分别请求每个项目,然后让响应者发回(JSON?)数据并拥有客户端填充页面?**

我在这里寻求的是一些程序员的智慧,以及最有效的方法.我不希望建议告诉我从PHP切换到另一种语言,或者我需要运行自己的测试.我不是要求任何人为我写任何代码.我只是希望你的智慧/建议以哪种方式更好以及为什么,或者因为一种方法与另一种方法相关的因素.

情景(A)对我来说似乎老了,而且灵活性较差.我认为前端用户可能会更快.如果我的服务器作为最大优化和缓存,这不应该(仍然)是最有效的方式吗?

选项(B)看起来更酷,更“现代”,但这种方法有什么意义吗?除了一些前端JavaScript和动态模板技能外,我还能获得什么?似乎每个页面加载可能需要几十个额外的请求,以及额外的客户端处理,这对我来说是针对大枪的最新页面速度优化建议.

谢谢你的时间.

最佳答案 鉴于你有选择A和B的措辞.明确的选择是A.这就是为什么:

…along with a list of IDs in a javascript variable, and then have the client request each item separately and then have…

这将导致非常糟糕的性能,因为现在你正在做许多SELECT * FROM项WHERE id = x,每个返回1条记录,而不是SELECT * FROM items WHERE something_else所以你没有对每个MySQL查询进行过头调查,加上每个HTTP请求,效率低下.

所以,正如你所说的那样,选项A肯定.

但是,让我们回到我认为你正在使用选项B得到的要点……

假设您有一个HTML / Web搜索界面,所有这些都在第一次请求时提供,没有结果.现在我输入搜索参数,然后点击“go”.在后台(js / ajax),我的标准可以发送到服务器并进行处理,然后你发回第一页项目的JSON对象(只有数据,item_name,item_id,item_desc等,没有html,没有样式)然后浏览器使用javascript将其绘制到页面.

为什么这会更好?您现在可以将您的后端/服务器端视为API,接受查询并返回数据,这是非常干净的代码设计.它不需要循环添加HTML,没有图像资产等的东西.这是非常灵活的,因为现在让我们说你得到订单,使这个项目系统可以通过iPhone应用程序访问!问题?实际上,您已经拥有了JSON API,因此您的iPhone应用程序可以以相同的方式访问此API,并在应用程序内适当地显示数据.

回到网络浏览器方面:这也可能会带来更快的用户体验,因为您发回的数据更容易/更快,服务器可以渲染2)数据量较少,因为它只是项目数据,而不是其HTML格式或周围的页面元素.

我希望这有助于更深入地了解您的决定.祝好运!

点赞