Hello World
Spiga

分类:实践优化

使用Google Closure Compiler全力压缩代码

2011-04-07 09:30 by 老赵, 17672 visits
摘要:JavaScript压缩代码的重要性不言而喻,如今的压缩工具也有不少,例如YUI Compressor,Google Closure Compiler,以及现在比较红火的UglifyJS。UglifyJS的出名是由于它代替Closure Compiler成为jQuery项目的压缩工具。根据我的实测,jQuery Core的代码使用UglifyJS压缩后(节省62.5%)的确要比Closure Compiler压缩后(节省57.53%)更小一些。很显然,这是因为UglifyJS的压缩策略比Closure Compiler更“聪明”一些。我这里用了“聪明”而不是“激进”,是因为“激进”带上了一丝负面的意味——就好比Closure Compiler的“高级”优化方式。之前与UglifyJS相比的是Closure Compiler的“简单”优化方式,它们都是“安全”的,而Closure Compiler的“高级”优化几乎100%会破坏您的代码,因此它提出了各种“激进”的手段去“破坏”您的代码,以此达到压缩的目的。这种手段是把双刃剑,如果您能掌控它的压缩规则,则代码便可以压缩至极小。 阅读全文

UglifyJS有个不错的JavaScript解析器

2011-04-01 15:40 by 老赵, 7870 visits
摘要:我一直在为Jscex寻找好用的JavaScript解析器,之前我用的是Narcissus,也写过相关文章。不过可惜的是,Narcissus使用了SpiderMonkey的扩展,因此它并不是用ECMAScript 3实现的,无法在IE 8等浏览器中使用。目前Jscex使用的是NarrativeJS中旧版的Narcissus,但是我并不喜欢它输出的AST结构,使用中也发现高级功能里的一些bug,有些食之无味弃之可惜的感觉,而改写新版Narcissus又必须大动干戈。最近我接触到了UglifyJS,发现它的解析器相当不错,性能也比Narcissus高出许多,在此介绍给大家。 阅读全文

模拟HTML表单上传文件(RFC 1867)

2011-03-27 18:59 by 老赵, 17241 visits
摘要:如今使用HTTP协议定制API已经是十分常见的事情,在普通的GET和POST请求中传递些参数估计人人都会,但是如果我们需要上传文件呢?如果只是传递单个文件,那么将数据流POST给服务器端即可。但如果需要上传多个文件,或是在文件之外需要附带一些信息,那么又该怎么做呢?之前我遇到过一些朋友是这么打算的,他们说,不如就把文件流转化为文本,然后把它当作一个普通的字段传递。这么做自然可以“实现功能”,但缺点也很多。首先,将二进制流转化为文本会增大体积(例如最常见的BASE64编码会增大1/3的数据量);其次,既然互联网上存在相关的协议,又为何要自定义一套规则呢?其实这便是《RFC 1867 - Form-based File Upload in HTML》,它是我们用HTML表单上传文件时使用的传输协议,虽然十分常用,但似乎了解它的人并不多。 阅读全文

在MongoDB中实现乐观并发控制

2011-02-22 09:39 by 老赵, 11514 visits
摘要:说起来,自从接触了MongoDB以后,我在大小项目中就再也没有接触过关系型数据库了。性能倒不是什么主要问题,主要是方便,例如我可以在MongoDB中直接保存数组,然后把其中的元素当作查询条件,而在关系型数据库中,则需要使用额外的表格,然后再JOIN等等。当然,在MongoDB中很难进行JOIN,于是对于某些场景下会略显麻烦,但在记忆中我似乎真没什么束手束脚的情况。这方面我还没有仔细分析,可能MongoDB支持保存复杂对象会有所帮助吧。以上都是废话,这里我简单谈一下如何在MongoDB中实现乐观并发控制。当然加入您对MongoDB的功能都有所了解,那么这种做法也是十分显而易见的。 阅读全文

分清“语言/规范”以及“平台/实现”,以及跨平台.NET开发

2011-01-13 23:35 by 老赵, 5269 visits
摘要:在许多年前,“语言”就等同于“平台”,例如C,C++以及最早的Ruby和Python等等。但是随着技术发展,出现了一些通用的平台,例如.NET和Java,逐渐这些平台上的语言也越来越多。再后来,某些语言在不同平台上的实现也越来越多,事情也变得有些复杂。技术在发展,但是从目前社区的讨论中,我发现许多朋友的观念还没有跟上。简单地说,如今的观念,一定要从“语言即平台”切换成“语言及平台”,当分清“语言”和“平台”这两个不同事物之后,许多问题才能讨论地清楚。而且,这点对于.NET程序员来说尤为重要,因为C#语言可以说是目前“平台”、“实现”最为广泛的“语言”之一了。 阅读全文

第三届nBazaar技术交流会开始报名

2010-12-21 00:45 by 老赵, 1402 visits
摘要:为了错开年底密集的技术会议,第三届nBazaar技术交流会(即前“盛大创新院赞助的.NET技术交流会”)将于2011年1月15日举行。第三届的交流会将继续以往四场高质量的演讲,这也是确定nBazaar名称之后的第一次活动,希望nBazaar能够真正成为“集市”般热闹的社区活动。从现在开始,nBazaar技术沙龙的相关信息将逐渐集中至独立域名中,欢迎关注。 阅读全文

