Category Archives: 代码

CMS

当下对于网站前段开发人员来说,很少有人不使用一些JS框架或者WEB UI库,因此这些可以有效提高网站前段开发速度,并且能够统一开发环境,对于不同浏览器的兼容性也不需要程序员操心,有了这些优点,当然大家都会使用这些框架或库。 本文整理了国内外最全面和主流的JS框架与WEB UI库,里面有许多人已经十分熟悉,比如JQUERY。当然也有很多是陌生的,可以通过本文了解他们各自的优缺点,或许你能找到更好用的也说不定! 几乎所有的富 Web 应用都基于一个或多个 Web UI 库或框架,这些 UI 库与框架极大地简化了开发进程,并带来一致,可靠,以及高度交互性的用户界面。本文介绍了 15 个非常强大的 JavaScript Web UI 库,非常适合各种各种规模的富 Web 应用的开发。 LivePipe LivePipe UI 基于 Prototype Javascript 框架,包含了一整套经严格测试并高度可扩展的 UI 控件,拥有很好的文档,在不支持 JavaScript 的环境中,可以无缝降级使用。包括 Tab, 窗体,文本框,多选框,评分控件,进度条,滚动条,右键菜单等多种控件。 LivePipe 首页与下载 LivePipe 演示与示例 UKI UKI 是一套简单的 JavaScript UI 工具集,用于快速创建桌面风格的 Web 应用。包含的控件从滑动条,到分栏视图,不一而足。熟悉 jQuery 的开发者会发现这个工具很容易上手,非常简洁,无需安装框架,不依赖 CSS 引用。 UKI 主页与下载 UKI 控件,演示,示例 MochaUI MochaUI 是 MooTools Javascript 框架 与 ExplorerCanvas 的一个备受欢迎的扩展,可以用来快速创建 Web 应用,Web 桌面,网站,饰件,独立 Windows,Modal 对话框等等。 MochaUI [...]
Posted in 代码 | Leave a comment

10年前端计划

今天召开了平台架构部大会,前端现在是平台架构部下面一个团队。最近同事们加班加点制定出了10年前端工作计划。主要有几点: 1)稳定的前端核心库 2)检测用户行为数据的好方法 3)代码库推广 另外淘宝同事在Qcon上介绍了淘宝前端团队从无到有的发展史和未来的规划,再想想我08年来到支付宝工作到现在,团队的变化和发展。我忽然想通了一些事情。这里记录下来: 1)前端技术的快速发展推动着从业者的变化,在人生平均30年的职业生涯中,这个变化时间真的很快。 Web技术大致的时间轴 1991HTML 1994HTML 2 1996CSS 1 + JavaScript 1997HTML 4 1998CSS 2 2000XHTML 1 2002使用DIV+CSS进行网页布局 2005AJAX 2009HTML 5 淘宝前端06年无,07年5个,08年14个,09年30个。08年,我来到支付宝时真正的前端有3个,加上3个外包同学。下来就是我们4个前端应届生们。09年我们又来了6个同事。今天前端已经有16个人了。 随着人数的增多,对应着前端技术的庞大,前端产出物的复杂。工业化分工,标准化工作思想都融入到前端作坊式的开发上来。前端越来越走入技术岗位的正规。 如果是前端的新手,可能会被日常琐碎无聊的事情折磨的对这个岗位厌倦了。但是看看前端这几年的发展,web技术的发展,这个舞台是一个前进的列车,html5日渐成熟,这个行业比起后端开发来说,有着很多机会和变化。 好的设计驱动技术创新 好的技术为设计提供无限的遐想
Posted in 代码 | Leave a comment

https性能调优[译]

