vAgent开发--HTML和Javascript彻底分离

传统瘦客户端开发,HTML/CSS/Javascript,彻底分离?理想主义吧?
对,就是有理想主义。没有理想,就不会尝试实践;不尝试实践,怎么能前进?日本人水都能发动汽车了,html/js分类算鸟? 试试看吧:)

在vAgent项目中,需求的来源是客户认为我们的网页上javascript代码很多,影响SEO(国外客户对SEO都是有整理策略的,马上有一篇小文介绍ON-Site Seo)

而我们遇到的困难是:
1. 很多onclick事件充斥在html元素中
2. ROR程序员可能都遇到Helper问题,CakePHP采用类似的机制,比如GoogleApi就是借助了一个我们自己编写的Javascript Helper直接在页面中调用简化输出,结果导致传回浏览器时即时解析的javascript就混杂在页面当中
3. 有些javascript的变量是依赖于后台数据库输出结果的

下面看一个典型页面应用(该页面是澳洲的州介绍)
[img]http://koda.iteye.com/upload/picture/pic/17970/77c75970-08ae-3cf7-9e73-f624dd4866dc.png[/img]


针对上面我们提到的困难,我们逐步重构.基本思路是,定义一个页面同名.js文件用<script>标签包含进来,该例子中js文件名为destination.js

[color=red][size=medium][b]1. 很多onclick事件充斥在html元素中[/b][/size][/color]
比如,页面右侧的+和-点击后分别展开和合并,那么起初我们的写法类似:
<a href="" onclick="expand(..)" >+</a>


实际上前端开发经验丰富的人都知道如何剥离这段代码,特别是使用了prototype或者jquery框架之后。下面是使用prototype为例:
首先重新定义+,加入id属性
<a href="" id="state1" >+</a>


在destination.js中(伪代码)
 
Event.observe("state1", 'click' , function() {
expand(this);
show_left_of_page(this);
});



[color=red][size=medium][b]2. ROR程序员可能都遇到Helper问题,CakePHP采用类似的机制,比如GoogleApi就是借助了一个我们自己编写的Javascript Helper直接在页面中调用简化输出,结果导致传回浏览器时即时解析的javascript就混杂在页面当中[/b]
[/size][/color]

这个问题经过我们反复分析得出结论:不使用javascript helper.

[color=red][size=medium][b]3. 有些javascript的变量是依赖于后台数据库输出结果的[/b][/size][/color]
其实这个问题才是困扰我们的最大问题,很多程序员不假思索地否定了该种情况的javascript代码剥离.

对于上面的页面例子,澳大利亚各州的数据(名称,介绍和图片)都是后台数据库取出的,每次load后,这些数据作为一个数组被存储到javascript变量中,以供+/-点击后切换叶面左边介绍。

原(伪)代码片断如下:
<script>
// destination要用来存放后台州的数据,是javascript变量
var destination = new Array();

<?php
$dests = array();
// $destinations存放的是数据库中取出来的数据,是php变量
foreach($destinations as $destination) {
$dests[$destination['Destination']['id']] =
'<h2>'.$destination['Destination']['name'].'</h2>'.
'<p>'. $destination['Destination']['description'].'</p>'.
'<p>'.$html->image('/files/destinations/area'.$destination['Destination']['id'].'.gif','</p>';
}
foreach($dests as $key=>$value) {
echo 'destination['.$key."]='". $value ."';" . "\r\n";
}
?>
</script>


剥离思路:php 输出 json串存在html页面隐藏div中,然后javascript通过dom找到这个字符串用json库反解析

经过改进后,在html页面中

<div id="json_dests" style="display:none">
<?php
// $distionation是php数组存放的是澳大利亚州数据
echo $javascript->Object($destinations));
?>
</div>


在destination.js中:
function extract_destinations(){
var json_dests = document.getElementById('json_dests').innerHTML;
var destJsObj = JSON.parse(json_dests);
// 接下来输出destJsObj对象到destination数组变量中
}

经过以上三步,vAgent网站的网页"一干二净"。

---执拗于面向初学者写烂文的人于2008年7月 (进入我的博客看更多烂文)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值