抗拒“组合”的UITabBarController

2010-12-13 13:38 by 老赵, 6940 visits
摘要:最近在写一个iPhone应用程序,基于MonoTouch,所以在开发方面的问题,基本都是在界面元素的搭建上。这个程序界面相对比较复杂,于是我根据自己的想法来进行组合,结果发现UITabBarController不能放入其他的视图内,而只能直接放在Window上(或Window里的UINavigationController里),否则就会出现界面向下偏移的情况。现在虽然有workaround,但是对于UITabBarController抗拒组合的情况,只能深表叹息了。 阅读全文

服务器端执行JavaScript代码

2010-11-09 18:11 by 老赵, 18035 visits
摘要:话说,如今不在客户端使用JavaScript代码才是稀奇事儿。由于Web应用的体验越来越丰富,客户端用JavaScript实现的逻辑也越来越多,这造成的结果就是某些几乎一致的逻辑需要在客户端和服务器端各实现一遍。这违反了DRY原则,不容易维护。幸运的是,我们可以在服务器端执行JavaScript代码,谁让JavaScript傍上了这无比霸道的浏览器平台呢? 阅读全文

对HTML做白名单过滤

2010-10-19 15:43 by 老赵, 3808 visits
摘要:让用户输入HTML的内容是很常见的需求,但是这有一定危险性,可能会带来XSS等问题,因此一般大家都要对HTML进行一定过滤。这个过滤并不容易,如<script />元素自不必说,其他还有如onload或onclick事件,甚至一个普通的<a />元素,它的href中也可以执行JavaScript代码。以前我一直有一段用于过滤的C#实现,一直没有出篓子,似乎也挺靠谱,但最近不知怎么的却发现了问题,可能是C & P出错,也可能原本就有问题,我没有太去关心。但问题总需要解决,于是我想,不如换个角度,基于白名单进行过滤吧。 阅读全文

当类型转换表达式遇上自定义转换操作

2010-10-15 13:50 by 老赵, 1692 visits
摘要:之前我提到说System.Json是一个十分不好用的类库,其中一点就是在于,我没法将一个JsonValue转化为范型类型——它只为Int32,String等几种特定类型定义了隐式转换,又无法得到以object类型所引用的值。不过这也难不到拥有“在运行时创建自定义表达式树并编译成动态代码”的.NET程序员。我们可以写一个辅助方法进行JsonValue至任意类型的转化操作,.NET类库会负责为我们选择合适的转换方式。只不过,类库中的一个Bug会让我们稍微绕一点点弯路。 阅读全文

在传统.NET程序中使用Silverlight SDK里的JSON类库

2010-10-12 17:34 by 老赵, 2650 visits
摘要:话说在Silverlight SDK中提供了一套JSON类库,叫做System.Json。这个类库功能很简单,就是使用.NET来表示JSON格式的“结构”。换句话说,就是我之前在JsonMe中所提到的JsonObject,JsonArray之类的东西,但完全不包括JSON结构和实际类型之间的转化。虽然这个类库很不好用(谁用谁知道),但至少是一个可以通用于Silverlight和MonoTouch的类库,因此我决定将JsonMe基于它进行构建。为此,我对mono中的开源实现进行了移植,使它仅仅依赖于功能最基本的.NET Framework 3.5 Client Profile,并修改了其中的一些明显的Bug。 阅读全文

JsonMe - 合约与类型分离的轻量级JSON映射类库

2010-10-11 00:29 by 老赵, 4816 visits
摘要:JSON全称为JavaScript Object Notation,原本作为JavaScript语言中用于表示对象结构的文本形式。不过目前JSON成功地脱离了JavaScript语言,它已经成为一种运用十分广泛的数据交换格式。从表面看来,目前用于某个对象与JSON格式之间相互转化的解决方案已经有了许多种,例如在.NET平台上,我们可以使用ASP.NET AJAX中引入的JavaScriptSerializer,WCF中引入的DataContractJsonSerializer,亦或是Json.NET。但是,最近我忽然发现这些类库都无法满足我的要求,因此,我今天花了一点时间,写了一个非常简单的对象与JSON格式相互转化的类库,是为JsonMe。 阅读全文

Padding Oracle Attack实例分析

2010-10-09 00:20 by 老赵, 8876 visits
摘要:在之前的《浅谈》一文中,我提到《Automated Padding Oracle Attacks with PadBuster》一文对理解Padding Oracle Attack非常有帮助,并打算将其翻译出来。现在我便来实现承诺了。《Automated》一文其实是在介绍PadBuster这个自动攻击工具,不过其中也通过实例加配图详细介绍了Padding Oracle Attack的原理——这也是我会翻译的部分。这篇文章写的非常通俗易懂,您只需要了解一点点关于加密的基础概念即可,不需要对加密算法或其证明有任何了解。我想只要配合些许Wikipedia上的定义,大部分朋友应该都能顺利地理解这篇文章。 阅读全文