这是一篇译文,原文:http://blog.httpwatch.com/2009/01/15/https-performance-tuning/ 在网络性能优化中一个经常被忽略的问题是保障安全连接的https协议.随着应用从桌面转移到web,广泛被应用的https协议中安全和隐私的可靠性越来越重要. 下面的例子展示使用https过程中常见的问题. 例1:使用有效的响应 每当浏览器访问一个网站,它必须创建一个或多个tcp链接.既是在常见的http协议下,这也是个漫长的过程.使用tcp链接的有效的响应可以减少这中开销.下面来自httpwatch的图表显示在访问英国一网站时tcp连接时间大约130毫秒 使用https时,如果不是有效链接将会造成长时间的延迟.因为就算tcp已经连接,ssl链接也需要建立请求.浏览器和服务端会来回通信几次来建立加密的密钥.使用https链接相应时间是http的四倍以上. 在一个重复的https链接里tcp链接和ssl通信的开销是应该避免的.虽然现在有些浏览器允许重复使用ssl链接,但是你不能总指望每个服务器都作了这样的配置. 例2:避免混合内容警告 在前一篇博文中提到,如果一个https页面使用了任何http资源,就会出现令人迷惑和烦人的警告对话框. 为了避免这个警告提示,要确保这个页面包含的资源都是https. 例3:使用持久缓存的静态内容 如果你按照例子2,那么页面上所有的资源(图片,css,js)都在https下面了,你应该持续地使用静态缓存,来避免每次每个用户再次访问站点重复下载. 淡然你不会对所有东西缓存,账户信息和每月的饼图就不用.但是大多数资源还是要安全的存储,页面间分享和再次使用. 这里可能有一些混乱对于https下是否使用缓存. 例如在https下的gmail,确实访问速度要慢一些,因为浏览器不缓存这些页面. 虽 然,37Signals公司承认,在内存中缓存是可能的,他们说 , 持 续的缓存是不可能的 : 但在现实中https下持续缓存在ie和firefox下是可能的. 访问www.httpwatch.com,通过httpwatch我们可以看到,所有资源都是通过缓存来访问的. 如果你使用firefox3.0,并不修改请求头部,看到的是: 我们看到这里并没有缓存,这是因为头部设置的原因,firefox每次是请求的服务器.200代表静态内容是从服务器上求情成功的. 但是我们在firefox地址输入”about:cache”,找到这些缓存文件 这里修改一下设置就可以了,修改Cache-Control response header to Public. 这样我们就把https下的内容移动到了firefox的缓存空间.于是再次访问 这个方法只有在firefox3.0才可以(译者音:经过试验,3.0以后的都是可以的,也不需要该header信息) 例4:使用https警告探测器 译者音:作者说了那么多广告,我这里就不翻译了,这段话就一个意思,使用httpwatch可以给出https下的警告.使用方法和上面截图基本上一样的.
Posted in 代码 | Leave a comment

项目代码行数占比

这个项目搞了半年,在半年前开始的时候,我想不知道这次能不能写1w行js,今天有空做了下统计. php 194783行 46% html 99304行 24% css 33429行 8% js 93998行 22% 跑出结果后,我大吃一惊,原来还是写了很多. py代码: testpy
Posted in 代码 | Leave a comment

小试clickheat

clickheat是一款页面点击分布插件.他比起其他页面点击分布插件的好处是 可以可视化生成页面热图. 这是今天测试的life.alipay.com首页热图. 他唯一不好的地方是这个东西太慢,没点一次就发送一个请求.把点击的坐标发送x,y值记录下来.
Posted in 代码 | Leave a comment

静态文件打包遇到的问题

我们常将静态文件合并 如将样式1.css,2.css合并为pub.css 因为1.css文件开头制定了@charset “utf-8″; 所以两个文件合并后pub.css里面就会有下面代码 .box{}@charset “utf-8″;.l-clear{height:10px;} 这里就出现问题了,一个样式文件中又制定了编码.会引起编码后面这段.l-clear在safari,mac的firefox下都失效.
Posted in 代码 | Leave a comment

拖拽模块

曾经有个项目要做页面区域拖拽功能,像百度自定义首页一样 功能点: 1.拖拽区域到制定位置,然后插入区域放到被插入区域的前一个节点 2.如果用户不登录,就也能记录上次的位置. 开始做时没思路,就看了这个很多类似网站,不过最好的还是这家的http://www.netvibes.com/. 有几点比较重要记录下来: 1.建立每个拖拽对象new Drag,这里就像mootools 曾经有个项目要做页面区域拖拽功能,像百度自定义首页一样 功能点: 1.拖拽区域到制定位置,然后插入区域放到被插入区域的前一个节点 2.如果用户不登录,就也能记录上次的位置. 开始做时没思路,就看了这个很多类似网站,不过最好的还是这家的http://www.netvibes.com/. 有几点比较重要记录下来: 1.建立每个拖拽对象new Drag,这里就像mootools里面的drag,他的结构也是有onstart,ondrag,oncomplete等.再给每个方法添加了自定义事件.在这个基础上写一个drag的扩展,用来根据具体的页面业务添加独特的事件.比如oncomplete时怎么办,ondrag时怎么办? 2.cookie的使用,因为记录每个模块的坐标要写到cookie里面,做到后来发现cookie太大了,yslow里面直接把reduce cookie size打成了F.作到这也没法改了,以后注意.慎用cookie.
Posted in 代码 | Leave a comment

框架里js功能的扩展

刚做前端是,开发是搞java的,一年过去了对没太多感觉,前后端分离做的相当的好,我看java代码的次数还没在学校多。 现在换部门了,项目是php的,搞了正好半年,深深的喜欢php,开始自己搞搞php,搭个某某东西出来。 开始为了好玩,兴趣。直到有一天我突然发现,js框架里面的东西很多和php语句很像。我专门开始花时间研究。 有人说php比asp好用,是因为他内置了很多函数。其实我们使用js框架也是一样,我们在用他的内置函数。方便,快捷。 我们都知道php出道时间比js框架早,05年那会js框架才慢慢兴起。现在的框架很多定义都模仿了php。比如foreach,或对数组的功能的扩充。这里其实是js框架中的一部分,对js功能的扩充。 一个框架还有几部分(借鉴克军的): 浏览器兼容,dom,event 数据层(ajax等) 交互组建 相对来说,对js功能的扩充还是比较简单的,其他几个都要求对浏览器差异,事件机制有着深入的了解。
Posted in 代码 | Leave a comment

