Ajax 板


LINE

※ 引述《ThreeDay0905 (三天)》之铭言: : ASP.NET写久了 : 目前的Project逐渐把重心转移到js上面, : 变成.NET纯粹只提供资料 : 用js做主要的处理 : 但是遇到一个问题,js的程式码实在太乱而且很难维护起 : 虽然说js可以写成物件导向 : 只是因为必须有一个读取文件的动作 : 变成要针对这页面挑选这页要用的函式库 : 可是又要考量到下载的问题,不可能丢一堆js档上去 : 还要去压缩或着组成同一个档案 : 变成整个架构变得很混乱 : 请问板上的前辈都怎麽去架构一个js专案 : 让程式码可有系统的再利用 : 也不会让页面的程式码变得这麽凌乱呢 比较常见的作法是把所有用到的 lib 打成一包, 虽然这样对第一次的浏览效能会比较有所损伤, 所以要搭配把script放在 </body> 的作法 。 但是考虑到浏览器的快取效果,「在大部分的情形下」, 这样会比分别读取大小不一的 script 档效果来得好, 即使你把他们打包成一个。 这个问题要讨论的我个人会分析成以下几个面向 1.流量传输问题 - javascript file 的总大小 2.连线数问题 - javascript file 的总数 以上两点是比较偏浏览器环境的限制,基本上是处於比较好解决的那块, 常见是 yui compressor 搭配一些简单的 shell script 跟规范工作流程 , 要费点功夫但不会很难搞定,而且这比较属於一次性的环境建设。 一般来讲会把专案的原始码跟发布的过程中,去进行一个 deploy 的程序, 在那时透过自动化程序来对 script 进行压缩的动作。 所以重点放在底下的东西: 3.javascript 再利用的可能性. 基本上当他跟页面的结构绑死时,绝大多数页面的行为是很难再利用的。 能够再利用的多是已经「元件化」(component)的东西, 举个例子 , jQuery datepicker , 诸如此类的. 所以这边提到如何去组织一个页面的script , 首先就要先把 script 区分成两个区域, 一个是环境,诸如 javascript lib (ex.jQuery/prototype/YUI...) 或者一些 plug-in,这些比较不会有异动, 而且比较有可能一起共用的要分开来看。 (上面这些是比较有机会/需要打包成一包的,因为共用性高。) 再来就是实际各页面各自需要的逻辑。 然後基本上非常不建议把script 写在 html里, 当你有多个 script function 散落各个页面区域的时候, 光找定义跟思考这些定义的复杂度就可以让你找到死了... 写成 .js 虽然有些人会诟病 js file变多, 但是考虑到cache 、 可能需要打包跟页面逻辑分离的程度, 这样个人觉得比较好。 也不建议写 onclick = "xxxx" , onchange="xxx" , 除非你的环境没有提供你任何 databinding 的 js tool , 理由是你很有可能会移除实做或改名时 ,忘了移除这个事件binding. 当然适当的用注解去提示 event binding 在哪里这是无伤大雅 , 但最好还是建立一致性的规则(ex.某页面的就统一放在某档案..etc)比较好. Quick fix is quicksand. ----------------------------------------------------- 再来是页面 script 的内容。 这其中其实你会发现大部分你写 javascript , 基本上都可以透过「被影响到的dom」来分成很多小圈圈。 比方说 form validation 会针对 form 做, lightbox 可能会做在连结或图片上之类的 。 这时候你就可以看看这些目标元件出现在其他页面的可能性高或低, 比方说form validation 的再利用性通常是非常非常的低, 还有一些奇怪的飞来飞去之类的 animtation ,通常可利用性也很低, 这就可以归类在页面 script ,通常能 component 化的机率很低。 有些的可利用性则可能很高。(当然,这要看你用什麽思维去设计。) 比方说常见的作法之一是用 class 去识别某些特定的行为, 像是 <a href="xxx" class="light-box" /> (只是比方), 然後自动在环境层级去 apply light-box效果。 或者是 <input type="text" class="date" /> 自动 apply datepicker 。 这种的通常都很明确,比方说只针对一个dom元件去作操作的, 或者是针对列表去作处理的等等。 ----------------------------------------------------- 以上这些是比较正常的介绍,以下实际比较会踢到的铁板。 ----------------------------------------------------- 通常最头痛的是一些需求变动之後, 或者是过度过度过度过度过度客制化的结果。 通常会是很复杂的实做,比方说点A跳BC、点C跳DE、点F跳AB,点D跳CDF, 有一堆 if-else 跟奇怪的 mapping rule 。 这种就不要太强求要维护性或看懂了, dirty requirement make dirty result . 但至少开个 function ,把所有有关的实做丢进去就是了, 有要维护的人至少知道这些烂code 只在这function, 不能因为少部份烂code把整个程式都污染成一团义大利面。 (换句话说,就是让他变黑箱啦, 当然单位要尽可能小,如果整个专案都黑箱那就不用玩了。) 讲到这里就又必须提到 global variable 要特别小心用, 因为黑箱搭配全域变数很容易会出事。XD 特别是在第一层定义的 var , 因为会直接被当成 window成员 , 更容易在存取时出事。 for example , 有些人可能不知道这件事 . <script type="text/javascript"> var hello ="hello"; // it means window.hello ="hello"; </script> 这就会造成类似这样的悲剧 http://jsfiddle.net/QMwHm/ 其实 js 这种动态语言比较讲求「自律」,所以要要求品质还蛮困难的, 特别在时程赶时,写出什麽鬼东西都有可能。XD -- 基本上元件化就是重新利用 js 的理想解之一... -- I am a person, and I am always thinking . Thinking in love , Thinking in life , Thinking in why , Thinking in worth. I can't believe any of what , I am just thinking then thinking , but worst of all , most of mine is thinking not actioning... --



※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 111.83.16.69 ※ 编辑: TonyQ 来自: 111.83.16.69 (09/19 14:46) ※ 编辑: TonyQ 来自: 111.83.16.69 (09/19 14:48)







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灯, 水草

请输入看板名称,例如:Tech_Job站内搜寻

TOP