浅谈这次ASP.NET的Padding Oracle Attack相关内容

2010-09-25 02:25 by 老赵, 4694 visits
摘要:上一周爆出了一个关于ASP.NET的安全漏洞,有关这个漏洞的第一篇文章应该是ScottGu的说明,但是其中各方面谈的也是语焉不详。由于这个漏洞关系到“安全”这样敏感的话题,其中又涉及到密码学这样常人看不明白的技术,于是导致了各种猜测和推测,其中甚至与我对ASP.NET的了解所有矛盾,因此我觉得也大都不靠谱。中秋休息在家,我简单地了解了一下与这个漏洞有关的内容,总结出了一些“能够说服自己”的内容,在此记录下来。因此,这篇文章的面向读者是那些和我差不多的同学:对ASP.NET有所了解,但对密码学知之甚少。 阅读全文

盛大创新院赞助第二届.NET技术交流会 - 演讲录像及下载

2010-09-21 11:27 by 老赵, 3534 visits
摘要:经过一个多星期的努力,我们在此为大家奉上盛大创新院赞助第二届.NET技术交流会的演讲录像。由于录像过程中的一些失误,我们在在讲师录像方面存在着很大问题,经过补救,也只能得到后两场演讲中使用手持设备拍摄下来的录像。在此向大家表示深深的歉意,有了这次的教训,我们以后会更加重视每一个环节的预防及补救措施,尽力避免如现在这样无可挽回的结果。 阅读全文

盛大创新院赞助第二届.NET技术交流会 - 各场演讲幻灯片

2010-09-12 22:32 by 老赵, 2089 visits
摘要:昨天有160多位朋友参加了盛大创新院赞助的第二届.NET技术交流会,再次感谢各位对我们的支持。比较遗憾的是,这次的讲师录像方面有着很大问题,我们正在想办法进行修补,希望可以有“差强人意”的结果。现在,大家请在第一时间浏览本次活动新鲜出炉的幻灯片。 阅读全文

盛大创新院赞助第二届.NET技术交流会即将召开

2010-09-09 11:14 by 老赵, 814 visits
摘要:由盛大创新院赞助的第二届.NET技术大会将于9月11号下午1点召开,本次交流会请到了四位讲师,议题覆盖了响应式编程、算法、面向对象设计及Windows内核等多个方面,其中最为突出的莫过于由潘爱民老师为大家带来的Windows内核方面的话题。我已经看过了各场演讲的幻灯片终稿,也很期待各位讲师在正式演讲中的表现。 阅读全文

关于静态资源打包后的相对路径问题

2010-09-05 21:53 by 老赵, 3126 visits
摘要:将多个静态资源打包为单个资源以减少请求数目,是提高页面加载速度的常用手段。于是上个星期,我就在实现网站静态资源的自动打包功能,原以为是个比较简单的问题,实现起来也没有遇到什么障碍,不过在开发完毕投入使用的时候却让我跌了下眼镜。由于静态资源在打包以后,它们的访问路径势必会改变,这样其他一些依赖于原有路径的资源就访问不到了。这方面最常见的例子,便是CSS样式表中引用的图片路径是相对于CSS文件路径的。当意识到这个问题以后,还真是让人手忙脚乱了一把。 阅读全文

盛大创新院赞助第二届.NET技术交流会开始报名了!

2010-08-16 11:02 by 老赵, 2271 visits
摘要:自上次盛大创新院赞助的首届.NET技术交流会到现在已经有两个月,这意味着按照原来的“一季一次”的计划也已经离第二次的活动不远了,考虑到9月份的中秋和国庆假期将工作日和休息日搞的支离破碎,于是交流会的时间会略微有些提前。第二届交流会的形式与上次相同,将为您献上四场高质量的技术演讲。当然这次在内容上有了新的尝试,除了引入了算法及面向对象设计的内容之外,这次更是请到了“传说中的大侠”为大家带来有关Windows内核的深度内容。人数暂定为200人,事不宜迟,赶快报名吧。除了.NET社区的群众以外,也欢迎其他技术社区的朋友前来参与交流。事实上,我组织技术交流会的目的之一便是希望能够促进.NET社区与其他技术社区的交流及相互学习。 阅读全文

关于Windows频繁打开关闭端口时出现的问题

2010-08-09 18:03 by 老赵, 9792 visits
摘要:最近事情很多,人也懒,东西看了不少,也想到过一些东西,但就是懒得写。现在记录一下前两个星期做一个压力测试时出现的现象,希望重开一个好头。简单地说,这是个从Windows Server连接Linux下的MongoDB服务时出现的问题。MongoDB使用的是自定义的二进制协议,客户端使用普通的TCP连接进行连接后再读写数据。在以前的测试中,我使用的都是建立少量连接,每个连接进行多次操作,而这次则是对“应用程序”进行压力测试,因此需要不断地开启及关闭连接——频率大约是每秒4、500次吧。 阅读全文
< Prev 1 2 3 4 5 6 7 8 9 ... 11 Next >
使用Live Messenger联系我