Ajax 板


LINE

※ 引述《mrbigmouth (拒绝崩溃的蒲公英)》之铭言: : 在这种情况下,你需要的东西其实是Html产生器,一个帮你把资料变成Html页面的东西 : 如果这个过程就是TonyQ大大所说的"以特定格式储存再从伺服端取出"的"後端语言" : 那我认输,至少在这个情况下认输 : 因为整个处理过程根本只有一次嘛!当然是给处理能力最好的电脑去做.... : 但是 : 如果你的行事历至少需要多人编辑、依登入者身份可以随意插入、删除、变更工作内容 : 工作内容有分级、分块、分类,可以drill down跟roll up等等等的时候 : (依在下的不幸工作经验来看,所有一开始看来很简单的程式在之後八成都会 :  在老板/使用者的要求下加东加西,最後变成这种万能的样子) : 换句话说,资料进出资料库的频率很大的时候 : 前端就远胜於後端了 其实以上我们是有共识的 也就是前端修改频繁的状况下,用 CLIENT 可以缩小更新的范围, 也可以有效的进行互动。所以我就不多谈了。 虽然我的表达应该让你有误会的地方, 我想主要的误会在於我是把整理资料切成两段的。 一段是纯vo (json) ,另一段才是 vo => html。 我相信你应该也有切这两段,只是你没有特别标明而已。 另外 SEO 议题也只是 add-on 顺便一提,你可以忽略这个子项没差, 他不是很重要的重点,也有别的方式可以补偿。XD 至於,我说的行事历是主要用来显示的状况下, 靠後端组html就好了, 除非你有必要再画面上点一点,日历上就加个新项目(不换页)。 或者画面上按一按,东西就少一项,(不换页)。 很多地方的作法是把新增删除的表单往别的地方甚至别的系统扔, 这种状况行事历就只会是捞出来显示。 这种情况,我不觉得非得要用前端不可啦, 反正小量的字串工作对後端真的是不痛不痒。 : 为什麽? : 因为在工作交由後端处理的情形下,使用者每执行一次此类操作, : 伺服器就需要重新从DB捞一次资料、重新计算并且重新把资料传递给使用者 : 每次执行工作时,资料都需要跑一次DB->将原始资料编成适当格式->使用者的路程 : 而在前端处理的情况下,所有资料一进入记忆体就不太需要再从DB捞取,更不需要 : 再次经过网路传输的折磨 : 如下所示: : 状况: : A.使用者登入并浏览此月行程 : B.使用者浏览下个月行程 : C.使用者在下个月插入新行程 : D.使用者返回浏览此月行程 : E.使用者重新整理 : F.使用者drill down浏览今日行程 : 後端处理情形: : A.使用者资料传输给Server->验证使用者建立Session->从DB捞属於这个月的行程出来-> : 将原始资料编成固定格式->资料传输给使用者 : B.使用者资料传输给Server->确认使用者身份->从DB捞出下个月行程资料-> : 将原始资料编成固定格式->资料传输给使用者 : C.使用者资料传输给Server->确认使用者身份->将资料插进DB->从DB捞出新行程资料-> : 将原始资料编成固定格式->资料传输给使用者 : D.使用者资料传输给Server->确认使用者身份->从DB捞出这个月行程资料-> : 将原始资料编成固定格式->资料传输给使用者 : E.使用者资料传输给Server->确认使用者身份->从DB捞出这个月行程资料-> : 将原始资料编成固定格式->资料传输给使用者 : F.使用者资料传输给Server->确认使用者身份->从DB捞出今日行程资料-> : 将原始资料编成固定格式->资料传输给使用者 : 前端处理情形: : A.使用者资料传输给Server->验证使用者建立Session->从DB捞出所有使用者可见的行程 : 资料出来->以批次或者server-sent方式逐步传递给使用者->使用端将资料编成固定格式 : 展现 : B.使用端将资料编成固定格式展现 : C.使用者资料传输给Server->确认使用者身份->将资料插进DB->从DB捞出指定时间以後 : 有所异动的资料->资料传输给使用者->使用端将资料编成固定格式展现 : D.使用端将资料编成固定格式展现 : E.使用者资料传输给Server->确认使用者身份->从DB捞出指定时间以後有所异动的资料 : ->资料传输给使用者->使用端将资料编成固定格式展现 : F.使用端将资料编成固定格式展现 : 以上 以上这些我同意,如果你需要频繁操作,透过前端当然比较简单, 也可以只取你想要得部份。 : 最後 : 请不要把json说的好像不需要parse一样... : 无论是什麽格式的资料,从server端传过来的时候就只是字串 : 不管你是用eval还是各浏览器内建的parser, : 切CSV所花费的时间绝对小於转换json的时间 等等,我觉得你要不要说说你怎麽 parse CSV 的? 就我所知 , csv 要嘛就是用regex , 要嘛就自己split "," . (不管split 或indexOf+substring) 有比这更快更方便的方式吗? 我不是那麽常作csv,所以想确认一下。 如果没有,我觉得你的「绝对」要打个折扣。 : 使用资料的类别更是跟使用者体验八竿子打不着关系 : 只要用熟了就一点麻烦也不会有 这个前提是parse 需要花费时间,而花费时间动作多了 browser 会「钝钝的」。 当然我同意这种case底下,除非是ie6或ie7这种烂咖, 不然一般状况应该都没这问题。 : 当然,无论如何,前端花费的资源永远只是小case : 重点在於後端要传输资料的时候 : 你要输出json,就一定要先把所有资料存在记忆体里才能一次转换 并没这回事,你csv能怎麽做,json就能怎麽做。 如果你嫌一次转换一整个array太浪费资源, 你一笔一笔自己翻 string 转也可以,这是转换方法的问题。 没有人规定你要「一次转换」,事实上大量的资料我是不会这麽做, 这也是效能调校上的重点项目之一。 : 比如要把从DB resource读出的资料一笔笔全部存进阵列里...这过程是要吃记忆体的 : 小量的资料没感觉,如果是一千笔、一万笔资料呢?一个留言板的全部文章这种呢? : (特别是当使用语言是PHP阵列这种消费记忆体为实际N倍的怪物时) 你csv 能怎麽产,我就能怎麽产json。 : 从Server输出CSV就不会有这种问题 我觉得这只是你用不对等的方式再比较这两个东西。:P : json当然好用,我自己写ajax时也有超过一半是在用json : 但json比csv好的优势在於可以存进多层次、复杂的资料,而不是在效率 : 然後...从DB捞出来的原始资料,绝大多时候都是CSV能够处理的 这个我不认为,这可能跟资料操作的习惯有关系。 csv 是扁平的,那意味着每次的资料都是独一无二的, 你很难重用相同的资料在其他 request ... json 有弹性一点,不过这点要看设计习惯, 你觉得可以的话,我是不觉得有问题啦。 另外 json 可以透过 jsonp 轻松支援跨网域,这个弹性也是没话讲得。 : 在我上面所说的例子,当後端完全只负责捞DB与传输的情形下 : 完全可以使用CSV取代json,杀鸡焉用牛刀 有关 csv 跟 json parsing 的部份,我想数字会说话。 对 test case 或者测量方法有不满意的,可以自己改我们再来讨论, 我因为一时想不到啥好例子,也真的是很懒得再找csv parser, 所以找一个对 csv 来讲相对单纯的例子, 实务上,csv 还要考虑 "" 跟 , 的差别,还会再慢一点。 http://jsfiddle.net/jnAW3/1/ 这个我特地让 json 放点水,加上 "" 。 http://jsfiddle.net/jnAW3/2/ 本来想再测测 jsonp ,不过那个测试多少会被网路速度干扰,就算了。 基本上,如果你的资料超过八万笔,那真的已经算是很了不起的了, 这就是为什麽我不太理解你所谓的解 csv 比 json 快的论述在哪。 它在chrome跟firefox 的数字还蛮飘的,看不出明显差异, 在 IE 我的测试是相当明显,另外可以比较 ie6,ie7,ie8 ,fx,chrome 的。 在IE6,IE7 上的数字,那可不是小case, 尽可能降低资料的操作量一直都是 performance tunning 上的重点。 可能我的观念也不见得是对得,特别在效能议题上, 我们已经碰过很多次改个板,旧的观念就大洗盘的状况, 不过这个议题上到目前为止,我的论述只有两个: 1.csv parser 你要引用外部类别或者自己写复杂逻辑, 不好维护,也需要额外成本。(这是重点) 哪个是鸡哪个是牛刀还很难说... 2.效能上没有显着差异,所以我完全想不到, 任何用csv parser取代 json parser的理由。 当然,这可能是测试案例的问题,只是我的认知跟你的认知有出入, 如果你可以有更好得例子,能说明 CSV 的好处,那也很欢迎。 -- 网页上拉近距离的帮手 实现 GMail丰富应用的功臣 数也数不清的友善使用者体验 这就是javascript 欢迎同好到 AJAX 板一同讨论。 --



