<!----><!----><!---->
项目初期,成员意见不一,同事坚持从头开始,从美工开始设计界面原型,一切遵从正常项目流程。我却不以为然—— 该系统功能不少、用户体验要求如此之高,项目人员配备只有 2 个,项目期限也只有 2 个月,如果按照往常的项目流程,肯定是不可能完成的,就算日赶月赶,功能出来了,用户体验肯定也无法满足用户要求。
那天下班,我心情沉重了。我打开 163 免费邮,认真的把每个功能都体验一下,其实我早已是 163 邮箱的忠实用户,这次它的升级带来的用户体验,确实是前所未有的满足。在如此不错的用户体验面前,我更加下定决心它是个不可能完成的任务,于是,我起了邪念——“ 抄袭” 。后来的项目成果就是我当初坚持的这个想法的最佳验证!以下我就和大家来分享一下这个山寨过程。
笔者登录 163 邮箱进入首页,点击收件箱,按 Ctrl+S 另存为该页面到本地。进入存储文件夹可以看到一级目录里有 main.jsp.htm ,点击它并不能看到任何界面,别急,先进入 main.jsp_files 文件夹,可以看到 index_v3.htm 和 servdata.htm 。值得一提的是, 163 页面用了不少的 frameset/iframe , main.jsp.htm 就是用 frameset 将 index_v3.htm 和 servdata.htm 框进来的。是的,主角登场了, 163 就是用这 2 个页面来向我们展示这良好的用户体验。进入 index_v3_data 文件夹,我们迎来了 css 主角 —— globle.css 和 163_blue_s.css, js 主角 —— engine.js 、 mainmodule.js 、 address.js 等。分别建立 images 、 styles 和 scripts 文件夹,提取其中的image ,css 和js ,并对其中的index_v3.htm 进行稍微改造(如路径、编码等修改),我们就可以在本地看到163 的原型界面了(不出意外,应该会报MM 未定义,哦,MM?! )。这样,很简单的,我们完成了第一盗用—— 界面原型。
经过技术调研,虽然可以从163 得到启示,但163 的强大而又复杂的业务功能并不都是我们所需要的。要只取所需,从中拨开云月,才能见星星。面对“ 另存为” 而来的众多而又混乱的xhtml 、css 、js 代码,如何从这些素材抽取以塑造我们的最初用户需求原型,看似简单,其实不然。面临最直接的一个问题: 80 多个文件中,到底哪几个文件才是我们需要的?对这些文件进行大概的浏览和阅读,从大量的素材中攫取有用信息,从页面推测后台业务逻辑等,不断推测和不断尝试的耐心显得特别重要。
不费吹灰之力,界面原型出来了,但是这个原型远远不能满足我们的客户要求 —— 非但存在 js 错误,而且,客户需求是至少可以进行简单的点击反应。是的,这 2 个问题都直接和 js 相关,如今摆在我们面前就只有 2 条路走了:第一,自己写 js ,理想的状况是模仿163 的js ,这样带来的好处是代码是自己写的,可维护性是情理之中,但是难度有二:效果必须和 163 一样,这也是客户需求之一;另外就是一定得是 js 高手,非高手绝非短期可以写得出;第二条路,采用其原版的js,尝试让下载的 js 运行起来,为己所用,然后再针对业务不同进行修改。出于各方面条件考虑,笔者决定走第 2 条路,尝试着阅读其 js 。打开她的 js 一看,全部挤在一行,甚至有的会出现乱码。这是 js 被混淆过的迹象 —— 排版混乱、小写为首的方法名全部重新取名,加上 js 中含有复杂的业务逻辑,完全无法阅读,更谈不上维护和调试了。
无论如何,对 js 排版绝对是第一个要解决的问题,尝试过借助 MyEclipse 等 IDE 对其进行排版, mainmodule.js 和 address.js 可以顺利被排版,但是原本的中文全部被转换成乱码。至于 engine.js ,由于其内容过长、存在语法错误(混淆的原因)等问题,使得 MyEclipse 的 Ctrl+Shift+F 快捷键只能对其其中语法正确部分排版(但依然存在乱码问题),至此笔者试着利用 Firefox 寻得其 url ,对 engine.js 重新下载(之前是另存为的保存方式),再次使用 MyEclipse 重新排版,语法错误迎刃而解,但是编码问题依然无法解决。至此笔者一度失望,心想第一中文邮箱,怎么可能轻易让你得到其原 js 呢,那其品牌启不可轻松被拷贝?!差点放弃。问题既然出在 MyEclipse ,心想是不是其默认的 js 编辑器不过强大?于是尝试安装了 js 插件。 JsEclipse 和 spket 是 Eclipse 的 2 个著名 js 插件,都用过,效果很不错,笔者这里选择了 spket 。果不其然, mainmodule.js 和 address.js 排版和乱码问题都被解决了,这是一大进步,笔者看到了希望。但是 engine.js 仍然无法被顺利排版,在 spket 面前它显得异常镇定,一动也不动。最后笔者决定用最苦也是最辛苦的方法 — — 借助IDE 的diff 功能,寻得乱码之行,一处处比较过去,再将其拷贝。经过耐心与细心比较,终于把乱码问题解决。
如此一来,似乎页面可以加载得比以前齐全,尽管还存在js 错误,也是情有可原,毕竟没有后台初始化数据。但是根据报错地方注释一些js ,页面开始不存在js 报错,有些按钮甚至有点击反应,这样,笔者看到了选择第2条路的希望。
因篇幅有点长,续(3),看到这里了,说明很有耐心,继续吧:)
分享到:
相关推荐
【VRP问题】基于禁忌搜索算法求解带时间窗车辆路径规划问题(VRPTW)是一种经典的运筹学问题,其在物流配送、公共交通调度、服务行业等领域有着广泛的应用。车辆路径规划问题(VRP)旨在最小化车辆完成所有客户访问...
论文研究-求解带时间窗车辆路径问题的插入检测法.pdf, 在求解带时间窗车辆路径问题各类算法的插入检测过程中, 针对已有检测时间窗口约束是否满足的方法存在效率不高的...
《一种纸箱解带装置》 在包装行业中,纸箱的使用非常广泛,尤其是在物流、仓储和商品运输中。为了方便快速打开纸箱,一种纸箱解带装置的设计显得尤为重要。这种装置旨在提高工作效率,降低操作人员的劳动强度,同时...
【VRP问题】基于模拟退火改进遗传算法求解带时间窗含充电站的车辆路径规划问题EVRPTW matlab源码【VRP问题】基于模拟退火改进遗传算法求解带时间窗含充电站的车辆路径规划问题EVRPTW matlab源码【VRP问题】基于模拟...
【路径规划-VRP问题】基于蚁群算法求解带时间窗车辆路径规划问题(VRPTW)matlab源码.zip
matlab头脑风暴优化算法求解带时间窗和同时取送货的车辆路径问题.zip
【路径规划】基于萤火虫算法求解带路障路径规划问题matlab源码.md
论文研究-求解带时间窗取送货问题的遗传算法.pdf, 首先介绍基于时差的插入法,进而设计求解带时间窗取送货问题的遗传算法.与传统求解该问题的遗传算法相比, 本算法有 ...
用matlab解带参数的方程组,并对参数进行赋值,对结果进行简化
2. `cheapest_ip.m`:这可能是用于获取当前最便宜(最优)的插入位置的函数,因为在车辆路径问题中,可能会考虑将新节点插入到现有路线的哪个位置可以带来最小的成本增加。 3. `decode.m`:解码函数,将编码的...
【VRP问题】基于模拟退火求解带时间窗的TWVRP问题matlab源码.zip这个压缩包文件,主要包含的是一个针对运输优化问题——车辆路径问题(Vehicle Routing Problem, VRP)的解决方案,使用了模拟退火算法(Simulated ...
2.领域:智能优化算法、神经网络预测、信号处理、元胞自动机、图像处理、路径规划、无人机等多种领域的Matlab仿真,更多内容可点击博主头像 3.内容:标题所示,对于介绍可点击主页搜索博客 4.适合人群:本科,硕士...
在本案例中,我们探讨的是如何运用遗传算法来解决一个特定的优化问题——带时间窗的路径优化问题。这个问题通常出现在物流配送、路线规划等领域,目标是在满足时间窗口约束的情况下,寻找最短或最优的路径。 在旅行...
在IT领域,路径规划是一项关键任务,特别是在自动化、机器人学和物流系统中。这个压缩包文件提供了一种解决此类问题的算法实现,即基于灰狼算法(Grey Wolf Optimizer, GWO)的路径规划解决方案,专门针对带有时间...
蚁群算法求解带时间窗的配送路径问题.caj
标题中的“基于遗传算法求解带时间窗多卫星任务规划问题含Matlab代码”涉及到的是一个利用遗传算法解决复杂优化问题的实际应用。遗传算法是一种模拟自然选择和遗传机制的搜索算法,广泛应用于解决多目标、多约束的...
NSGA2求解带时间窗的车辆路径规划问题(车辆数目自适应) 介绍 多目标优化算法求解带时间窗的车辆路径规划问题(车辆数目自适应) - 不懂运行,下载完可以私聊问,可远程教学 该资源内项目源码是个人的毕设,代码都...
【VRP问题】基于禁忌搜索求解带时间窗的TWVRP问题
2.领域:智能优化算法、神经网络预测、信号处理、元胞自动机、图像处理、路径规划、无人机等多种领域的Matlab仿真,更多内容可点击博主头像 3.内容:标题所示,对于介绍可点击主页搜索博客 4.适合人群:本科,硕士...
基于粒子碰撞的粒子群算法求解带时间窗车辆调度问题.pdf