3

我有一个家庭列表,其中每个家庭 - 在翻转时 - 显示一个工具提示,其中包含有关单个家庭的附加信息(居住地信息和那个地方的 3 张图像)。

那么最佳实践(性能)是什么?在开始时预加载所有数据还是仅在需要时(翻转时)才 ajax 请求数据?

请注意,页面已经包含 3 个 select mysql_queries,并且工具提示的数据提取需要另外 2 个。

查询(出于搜索复杂性的考虑):

原始3个查询:

SELECT * FROM news ORDER BY bDate DESC LIMIT 5;
SELECT * FROM family ORDER BY created DESC LIMIT 5;
SELECT bplace.placeID, bplace.sName, bplace.countryID, bcountry.regionID FROM bplace, bcountry WHERE bplace.countryID = bcountry.countryID ORDER BY created DESC LIMIT 5;

Tooltip 2 查询(预加载方式):

while(...){

$allFamilies[] = $row["familyID"];

}

$allFamilies = implode(',',$allFamilies);

SELECT sName FROM bplace WHERE placeID IN ($allfamilies);
SELECT url FROM images WHERE placeID IN ($allfamilies);

工具提示 2 查询(ajax 方式):

SELECT sName FROM bplace WHERE placeID='1';
SELECT url FROM images WHERE placeID='1';
4

3 回答 3

2

您只需要考虑您的应用程序将增长到多大。如果你有几千行,你的 IN 查询真的会变慢。ajax 查询将始终快速加载,因为它们是直接查找。

此外,如果可以缓存数据,直接向 CDN 提供 ajax 调用将使其几乎立即加载。如果您不断提取数据并需要扩展 ajax 方法,也可以在密钥库上使用,因为它是主键查找。

于 2012-08-30T14:42:58.390 回答
2

我不确定您的问题是否有一个普遍的、明确的答案。

要衡量某种性能,您必须考虑更多变量,例如

  • 每页将加载多少个工具提示,
  • 他们返回的数据有多大,
  • 客户端和服务器以及服务器和数据库之间的连接如何,
  • 查询需要多长时间,
  • 有多少用户同时浏览这些页面,
  • 是否涉及缓存

还有很多。

前段时间我在一个项目中遇到了一个非常相似的问题(它也与工具提示有关),我采用了 ajax 方式,主要是因为我想尽可能加快初始页面加载速度(更少的脚本持续时间,更小的 html 大小) . 如果许多用户同时浏览所有的工具提示,那么 ajax 方式实际上会消耗更多的“性能”,但在这个项目中显然不是这种情况。

于 2012-08-30T14:43:07.057 回答
2

我认为这都是带有一点常识的偏好。预加载的一千行将需要一些时间来抓取、循环然后显示(使页面大小变大几 kb)。如果只是抓取了几行,那么只抓取这些行而不是等待 AJAX 加载它们可能是有意义的。

另一件要考虑的事情是,数据会改变吗?它会经常改变吗?如果工具提示数据不断变化,那么 AJAX 可能是无论如何都要走的路。如果它主要是静态的,那么将它们全部放在一起可能是有意义的。

Ajax 可能需要一些时间,但除非您的服务器容量很大并且您没有相应地增长,否则这些请求只需要几分之一秒。

最终,这是个人喜好。什么对你来说更容易?对每个工具提示进行硬编码会更容易,还是使用 javascript 调用工具提示数据更容易?选择更容易并且似乎更适合您的网站的内容。

于 2012-08-30T14:38:20.860 回答