※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 198.203.175.175 ※ 编辑: TonyQ 来自: 198.203.175.175 (12/23 00:42) ※ 编辑: TonyQ 来自: 198.203.175.175 (12/23 00:44) ※ 编辑: TonyQ 来自: 198.203.175.175 (12/23 00:44) ※ 编辑: TonyQ 来自: 198.203.175.175 (12/23 00:46) ※ 编辑: TonyQ 来自: 198.203.175.175 (12/23 01:08)
1F:推 mrbigmouth:我不太清楚你说的切两段是什麽意思 12/23 01:27
2F:→ mrbigmouth:在很多情况下 我写的程式就跟我举的例子一样 12/23 01:29
3F:→ mrbigmouth:後端完全只负责身分认证跟取资料 其他全部给前端处理 12/23 01:30
4F:→ mrbigmouth:在考虑SEO的状况下 当然就是该怎麽做就怎麽做了 12/23 01:31
5F:→ mrbigmouth:然後我对json没偏见 上面也说过我常用 12/23 01:32
6F:→ mrbigmouth:会把csv举出来也只是举例 我用的更像是你说的1 也就是 12/23 01:33
7F:→ mrbigmouth:自订复杂逻辑 用来切的基本上不是,跟\n啦(太常出现,置 12/23 01:34
8F:→ mrbigmouth:换需求多) 至於为什麽会这样做 是极端的背景原因啦 12/23 01:35
9F:→ mrbigmouth:在做的後台在身分认证控管上很复杂 资料库也分散 而且 12/23 01:37
10F:→ mrbigmouth:重覆取用大量资料并且进行分析 12/23 01:37
11F:推 mrbigmouth:总之json速度的确比我想像中要快 受教了 12/23 01:41
12F:→ TonyQ:基本上我的操作习惯是这样,从server来的东西叫data 12/23 02:19
13F:→ TonyQ:他会是一个array或是object 12/23 02:19
14F:→ TonyQ:会有一个renderer 或者是什麽的function 吃这个data 12/23 02:19
15F:→ TonyQ:然後生成view。这两个部份我是严格分开的。 12/23 02:19
16F:→ TonyQ:所以对我来说 伺服器过来给我的data 尽可能的话 12/23 02:20
17F:→ TonyQ:应该是view那边我不太需要对data再做运算,(过滤日期..etc 12/23 02:20
18F:→ TonyQ:而view那边尽可能的就只针对ui相关的逻辑(切格子...etc) 12/23 02:20
19F:→ TonyQ:好处是如果我要更换资料来源 处理不同资料 会比较好 而且 12/23 02:21
20F:→ TonyQ:改逻辑时也可以清楚一致。 12/23 02:21
21F:→ TonyQ:这是我所谓的切两段。 12/23 02:21
※ 编辑: TonyQ 来自: 208.54.38.134 (12/23 04:25)
22F:→ TonyQ:当然实务上几乎不可能切乾净啦,但至少 8:2 或 7:3 左右的 12/23 04:26
23F:→ TonyQ:比例要维持住就是了。 12/23 04:26
24F:推 nightspirit:推server来的是data~ 用json真的很方便阿 12/23 04:50
25F:推 mrbigmouth:也许是因为我一向都前後端通包吧 所以习惯上不需要这样 12/23 08:56
26F:→ mrbigmouth:完全分开 前端也可以把资料运算跟view分得很开 两个档 12/23 08:58
27F:→ mrbigmouth:案什麽的 维护上其实不会特别困难 12/23 08:59
28F:→ mrbigmouth:说到底 "资料传输时的格式"其实并不是非常重要的东西 12/23 09:00
29F:→ mrbigmouth:离开输出入两端就什麽都不是 不管是前後端都只有输出入 12/23 09:00
30F:→ TonyQ:我也是偏向前後端通包的啊 :) 不过把东西都扔到client 也是 12/23 09:00
31F:→ mrbigmouth:时会接触到这块 我今天不想用CSV了也可以很快就换掉 12/23 09:01
32F:→ TonyQ:限度的,大概是我早期browser发展还没现在这麽好,client常 12/23 09:01
33F:→ TonyQ:常玩太用力就 hang 住 。对client的效能比较敏感一点。:P 12/23 09:01
34F:→ mrbigmouth:维护上的困难我想是几乎没有啦 这就看个人习惯了 12/23 09:01
35F:→ TonyQ:不过这种东西只要自己做得习惯就好啦 有几百种方法 12/23 09:02
36F:→ TonyQ:没有什麽是对的 只是不要变成浆糊混一起就好了 12/23 09:02
37F:→ TonyQ:有的人用档案分 有的人用函数命名区隔 ..etc 12/23 09:02
38F:→ TonyQ:很多种方式的 12/23 09:02
39F:→ chrisQQ:兔曹一下,如果资料超过8万笔要一次秀出来,那就是 12/23 10:11
40F:→ chrisQQ:设计问题,而不是效能问题了 XDDDD (飘走 12/23 10:11







like.gif 您可能会有兴趣的文章
icon.png[问题/行为] 猫晚上进房间会不会有憋尿问题
icon.pngRe: [闲聊] 选了错误的女孩成为魔法少女 XDDDDDDDDDD
icon.png[正妹] 瑞典 一张
icon.png[心得] EMS高领长版毛衣.墨小楼MC1002
icon.png[分享] 丹龙隔热纸GE55+33+22
icon.png[问题] 清洗洗衣机
icon.png[寻物] 窗台下的空间
icon.png[闲聊] 双极の女神1 木魔爵
icon.png[售车] 新竹 1997 march 1297cc 白色 四门
icon.png[讨论] 能从照片感受到摄影者心情吗
icon.png[狂贺] 贺贺贺贺 贺!岛村卯月!总选举NO.1
icon.png[难过] 羡慕白皮肤的女生
icon.png阅读文章
icon.png[黑特]
icon.png[问题] SBK S1安装於安全帽位置
icon.png[分享] 旧woo100绝版开箱!!
icon.pngRe: [无言] 关於小包卫生纸
icon.png[开箱] E5-2683V3 RX480Strix 快睿C1 简单测试
icon.png[心得] 苍の海贼龙 地狱 执行者16PT
icon.png[售车] 1999年Virage iO 1.8EXi
icon.png[心得] 挑战33 LV10 狮子座pt solo
icon.png[闲聊] 手把手教你不被桶之新手主购教学
icon.png[分享] Civic Type R 量产版官方照无预警流出
icon.png[售车] Golf 4 2.0 银色 自排
icon.png[出售] Graco提篮汽座(有底座)2000元诚可议
icon.png[问题] 请问补牙材质掉了还能再补吗?(台中半年内
icon.png[问题] 44th 单曲 生写竟然都给重复的啊啊!
icon.png[心得] 华南红卡/icash 核卡
icon.png[问题] 拔牙矫正这样正常吗
icon.png[赠送] 老莫高业 初业 102年版
icon.png[情报] 三大行动支付 本季掀战火
icon.png[宝宝] 博客来Amos水蜡笔5/1特价五折
icon.pngRe: [心得] 新鲜人一些面试分享
icon.png[心得] 苍の海贼龙 地狱 麒麟25PT
icon.pngRe: [闲聊] (君の名は。雷慎入) 君名二创漫画翻译
icon.pngRe: [闲聊] OGN中场影片:失踪人口局 (英文字幕)
icon.png[问题] 台湾大哥大4G讯号差
icon.png[出售] [全国]全新千寻侘草LED灯, 水草

请输入看板名称,例如:Boy-Girl站内搜寻

TOP