航母建造史

航母建造的历史最显著的一点是航母越造越大,从40年的xxxxx吨,到现在的xxxxxxxxxx吨。以至于后来已经很少有那么大型的船坞来建造这些庞然大物了。分工复杂,建设周期长,一环扣一环是航母建造的特点。 上周看了一篇帖子《Nicholas C. Zakas如何面试前端工程师》,里面前端基本技能这些我觉得没什么说的,是该这样,不过还有一点他没有提出来,这点也是我本文主要阐述的。 模块化,工业化是前端必须要有的意识,如果没有,再好的前端只能是个技师罢了。他再牛逼,也就他一个牛。在大公司,我们做的项目大,时间紧,前端作为ued的最终产出。交付时间点,质量等出现问题都是前端来背的。 回 到航母的建造,如果没有工艺的改进,工程学的提高,航母的设计师设计再大的船也是没法实现的。同样,如果前端工艺不提高,前端开发不采用工业化方法来进 行,我们的设计实现周期会变长,前端的投入产出比会变低。这时你就是再牛逼的前端有什么用?老板还是会觉得不满意。一个人的产出是有极限的,提高团队的产 出,模块化开发才是根本。 具体来说,模块化开发,提高团队产出是: 1.处理需求第一考虑的是他的业务背景,需求所处的环境,他下次会是什么样子。他今后会有哪些变化。了解清楚这些后,你才能确定这个东西是临时的,还是要做成一个模块,它属于的哪个大系统下。 2.带动团队里的每个人都有这样的意识。这里包括视觉,前端,交互,开发。
Posted in 代码 | Leave a comment

静态文件打包和自动时间戳

静态文件是前端开发的根本,和巧妇难为无米之炊一样。它是前端工作的成果载体。 静态文件一直以来是静态存在的,单独的css,js,img。这些都给维护带来了很大的不便。前端有时很讨厌那些静态的零碎的东西,他会引起很多问题。 例如: 1)时间戳:你修改了一个样式文件,涉及到的n多页面,都要把它引用时间戳改掉。如果漏了,发布后,不懂技术的同事就来说样式乱了,页面错位了,这时你只能说,清一下缓存吧。从我做前端开始到现在,每次发布都或多或少遇到这样的额问题。 2)管理零散的样式和脚本文件:前端将设计转化为工业化生产,于是我们就会做组建,做模块,这些零碎的静态资源再组合拼装成我们最终的页面。如何管理这些组建也是需要有个系统来控制,不然全靠手动就乱套了。 面对这种问题,yui产出了yui.loader,实现了在页面上方便快捷的调用组建。 在这第四届D2之前,我在项目中经常遇到发布时,改很多时间戳,组建过多不好管理的问题。于是想办法解决。 这个方法很快就想到了,没多复杂。最终靠着牛逼的韩强同学用python把这个实现了.部署到php环境的项目中,以后再也不用改一次静态文件,就改相关的时间戳了.发布变的轻松很多.能让机器做的事情.干嘛要手动来呢? 下面是这套东西的工作原理: 页面中涉及到的组件很多,比如有4个组件,这四个组件分类有它自己的js和样式,我们有个总控文件来配置这些该页面所有的组件。在本地这些文件是一个个独立引用的。到线上时,我们就从配置文件里把它们找出来打包成一个,再压缩。每次修改一个静态文件,比如样式,js等就自动将涉及到该组件的所有页面静态文件时间戳+1。 具体来说就是这样。 <source var=”address_up” src=”pub/add1.js” version=”1″ type=”js” name=”这是页面address_up.html用到的静态文件”> <one src=”js/1.js” version=”1″></one> <one src=”js/2.js” version=”1″></one> </source> 假设页面里我们用到了两个js文件,js/1.js和js/2.js,这里就是一些拆分的组建。引用时只需要写类似$address_up 就可以在页面中打出 <script src=”js/1.js”></script><script src=”js/2.js”></script> 而在线上环境,这两段js会被合并成一个压缩版的<script src=”pub/add1.js?version=1″></script> 我在本地更改一次js/1.js或js/2.js,打包后的pub/add1.js时间戳就会加1,变为pub/add1.js?verson=2。 这就是打包和自动时间戳的原理。后来参加d2,看见有人说也做了自动时间戳,不知道他们是怎么处理。
Posted in 代码 | Leave a comment