作者MOONRAKER (㊣秘密情报员)
看板PHP
标题Re: [讨论] PHP显示出html的速度差别!?
时间Mon Dec 30 12:14:09 2013
※ 引述《kingoface (桑原)》之铭言:
: 哈罗,大家好!
: 小弟刚刚想到了一个颇为无聊的问题.
的确是颇为无聊,根本不用考虑这个问题。
: 需要显示资料的时候
: 1.
: 我会在<body>上方写个
: <?php
: $exp_html='<table><tr><td>一堆资料库的资料</td></tr><table>';
这是不利维护的烂设计,网页外观无法由其他人修改。
在团体开发中会整死前端和美术人员,
就算只有一个人在开发,大专案的後期必定令你痛不欲生。
: 2.
: <?php
: //做了一堆资料库 or foreach的运算 存在 $data
: echo $data;
看不出来这跟1有什麽差别,就只是输出的那包在同一个php内前面或後面算出来而已。
现在比较理想的作法是把view和其他部份切割开来,
不管你是用MVC,或SMARTY那种不明确的(M/C)+V,原则上都是这样
(controller.php)
变数 = 资料;
变数 = 资料;
......
参数阵列 = Array( 变数, 变数, 变数, ... );
(以参数阵列代入view.php)
(view.php)
(framework自动打开参数阵列)
<?php echo 变数1; ?>
...
<table>
<?php foreach 变数2 as 列变数 : ?>
<tr>
<td><?php echo 列变数[栏位]; ?></td>
</tr>
<?php endforeach; ?>
</table>
...
这里面不但把资料准备和资料显示分开在两个档案中
(当然最後view可能还是被include进来在同一个档案里,视framework实作而定)
而且资料都是在阵列和物件内包了又包,最後包成参数阵列送给view
这些变数传递的成本,并没有让MVC或SMARTY慢到人能够察觉的地步
即使资料再多也一样。
会慢到有差别,那表示
1)逻辑里面有多重回圈不能避免,或者没察觉到的多重回圈。
2)资料真的很多很多,多到没有意义。
在2的状况,浏览器通常会先挂。
--
从前有个马铃薯王国 有个高贵伟大的国王
有的人尊敬他 有的人畏惧他 但有个人敢看不起他不只是一条龙
嘿呵 快出动 去征服 去摆平 嘿呵 快出征 去征服那条龙
嘿呵 快出动
(宰了它!轰了它!)嘿呵 快出征 去征服那条龙
:■ Potatoes and Dragons (C)Alphanim France 2004-05 :.
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 118.163.12.174
1F:推 LaPass:嗯~ 总之就是这一篇说的这样啦 XD 12/30 12:48
2F:推 kingoface:恩,了解,感恩大大的分享. 12/30 13:02
3F:推 ooopooo:pro! 12/30 23:08
4F:推 k900i:请问HTML先出来再用Javascript去读PHP後innerHTML进td的作法 12/31 09:58
5F:→ k900i:是否就变成Ajax而比这两例效能更差? 12/31 09:58
6F:推 LaPass:楼上那是个有趣的问题... 12/31 10:18
7F:→ LaPass:那会把一个request切成两个以上request,但你html的部份可 12/31 10:22
8F:→ LaPass:以丢给nginx之类的做快取,就不用通过PHP去执行,这对效能 12/31 10:23
9F:→ LaPass:来说是比较好的作法。但缺点是会对SEO有影响,那些网路蜘蛛 12/31 10:23
10F:→ LaPass:通常不会看ajax抓出来的资料。 12/31 10:24
11F:→ LaPass:也就是说,比较适合一些私人的东西,例如Facebook、GMail就 12/31 10:25
12F:→ LaPass:这样搞 12/31 10:25
13F:→ LaPass:而且以後做负载平衡时还可以把html等静态资料主机跟php分开 12/31 10:26
14F:→ LaPass:,这会是比较好的作法。 12/31 10:26
15F:→ MOONRAKER:Ajax是另一个问题吧 他应用在有互动性或多层次查询的时 12/31 12:26
16F:→ MOONRAKER:候 把一个大批次查询切割成若干个小的查询 每次输出的资 12/31 12:27
17F:→ MOONRAKER:料量相对也少 而且受到使用者操作时间的影响 加总的效率 12/31 12:28
18F:→ MOONRAKER:并不像单一表格输出要求那麽高 而且是有利介面设计的 12/31 12:29
19F:→ MOONRAKER:反过来讲 如果是一个批次查询的大表格 硬要用ajax可以算 12/31 12:33
20F:→ MOONRAKER:是规划的错误 12/31 12:33
21F:→ danny8376:说到ajax 就想到可怕的GoogleBot 会解析JS OAO... 12/31 14:24
22F:推 LaPass:GoogleBot 会解析JS!! 太强大了.... OAO!! 12/31 15:42
23F:→ danny8376:我某个纯AJAX (没JS就只是个空样板) 的网站 12/31 16:46
24F:→ danny8376:就这样被GoogleBot爬内容了 看log也有GoogleBot 12/31 16:47
25F:→ danny8376:去爬AJAX资料的log... Google超可怕的啦!!! 12/31 16:48
26F:推 chenlarry:Google有写一只专门爬AJAX的机器人 囧 12/31 21:49
27F:→ xxxzzz:看不懂"..纯AJAX (没JS...",恐怖的是没JS,GoogleBot解析JS 01/01 07:42
28F:→ danny8376:(没JS"的话"就只是个空样板) 01/01 18:03
29F:→ DongFeng:抽掉JS就只剩下空壳 网站一切资料都使用AJAX捞出的意思 01/01 20:22
30F:→ DongFeng:如果一个页面需要用到多个不同性质的资料 $arr1、$arr2、 01/01 20:25
31F:→ DongFeng:$arr3等 并且这些资料在页面上都有各自不同的使用区块,那 01/01 20:26
32F:→ DongFeng:就会让整体程式码有好几个包含html码的<?php...?>区块,如 01/01 20:28
33F:→ DongFeng:果加上其中又有判断式又不想使用echo输出html码的时候,就 01/01 20:29
34F:→ DongFeng:会变成<?php...<?php...?>...?>这种巢状的区块, 总觉得这 01/01 20:30
35F:→ DongFeng:样的呈现方式很杂乱, 不知道版上的前辈对於这样的状况有 01/01 20:31
36F:→ DongFeng:没有什麽解决之道呢? 01/01 20:31
37F:推 LaPass:就smarty那些东西啊.... 01/01 22:02
38F:→ LaPass:还有,你可以考虑使用MVC,不过不管切的再怎麽乾净,还是会 01/01 22:04
39F:→ LaPass:有html跟後端程式码混在一起的片段在,只是规模大不大、有 01/01 22:04
40F:→ LaPass:没有把讨厌的东西收到看不见的地方去而已 01/01 22:05
41F:→ MOONRAKER:这没什麽啊 过度的洁癖是不卫生的 01/01 22:29
42F:→ MOONRAKER:如果洁癖到一点php code都不想在看板里看到 那就ajax罗 01/01 22:30
43F:推 DongFeng:感谢楼上两位. 推过度的洁癖是不卫生的XDD 01/01 22:41
44F:→ MOONRAKER::) 至少就我接触到的习惯,与其把全部code都费劲藏起来 01/01 23:43
45F:→ MOONRAKER:不如把他收拾乾净、整理好,让前端也能看懂剩下的部份 01/01 23:44
46F:推 LaPass:用ajax的话会变成js跟html混在一起,某种程度只是把脏的地 01/02 00:29
47F:→ LaPass:方推到前端去而已.... 01/02 00:29
48F:→ mmis1000:反正js也能全部封装进lib再调用阿,只要看不到就没差 01/02 01:24
49F:→ MOONRAKER:如果用backbone.js那种新兵器,好像就可以在前端达成MVC 01/02 11:44
50F:→ MOONRAKER:并且code和HTML完全分离!? 01/02 11:44