博客

  • 图片文件本地缓存

    随着html5不断的被得到支持,从性能优化的角度讲,减少http请求是非常重要的优化手段。

    html5的新的接口localstorage,提供了更大的存储空间,大部分浏览器支持5M的容量,足够存储JS等脚本文件。这样依赖就能减少一些HTTP请求,提升速度。

    但也可以存储一些改动频率较低的静态图片,方案是将图标进行编码,存储该文件的编码。下面直接看代码:


    var setImageSrc = function(img, src){
    var local = localStorage.getItem("src"); //用src作key,也可以换其他标记
    if(local){
    img.src= local;
    }else{
    img.src = src;
    img.onload = function(){
    var canvas = document.createElement('canvas')
    ctx = canvas.getContext('2d');
    ctx.drawImage(img,0,0);
    var data = canvas.toDataURL('jpg'); //注意,浏览器不一定支持jpg格式的转换,这时会自动降级到png格式
    localStorage.setItem("src", data);
    }
    // 跨域
    img.setAttribute("crossorigin","anonymous"); //关键属性
    }
    }
    setImageSrc($('feedImg'),'http://test.com/img/header-logo.png');

    这样就可以存储一些静态图片,但大小是图片本身的两倍,主要应用canvas的toDataURL函数

    可以配合图片的懒加载使用

    稍加改变,加上版本号,可以控制图片的改版发布了。

  • webview的CORS跨域

    在项目中遇到个问题,页面嵌入在webview中。正常浏览器的如UC浏览器、QQ浏览器中使用CORS跨域请求是没问题,但在webview中却拉取失败,照理都是同样的请求,应该不是后台的问题。catch到的错误是

    INVALID_STATE_ERR: DOM Exception 11
    然后google之,发现是zepto的一个bug,git上已经说明,应该下个版本会合并上。

    (更多…)

  • SVN hooks(钩子)- 简单入门

    在做版本的时候,需要SVN做一些自动化的事情,比如提交前自动更新;提交一些文件后关联着提交另一些。所以需要写一点自动化脚本。

    什么是SVN钩子

    官方说法:

    钩子是通过版本库事件触发,例如新版本的创建或一个未版本化属性的修改。一些钩子(叫做“pre hooks”)在事件发生前运行,可以用来报告发生了什么以及防止它发生。还有一些钩子(“post hooks”)在版本库事件之后发生,只是用来报告。每个钩子能够获得事件的足够信息,例如提出的(或完成的)版本库修改细节,还有触发事件的用户名。 (更多…)

  • 体验至上

    今天这篇文章是关于互联网的,但我更希望其他行业的人也能看到,互联网行业有许多值得借鉴的地方。

    从九八年到现在,国内互联网快速发展了十五年。如果你们稍加注意,互联网正在渗透我们的生活,虽然很多地方还做的不够好,不够完善,但那已经有互联网的影子,正在逐步蔓延。虽说最近的这几十年里,没有革命性的技术出现,但毋庸置疑的是以前只出现在电影里的场景已经搬到现实生活中了。

    (更多…)

  • javascript中的正则表达式

    在javascript中,String和RegExp都定义了方法,正则表达式的语法是Perl5的正则表达式的一个子集,因此不会完全的支持Perl5的正则表达式语法。定义方式有以下两种:

    var pattern = /s$/; // 字面量
    var pattern = new RegExp("s$"); // RegExp对象

    诸如正则表达式中的直接量字符和元字符,以及基本的语法就不做介绍了,这是最基本的正则表达式知识,本文只针对部分特性进行讨论。

    (更多…)

  • 再谈javascript 数据类型

    理解好数据的类型非常重要,这也是一种语言本身最为基础的知识。只有牢固的掌握了基础,才能编写出健壮的代码。 javascript有5种简单的数据类型:Undefined、Null、Boolean、Number、String,和一种复杂的数据类型:Object。判断数据类型可用typeof操作符。 (更多…)

  • 浏览器缓存学习札记

    缓存的类型有很多种,服务器缓存,浏览器缓存,代理缓存等。本文主要讲一下浏览器的缓存原理,主要是依赖HTTP协议来控制。

    使用缓存有以下优点

    1. 减少冗余的数据传输
    2. 缓解网络瓶颈的问题
    3. 降低了对服务器的要求
    4. 降低了距离时延

    缓存原理

    我们知道浏览器端发送的一个常规的HTTP请求,得经过三次握手阶段,影响响应速度有服务器、网络、距离等原因。这过程的优化手段非常的多,包括前段和服务端,若是能够命中缓存,直接获取到请求的内容,则大大的提高了用户体验。

    (更多…)

  • WEB安全——XSS

    什么是XSS攻击

    Cross site Script,跨站脚本攻击。XSS是通过HTML注入(本质),篡改网页,插入恶意脚本,控制用户浏览器。由于javascript的强大,现在是否跨域已经不再重要。

    类型

    反射型XSS,简单的把用户输入的数据反射给浏览器,非持久。
    存储型XSS,把用户数据存储在服务器,稳定性强,持久。
    DOM based XSS,效果是反射型XSS,修改页面DOM。

    (更多…)

  • 移动互联网随想

    好久没发文了,这段时间每天过得都很累,很多前端的东西都没来得及去梳理总结。其次自上次写了后,发现在微信上很不好写源码,这是件很痛苦的事情,以后还是更新在个人博客上。

    最近工作从PC前端切换到了移动端,需要学的东西也非常多。但本质还是换汤不换药,学习好新的工具还是一样的工作。移动端类型多,接口不统一等,坑也比PC端更多,需要一个个的踩过才能变得更加有经验,才能成长。更要命的是性能问题,在PC端毫不起眼的HTTP请求在移动端可能会被放的很大,尤其是2G网络,当产品面向的是屌丝用户时,这点需要尤其的注意。可以结合HTML5的性能接口,window.performance.timing来针对站点进行优化。在某些系统环境下还存在点击穿透的问题,以及浏览器本身的计算能力,毕竟性能上就不是一个数量级的,想要做到客户端这样的产品体验还是非常困难。

    (更多…)