20120304 一周总结

VCard & MeCard

这一二周里花了些许时间在为原有的产品添加QRCode功能上,开始使用vcard格式,在我的android手机系统上解析得很好。但到了美国人那头,他们用iphone,似乎支持vcard格式的解二维码软件并不怎么受欢迎。Meggie发来一封“调研”的信证明了这一点。大多数“受欢迎”的软件都只支持mecard格式的QRCode,于是我又给改成了mecard格式,当然,也预留了vcard的接口。

对于这两种电子名片标准,我想记录下来的就是:vcard更容易在百度google上搜到,mecard资料则不好找,大多是英文的。vcard可以理解为重量级的,mecard很light,甚至不包含company/cop类型的信息。网上能找到二者的示例,大都是带换行的,甚至也有中文的说明,明确表示vcard用\r\n换行。但实则没必要,mecard使用分号分隔,就像我们写的程序代码一样,vcard甚至不需要分隔。当然,这全看解析软件的代码怎么写了,但至少他们的标准都支持这种紧凑的实现。

你可以把一段文字贴在txt文件中,另存为vcf,然后打开它(如果你的电脑有outlook或其他支持的软件的话),可以检验一下你这段文字是否符合vcard标准。

mecard中的地址一项的格式很不适合中国,它是PO Box(似乎是现实的邮箱),房间号,街道.....等顺次组成的,也许这和这一个格式是日本人定义的有关。所以即使在你解析mecard格式的文字时,最好不要太去“贴合”这一标准,尽量灵活一些,把整个地址当做一个整体就好了。就比如我的系统中,前两项是不存在的,如果我一味遵守这个标准,而客户手机上的软件(谁知到他们用哪个)又不按标准的话,那将会让客户看到每条地址都以两个逗号开头,很不好。

动态控件生成

以前的文章中提到过,我做的项目之一,会在页面上摆很多控件,用后台代码控制它们的visible。在Dev站上这个系统慢得简直让人没法忍。一方面我打着为了性能的旗号,另一方面也因为像更好的抽象优化代码结构,还有就是自己想玩,三方面原因花了点时间打算改成动态生成控件。在向W君征求意见事,被问,到底这些控件是不是真的影响你的效率了?实际上我之前就进行过简单的测试,答案是肯定的。但被他问及,我又去测试想给他看一些确实的数据时,我发现答案是否定的,之前我的测试太为自己的想法服务了!一个页面的周期中,response的时间占了绝大多数,而那个该死的900条记录的列表又占了2/3的数据量,达到60K。而那些我最担心的大量不一定用得上的控件,由于用户操作流程的原因,绝大多数并没有留下“足迹”(自始至终没在viewstate中保存数据),他们开销仅仅是少量的response和更少量的post带来的网络开销。加上其他未隐藏的控件包括面包线,图片导航等等,才仅仅是那900条记录的1/2。我很希望出于精益求精,让其更节省开销,但这份工作用时,Leader恐怕不答应,重新修改代码结构,哪怕仅仅是Web层,Review的人恐怕也不答应。

于是我满心欢喜期待的动态控件一套模板算是白写了,也引出来下面的问题。

900行的下拉列表

你能想象有多少人对此会很鄙视,他们会说“这样客户体验会很不好”,“失去了下拉列表的意义”云云。这都是占着说话不腰疼的。第一,我接过这个项目时时间紧,一切从简。第二,我愿意为做一个代替下来列表,好看又好用的搜索功能花些时间,这很好玩,但在看到需求时,外国人明确要求这就是一个超大的下拉列表,我们的Leader还有信件再次确认。第三,在我无数遍的测试过程中,我觉得它并不难用到哪去,我们的系统里也有这样的搜索panel,通过选首字母来筛选客户,我觉得那才真让我不想使用。第四,也是最重要的——虽然现在有时间完善了,但leader不会答应我修改它,即使leader答应,美国人也不会答应,要改就等到他们用得骂街了,亲口说。

所以,这列表是“下拉”定了,如果按传统的写法,这些数据将每次回发都Response回来。我尝试了两种殊途同归的解决方案:一种是UserControl中用一个select标记,一个隐藏域和一个用于触发回发的隐藏的Button,这样最快,最“龌龊”(用Leader的话,最龌龊的往往是最好的)。另一种方案是直接继承一个dropdownlist,他不包含任何Item,但有onchange事件。两种方法同样是在页面加载完后用JS将900条数据加载进去。第二种方法需要重新LoadPostData方法。对于其是否会有安全隐患我一直拿不准,毕竟这些客户端的数据我并没做任何检查。幸好这些数据也不会入库。我在找寻第三种方式,自定义控件,做Post数据的验证,但水平有限,暂时还在研究中。

至少目前的测试中,这种方法省了很多很多网络开销。

UpdatePanel与UserControl

我的项目中混用了UpdatePanel和UserControl。这样会遇到脚本问题,如果我在UserControl中内嵌了一些JS方法,而这些UserControl又恰恰需要控制是否可见,在第一次页面加载时,它们不可见,那在此UserControl所在的UpdatePanel回发后局部刷新,UserControl即使可见,其内嵌的js方法,对象也无法使用。解决方法就是不内嵌JS。都放在外部的js脚本中,太繁杂,后台注册脚本Block,不美观也不好维护。也许自定义控件可以解决这问题,或者通过ASP.NET AJAX一些方法能解决这个问题?水平有限,正在学习中。

原文地址:https://www.cnblogs.com/apodemakeles/p/2379144.html