西红柿爱番茄

Feed Rss

存档: ‘性能优化’ 分类

charset的作用:告诉浏览器,对于服务器端返回来的HTML文件流用何种编码进行解码,从而进行HTML的解析操作。 有三个地方可以设置charset,而且它们的优先级是有顺序的:1、response header;2、HTML文档中的meta;3、浏览器默认的charset声明。那么它们的优先级是如何的呢? 首先要了解浏览器处理charset的策略:浏览器首先会在服务器返回的response header头中检查是否有charset声明,如果没有,就接着检查HTML head部分的meta标签,是否有声明charset,如果还没有,那么就使用浏览器默认的charset方式进行解码文档流。 在response header头中声明好了charset,那么浏览器在第一时间接收到HTML数据包的时候,就会以这个charset编码进行解码HTML文件流,这种情况下是最快的方式;如果response header头中没找到,那么浏览器会delay解析HTML文档,检查1KB以内的HTML内容是否会包含有charset声明的meta标签。如果还找不到,那么就使用浏览器默认的charset声明进行解码HTML页面,但是这时,已经delay了一些时间了。 如果处理的适当,那么这个delay时间是完全可以避免的,使得HTML页面可以尽可能快的让浏览器使用显示声明的编码进行解码文件流。那就是:在服务端设置好请求内容的charset编码;始终在页面中meta标签内声明charset,当然了,content-type也是十分有必要的。

《重构–改善既有代码的设计》这本书是去年买的了,利用晚上空闲时间看了大部分的内容,包括一些重构的技巧、良好代码的特点、代码可读性和提高语义化等。这本书改变了很多我之前所持有的观念,包括代码性能、模块化设计、结构样式逻辑分离等的思维。下面粗略的罗列几点目前自己从这本书中所理解到的其中一些知识: 重构本来就不是一件应该特别拨出时间做的事情,重构应该随时随地进行。 第一次做某件事情时只管去做;第二次做类似的事情会产生反感,但无论如何还是可以去做;第三次再做类似的事,你就应该重构。 ——“事不过三,三则重构。”

对于压缩HTML的好与坏、利与弊,网上也已经谈论的很多,自己也搜集了一下,毕竟自己最近也在做这样的一个工具来压缩HTML代码,提出一下自己的见解以及一些设想。 支持不压缩HTML的原因有这样的一些考虑:去掉换行、多个空白之后可能会对样式有影响;pre标签形式压缩之后会失去原有的意义;IE条件注释不能够删除;只是压缩空白和注释收益不大,特别是在gzip压缩之后;压缩了代码,看源码不方便;性价比低,付出的技术成本跟收到的效果不成正比…。原因很多哎,所以造成了大部分的站点对于HTML都是未压缩的状态发布了。为什么不压缩 HTML 这几天思前想后,HTML压缩的意义在哪里?

经过几个晚上的一点点升级,将之前搞的perl编译脚本进行了重构,并添加了一些功能,包括文件嵌套编译、添加对html文件的简单压缩、添加Google Compiler的压缩模式、修改了文件输出的方式等等。(具体的教程,可以查看:自动化工具提高工作效率中的描述) 在perl文件的头部,添加了几个配置项: $yui_compressor_path:YUI compressor 的jar文件的路径(建议是本地的绝对路径) $google_compiler_path:Google Compiler的jar文件的路径(建议是本地的绝对路径) $compress_type:所使用的压缩方式,值可以为:yui/gc。 $compilation_level:Google Compiler压缩的级别,值可以为:SIMPLE_OPTIMIZATIONS/ADVANCED_OPTIMIZATIONS/WHITESPACE_ONLY $output_dir:编译后的文件的输出目录(建议是跟当前需要编译的文件同一目录下) 建议是在每一个开发目录下配置一个build.pl文件,那么就可以对在当前的目录下进行开发,最后build编译。如今编译的文件都会保存在当前目录下的output文件夹里,文件名不变,可以直接使用编译好的文件进行测试、发布。 如下图所示的嵌套包含示意图,理论上可以无限级的嵌套,压缩: 可以对当前级声明compress:true进行压缩,嵌套之后,在output文件夹中会有中间产物页面产生,但是对于最终页面是没影响的。这样,就可以将几个页面中通用的部分抽取出来,统一管理。 最新的build程序:build_1_0_3_linux.rar,build_1_0_3_win.rar。

这些日子一直为几个开发流程上的纯手工问题苦恼,对于linux的命令来回折腾又有点不是很熟练(Shell脚本也可以集合命令跑编译),为了将自己的劳动力解放出来,干脆写个Perl小脚本来解决当下问题得了: js、css代码本地自动化压缩的问题。 文件使用include的方式,无所不包。解决了在一个页面中代码过多,滚动调试页面的烦恼很纠结,上下滚动,烦。 既然是包含,那么就需要提供可以包含任意的内容:css、js、html(嵌套包含),并且提供内联或者外联的方式。 为了将自己从开发流程的手工劳动中解放出来,还是得自力更生,开发自己的自动化工具。所以这个礼拜两天就开发了一个小脚本,纯粹边学边用。想象下面的一段编译前的代码: [html] <!doctype html> <html> <head> <meta charset="utf-8"> <meta http-equiv="X-UA-Compatible" content="IE=Edge"> <meta http-equiv="X-Frame-Options" content="DENY" /> <title>Template</title> … 了解更多

网上看到的一篇文章,说的是js脚本优化的十条细则,看了下文章,优化的知识都很普通,搞前端的人都知道,罗列一下,增强记忆吧: 定义局部变量。对于当前函数作用域内,如果需要使用这个作用域外部的一些变量,那么就尽量使用局部变量储存外部的变量吧,特别是对于嵌套多级的作用域查询,这个耗时也是比较严重的。还有就是获取DOM节点、NodeList、HTMLCollection等等,可以将NodeList、HTMLCollection转化为数组的形式进行操作,减少DOM即时更新所造成的性能消耗。 不要使用with语句。with语句会在当前作用域下面增加作用域链,造成当前作用域下面变量的遍历性能消耗更大。 对于闭包的使用,节省点,不要太过多了。闭包就是提供一个所谓的“封闭式”的作用域,只允许向包含它向别人访问,而不允许别人访问它。但是声明一个闭包的代价比声明普通的函数的代价是要更高的,况且还有IE下内存泄漏的危险。 获取字面量对象的属性和数组的项比获取变量更慢。如果你要获取一些数据的时候,使用变量比用数组、字面量对象的索引来访问来的更快。在循环中经常会需要访问数据,使用变量存储一下,来的更快。 在数组中不要嵌套的过深。js中没有二维数组的概念,但是可以自己编写一个二维数组,并且可以无限的嵌套下去,json很经常就是这么干的。但是嵌套的越深,访问数组中的项就更难了,级数和性能消耗成正比的。 少用for-in循环。众所周知,for-in用于遍历对象的属性和方法,它所要消耗比for、while、do-while更多的性能。在for-in循环中,对于每一个循环,javasript需要创建一个函数来处理每一个循环,这就带来这么两个性能问题:函数创建、销毁的过程;这个函数在创建之后,又会储存它直接上级的作用域的活动对象。 对于循环,合并控制循环的语句,以及控制变量变化方式。在一个控制循环的语句中,比如循环结束条件、索引的递增等等,如果可以优化这些操作,那么对于整个循环的性能是有帮助的。比如对于结束循环条件:for(var i =0;i