熊 棠,唐 勇
(武警四川总队 通信网络管理中心,成都 610015)
网络SMS应用中有关有效数据长度控制的算法分析
熊 棠,唐 勇
(武警四川总队 通信网络管理中心,成都 610015)
针对基于网络短信息服务的有效数据长度控制的问题,提出了“逐字修正”和“超阈回滚”2种实现算法,并设计了2种算法的实现脚本。针对2种算法流程的不同,结合实际使用中数据的特点,比较了2种算法的优缺点;并针对可能出现的错误,提出了优化后的算法。借助浏览器插件,设计实验进行了定量分析,实验结果证实了算法分析阶段的预测结果。
文本长度限制;算法;脚本效率
随着网络技术的快速发展,基于网络的短信息服务(Short Message Service,SMS)由于其平台的开放性、便捷性和可移动性,逐渐成为快速广播应用的首选平台。SMS通常对信息长度有一定的限制,例如国内主要从事GMS网络运营的ISP将SMS服务中单条SMS信息内容限制为70个字(140字节)。即使使用GSM短信分割协或采用CDMA等支持更长信息服务的基础网络,为了减轻网络压力,也需要对数据长度作出限制,因此,有必要在输入端浏览器限制文本的输入。目前常用的限制文本长度的脚本通常存在中文字符兼容性不好、浏览器兼容性差等问题。据此,提出2种算法,可以准确完成英文字母、数字、符号及中文字符混用情况下的文本长度控制。采用跨浏览器的Javascript脚本实现算法,并采用一种直观准确的检测方法,测试脚本的效率;使该脚本的运行不受文本长度变化的影响,并能符合用户通常的使用习惯。
用户的需求主要有3种:1)用户在客户端(Internet Explorer 6.0浏览器及同系列更高版本、Firefox 3.5浏览器及同系列更高版本,后续分析及实现均以此两系列浏览器为基础[1]。)输入文本,客户端显示还可输入的文字数量,随操作自动更新。2)当文本长度达到预设定值的时候,禁止输入,文本锁定。3)充分考虑用户操作习惯。脚本应在逐字输入、外部粘贴等操作下均能正确执行。针对以上3种需求,算法分析如下:
1)触发动作
考虑需求3),脚本应在对象文本区域(Textarea)执行按键、点击事件时均激活。即在 onclick、onmousedown、onkeyup事件时激活脚本。同时,在表单提交之前,对所有表单对象进行格式化检查时再执行一次脚本。
2)文本长度检查
在Javascript脚本(以下简称JS)中,字符串对象有length属性,表示了字符串的长度。但是JS中,将单字节文本与双字节文本做相同处理,例如“测试”这样的2个汉字的字符串,在JS中的length属性为2,这与实际数据传输与存储是需要占用4个字节的情况不符。因此,需要构建1个函数(function),得到1个可能包含单字节字符及双字节字符的字符串的准确字节数。
字符串对象存在charCodeAt()方法,返回在指定位置字符的万国码(以下简称Unicode)编码[2]。Unicode及网页常用的GB2312、GB18038、UTF-8等字符集通常都向下兼容ASCII码,因此,使用charCodeAt()方法返回值大于007F(16进制)时,表明字符串对应的该位置字符要占用2个字节,反之占用1个字节[3]。
3)余字提示
得到当前字符串所占字节长度后,以设定值(字节数)与当前值之差除2,得到还可以输入的文字个数,并将结果作为页面元素显示出来。
4)长度控制
长度检查随输入激活,当脚本检查到长度超过设定值时,应将长度锁定在最长状态。
按照以上需求,可以有2种方式实现长度控制。
该算法的流程是:检查当前文本长度,如果超过设定值,将文本域中的字符串取不大于设定值长度的子字符串,并将子字符串值赋给文本域对象。在一个循环过程中将当前字符串对象逐字符添加到1个临时字符串后面,然后检查临时字符串所占的字节长度;当长度超过设定值时,跳出循环,并得到当前位置减1为最长字符串。将结果赋值给文本域对象并锁定。该算法适应性强,但代码繁复,运算量大。
该算法的流程是:检查当前文本长度,如果未超过设定值,将文本赋值给一个全局性的对象;如果超过设定值,从全局性对象中取值赋给文本域对象。全局性对象可以为全局变量,也可以为表单对象。此处以全局变量为例加以说明。声明全局变量TempStr;对当前字符串对象进行长度检查,如果未超过设定值,将字符串对象值赋给全局变量TempStr;如果超过设定值,则取TempStr的值,并将其赋给文本域对象并锁定。该算法程序简洁,运算量低,但实际使用中存在局限性。下面将说明并优化。
使用Javacript脚本实现上述算法的实现。按照上述分析,可以将脚本分为3个部分,分别对应长度检查、余字显示和长度控制。
声明函数GetStrLen(Str)作为实现长度检查的脚本,其中Str为待检查的字符串。
声明函数LastWords(tagID,NowLength MaxLen)作为实现余字显示的脚本,其中tagID为页面上显示剩余字数的容器ID,NowLength为当前字符串所占字节长度,MaxLen为设定的最大字节数。
声明函数CHGLeftWords(obj,tagID,MaxLen)作为页面对象事件激活动作,并在此函数中处理长度控制。其中obj为页面表单中的文本域对象,tagID为页面上显示剩余字数的容器ID,MaxLen为设定的最大字节数。
1)算法一的实现:
2)算法二的实现:
算法二比算法一简洁、运算量少,运算量不会由于字符串长度的变化而增加,适合于较长文本的控制;但是当用户从浏览器外部采用复制粘贴方式提交数据时,如果文本超过长度,因为全局变量此时处于初始状态,会将文本域赋值为空。
采用算法一与算法二相结合的方式:在一般情况中用算法二处理,简洁高效;当算法二失效的情况下,采用算法一处理。脚本实现如下:
在实际使用中,算法二(特别是适应性改造后的算法二)与算法一相比,哪个效率更高呢?这就需要设计一个实验,以定量分析的方式得出结论。
前端脚本运算效率涉及很多方面,对于用户体验来讲,最直接的就是运行时间;对于上述2种算法的效率比较,可以简化为完成同样处理工作的时长对比。
为了排除客户端系统资源分配对于测试结果的影响,需要使用相对时间长度来进行比较;同时为了排除客户端系统中断的影响,需要在同样输入条件下进行多次测试来降低误差[4]。
在Firefox 3.6下,使用开源插件Firebug 1.6.0测试脚本运行时间[5]。测试操作方法为:
1)测试环境为 Windows xp+SP3、Firefox 3.6。
2)每次测试前清空浏览器缓存,刷新页面。
3)测试数据分3组,分别为140字节、255字节和1 024字节,输入方式为手工输入。
4)每组数据在Firefox 3.6下分别测试5次,记录下读数。
表1为测试记录:
表1 不同字节文本条件下2种算法的耗费时间对比单位:ms
由表1分析可知:
1)算法一在同等输入条件较下较算法二效率低;
2)算法一在需要处理的数据长度增加时,运行时间急剧增加;算法二受数据长度影响很小。
实验结果与理论分析结果一致。
通过上述分析及测试可以看出,采用不同的算法对脚本的执行效率有很大的影响。采用低效率的算法,最终结果可能会严重影响用户的使用体验,进而造成用户对该系统的抵触。
[1]FLANAGAN D.JavaScript权威指南[M].李强,译.5版.北京:机械工业出版社,2007.
[2]CROCKFORD D.JavaScript语言精粹[M].赵泽,译.北京:电子工业出版社,2009.
[3]EVERSON M,MCGOWAN R,WHISTLER K,et al.Roadmap to the BMP[DB/OL].(2011-06-23)[2011-03-12].http://www.unicode.org/roadmaps/bmp/.
[4]KEITH J.JavaScript DOM编程艺术[M].杨涛,译.北京:人民邮电出版社,2006.
[5]VOLCANO.初识 Firebug[J].程序员,2007(3):120-121.
Algorithm of Data Length Control in Web SMS Applications
XIONG Tang,TANG Yong
(Communication Management Center,Sichuan Brigade of Armed Police,Chengdu 610015,China)
This paper focuses on the effective data length control of network-based short message service.Two algorithms of“Always Correct”and“Over-threshold Rollback”are proposed.The advantages and disadvantages of these two algorithms are compared in combination with their individual arithmetic and features in use.An optimized algorithm is considered according to the possible errors in applications.The experiments for quantitative analysis are designed and the results verify the effectiveness of proposed algorithm.
data length control;algorithm;efficiency
TP301.6
A
1008-5440(2011)03-0018-05
2011-04-20
熊棠(1982-),男(汉族),重庆人,助理工程师,学士,研究方向:网站构架与应用。
唐勇(1977-),男(汉族),四川安岳人,工程师,学士,研究方向:网络优化与网络管理。