懒加载——网页图片的加载技术

目前,网络上各大论坛,尤其是一些图片类型的网站上,在图片加载时均采用了一种名为懒加载的方式,具体表现为,当页面被请求时,只加载可视区域的图片,其它部分的图片则不加载,只有这些图片出现在可视区域时才会动态加载这些图片,从而节约了网络带宽和提高了初次加载的速度,具体实现的技术并不复杂,下面分别对其说明。 首先,在页面中准备一个id为div1的div,在这个div中放一个ul,ul中准备了一些li,然而这些li都有一个data-src的属性,准备着图片的地址,具体结构如下: [html] view plaincopy     <div id="div1">          <ul>             <li data-src="http://t03.pic.sogou.com/7620cd6e740c3c50.jpg"></li>             <li data-src="http://t03.pic.sogou.com/2c67d8e270eb61c3.jpg"></li>             <li data-src="http://t01.pic.sogou.com/9c9d058c0c731087.jpg"></li>             <li data-src="http://t02.pic.sogou.com/007da8d5456bc0ab.jpg"></li>             <li data-src="http://t03.pic.sogou.com/64d939a5456bc0ab.jpg"></li>             <li data-src="http://t03.pic.sogou.com/95eb5da5456bc0ab.jpg"></li>             <li data-src="http://t04.pic.sogou.com/5c3fa2b5456bc0ab.jpg"></li>             <li data-src="http://t03.pic.sogou.com/f6443925456bc0ab.jpg"></li>             <li data-src="http://t04.pic.sogou.com/f96780b5456bc0ab.jpg"></li>             <li data-src="http://t03.pic.sogou.com/54a75d2e740c3c50.jpg"></li>             <li data-src="http://t03.pic.sogou.com/3b173ee50fdad689.jpg"></li>             <li data-src="http://t03.pic.sogou.com/95eb5da5456bc0ab.jpg"></li>             <li data-src="http://t04.pic.sogou.com/5c3fa2b5456bc0ab.jpg"></li>             <li data-src="http://t03.pic.sogou.com/f6443925456bc0ab.jpg"></li>             <li data-src="http://t04.pic.sogou.com/f96780b5456bc0ab.jpg"></li>             <li data-src="http://t03.pic.sogou.com/54a75d2e740c3c50.jpg"></li>             <li data-src="http://t03.pic.sogou.com/3b173ee50fdad689.jpg"></li>             <li data-src="http://t01.pic.sogou.com/b0e3d909c131e9cb.jpg"></li>             <li data-src="http://t02.pic.sogou.com/27e362d461029a95.jpg"></li>             <li data-src="http://t02.pic.sogou.com/ddfb62d6f09be522_i.jpg"></li>             <li data-src="http://t01.pic.sogou.com/9448c50e46a53e65.jpg"></li>             <li data-src="http://t03.pic.sogou.com/b7e5a7e50fdad689.jpg"></li>             <li data-src="http://t03.pic.sogou.com/3825466e4e3b9ce4.jpg"></li>             <li data-src="http://t03.pic.sogou.com/1d7d602e740c3c50.jpg"></li>             <li data-src="http://t02.pic.sogou.com/085ea3d5456bc0ab.jpg"></li>             <li data-src="http://t04.pic.sogou.com/ad61be7270eb61c3.jpg"></li>             <li data-src="http://t04.pic.sogou.com/ed7705b270eb61c3.jpg"></li>             <li data-src="http://t04.pic.sogou.com/491c4cb461029a95.jpg"></li>             <li data-src="http://t03.pic.sogou.com/e603c6ae4e3b9ce4.jpg"></li>             <li data-src="http://t01.pic.sogou.com/6b6a148cdc19fbb4.jpg"></li>             <li data-src="http://t01.pic.sogou.com/c301bac9f514c378.jpg"></li>             <li data-src="http://t01.pic.sogou.com/11a6ce8e4e3b9ce4.jpg"></li>             <li data-src="http://t04.pic.sogou.com/41b26435456bc0ab.jpg"></li>             <li data-src="http://t03.pic.sogou.com/adb811acdc19fbb4.jpg"></li>             <li data-src="http://t03.pic.sogou.com/fbb08be9c131e9cb.jpg"></li>             <li data-src="http://t01.pic.sogou.com/b2ecd2ce4e3b9ce4.jpg"></li>             <li data-src="http://t04.pic.sogou.com/0509bff02200e0a5.jpg"></li>             <li data-src="http://t04.pic.sogou.com/0509bff02200e0a5.jpg"></li>             <li data-src="http://t04.pic.sogou.com/e655c4fe49cac8ea.jpg"></li>             <li data-src="http://t01.pic.sogou.com/5251ca4e740c3c50.jpg"></li>             <li data-src="http://t03.pic.sogou.com/7fe86f66ce211acb.jpg"></li>             <li data-src="http://t04.pic.sogou.com/541569b5df134ca6.jpg"></li>             <li data-src="http://t01.pic.sogou.com/d34a3f0e46a53e65.jpg"></li>             <li data-src="http://t02.pic.sogou.com/78bca85270eb61c3.jpg"></li>         </ul>     </div> 图片的动态加载就是通过读取li元素,然后获得li元素的data-src属性的值赋予动态创建的图片的src,从而实现了图片的创建。 [javascript] view plaincopy function setImg(index) {     var oDiv = document.getElementById('div1');     var oUl = oDiv.children[0];     var aLi = oUl.children;     //html5最新属性     if (aLi[index].dataset) {         var src = aLi[index].dataset.src;     } else {         var src = aLi[index].getAttribute('data-src');     }     var oImg = document.createElement('img');     oImg.src = src;     if (aLi[index].children.length == 0) {         aLi[index].appendChild(oImg);     } } 那么怎么识别是否在可视区域呢?这里需要一个函数,能够实现获得当前元素距离网页顶部的距离! [javascript] view plaincopy //获得对象距离页面顶端的距离 function getH(obj) {     var h = 0;     while (obj) {         h += obj.offsetTop;         obj = obj.offsetParent;     }     return h; } 当网页的滚动条滚动时要时时判断当前li的位置! [javascript] […]

龙生   19 Sep 2014
View Details

C#多线程完美解决方案

 

  运行上述代码,我们可以看到问题已经被解决了,通过等待异步,我们就不会总是持有主线程的控制,这样就可以在不发生跨线程调用异常的情况下完成多线程对winform多线程控件的控制了 from:http://blog.csdn.net/windflow/article/details/8693291

龙生   19 Sep 2014
View Details

20+ 个免费的对触摸友好的按钮设计

1. APPLICATION MARKET BUTTONS 2. SIMPLE TOGGLE SWITCH (PSD) 3. SOCIAL BUTTONS – FREE PSD 4. POWER BUTTON (FREE PSD) 5. DIRECTIONAL BUTTONS (FREE PSD) 6. FLAT BUTTONS 7. BIG BUTTONS KEYBOARD STANDARD 8. SOCIAL SIGN IN BUTTONS 9. SOCIAL BUTTONS 10. FLAT INSTAGRAM BUTTONS 11. RANDOM SOCIAL BUTTONS WITH FREE PSD 12. POWER BUTTON PSD 13. MUSIC PLAYER BUTTON SET (FREE PSD) 14. SIMPLISTIC BUTTONS 15. DOWNLOAD BUTTON 16. CHECK BUTTONS REBOUND 17. BIG BLUE BUTTONS 18. BUTTON ANIMATION 19. FACEBOOK CONNECT BUTTON – FREE PSD 20. FLAT UI BUTTONS (PSD INCLUDED) 21. OUT OF THE WHITE 22. REALISTIC BUTTON – PRACTICE 23. TWITTER BUTTONS (PSD) 24. UPLOAD BUTTONS via hidimba360 from:http://www.oschina.net/news/55294/20-free-touch-friendly-button-designs

龙生   16 Sep 2014
View Details

memcached 协议路由器 Mcrouter

Mcrouter 是一个 memcached 协议路由器,用于对 memcached 的部署进行扩展。这是 Facebook 缓存架构的核心组件,峰值的时候每秒可处理 50 亿请求。详细介绍请看这里。 from:http://www.oschina.net/p/mcrouter

龙生   16 Sep 2014
View Details

web开发者不可错过的11个JavaScript工具

JavaScript即将接管Web世界,如雨后春笋版冒出的JavaScript工具更是让web开发者无所适从。 本文我们为大家推荐11款崭露头角但功能强大的JavaScript工具,是追逐web设计新潮流(界面简洁、面向移动、强调互动)中不可或缺的好帮手。 一、Meteor Meteor web应用开发框架定义的七大开发天条为现代软件开发打下良好基础,例如Meteor采用开源社区的方式培育插件资源,其他天条还包括:设计简单的API、仅通过网络传送数据、使用统一的开发语言等。Meteor还开发了一个客户端的本地模拟器。 Meteor是一种新型JavaScript框架,用于WebApp应用程序开发。Meteor的基础构架是Node.JS+MongoDB,它把这个基 础构架同时延伸到了浏览器端,如果App用纯JavaScript写成,JS APIs和DB APIs就可以同时在服务器端和客户端无差异地调用,本地和远程数据通过DDP(Distributed Data Protocol)协议传输。因此部分应用如TODO列表,网络在线和离线下使用功能完全没有差异,动作响应和数据延迟也完全感觉不出来。 二、Epoch 数据可视化是最火的web开发项目,如今已经有很多工具能够在web上展示吸引眼球的数据可视化互动图表,例如D3.js。但Epoch更进一步,在基本的D3代码库的基础上进一步整合,提供更加流畅的体验。通过Epoch你可以向客户展示干净漂亮实时更新的图表。 三、Web Starter Kit 为不同的移动终端开发web应用是一件极为痛苦的事情,Google的Web Starter Kit的目标就是帮助开发者为不同设备开发web应用,例如点击同步、屏幕适配等问题。无论你的用户使用老款iPad还是新款Android手机,代码都能够适应。你只需要勾画出界面,屏幕适配的问题可以交给Web Starter Kit处理,并给出设计建议。 四、Reveal.js Reveal.js 可以看做是HTML5版本的PowerPoint。可以在web页面上以PPT的方式动态呈现信息,如果你的网站想华丽丽地讲故事,那么Reveal能给你最酷的效果。 五、RxJS 静态网页已经成为历史,如今的web设计趋势是预测客户想法并提供更好的互动功能,例如自动填写表单、搜索Wikipedia等。RxJS框架可以很方便地为鼠标和键盘事件提供响应。 六、NodeBB NodeBB是传统BBS论坛的一次进化,提供实时的对话流功能,NodeBB的开发者还增加了很多时髦主题,并支持移动设备屏幕。NodeBB还整合了一些最新的面向触摸屏的web设计功能,例如无限滚动,NodeBB的社区很活跃,不断有新插件出现。 七、GulpJS 从头编写HTML\CSS\Javascript是上个世纪的事情了,如今的JavaScript都是通过CoffeeScript这样的支持句法缩写的编辑器写成的。如果你希望写完JavaScript能够一个工具完成代码清理优化工作,GulpJS就是你的不二之选,GulpJS类似Ant或Maven之于Java。 八、AngularJS Google开发的AngularJS是一个轻量级的,在浏览器中展示信息的框架。ANgularJS从后台服务器收集数据在本地编辑模板用于演示。服务器端代码控制数据存储,而ANgularJS代码负责演示。可以兼容桌面、平板电脑和智能手机浏览器。 九、Odyssey 有了API,如今在网站中加入地图应用变得非常容易,结合地图的内容框互动则需要用到一些工具,CartoDB开发的Odyssey就是一个不错的选择。 十、PlayCanvas 一般来讲,游戏开发与web应用完全是两码事。但先试试,游戏世界的很多工具都可以被用于在网站中增加华丽界面。PlayCanvas就是一个基于WebGL的游戏引擎,结合了物理、光影、音效等工具用于创建一个复杂的界面。 十一、Deb.js 开发中的编码错误无法避免,但不同的解决方法则是决定性的。Deb.js虽然只有1.5KB,但是能够清理控制台窗口,让JavaScript的除错更容易。是Chrome、Opera和Safari内建的除错工具的好搭档。 文章来自IT经理网 from:http://www.oschina.net/news/55219/11-javascript-tools

龙生   13 Sep 2014
View Details

程序员懒惰之极的确凿证据

程序员很懒是出了名的,但很多书里都说程序员的懒是一种美德,但懒是应该有节制的,应该分场合。比如下面的这些懒惰的行为,相信没有人会欣赏他们的这种表现。

1、躺着编程。另外一个也是躺在床上工作的职业是妓女。

2、还是躺着编程,但天花板太远了,或不能承受,改成头套式的了。

3、屏幕应该顺着我的方向,而不是我顺着屏幕的方向

4、程序员吃爆米花的方式

5、紧急bug修复(方案一)

6、紧急bug修复(方案二)

7、好困,我要眯一会

8、程序员喝饮料的方式

9、程序员开发出的画线程序

10、用脚关电脑

稿源:http://www.techug.com/programmer-lazy

from:http://www.oschina.net/news/55170/programmer-lazy

网站防止CC攻击的方法

CC攻击(Challenge Collapsar)是DDOS(分布式拒绝服务)的一种,也是一种常见的网站攻击方法,攻击者通过代理服务器或者肉鸡向向受害主机不停地发大量数据包,造成对方服务器资源耗尽,一直到宕机崩溃。 CC攻击的攻击技术含量低,利用工具和一些IP代理,一个初、中级的电脑水平的用户就能够实施攻击。不过,如果了解了CC攻击的原理,那就不难针对CC攻击实施一些有效的防范措施。 通常防止CC攻击的方法有几种,一个是通过防火墙,另外一些网络公司也提供了一些防火墙服务,例如XX网站卫士和XX宝,还有一种方法是自己写程序预防,昨天网站遇到CC攻击,这也让我尝试了一下各种防止CC攻击方法的有效性。 一开始我想使用某某网站卫士来预防攻击,从界面上看,似乎是防止了大量的CC攻击,但登录网站后发现,流量依旧异常,攻击还是依旧,看起来这个网站卫士的效果并没有达到。 从原理上看,基本上所有的防火墙都会检测并发的TCP/IP连接数目,超过一定数目一定频率就会被认为是Connection-Flood。但如果IP的数量足够大,使得单个IP的连接数较少,那么防火墙未必能阻止CC攻击。 不仅如此,我还发现,启用了某某网站卫士之后,反而更容易被CC攻击,因为这个网站卫士并不能过滤掉CC攻击,攻击的IP经过其加速后,更换成为这个网站卫士的IP,在网站服务器端显示的IP都是相同的,导致服务器端无法过滤这些IP。 实际上,不使用网站卫士类的服务,直接通过分析网站日志,还是很容易分辨出哪个IP是CC攻击的,因为CC攻击毕竟是通过程序来抓取网页,与普通浏览者 的特性区别还是很大的,例如普通浏览者访问一个网页,必定会连续抓取网页的HTML文件、CSS文件、JS文件和图片等一系列相关文件,而CC攻击者仅仅 只会抓取一个URL地址的文件,不会抓取其他类型的文件,其User Agent也大部分和普通浏览者不同,这就可以在服务器上很容易分辨出哪些访问者是CC攻击了,既然可以判断出攻击者的IP,那么预防措施就很简单,只需 要批量将这些IP屏蔽,即可达到防范CC攻击的目的。 最终,我花了半个小时写了一段小程序,运行之后自动屏蔽了数百个IP,网站才算正常,从而证明,防火墙对于CC攻击的防御并不有效,最有效的方法还是在服务器端通过程序自动屏蔽来预防。 看来CC攻击的门槛还真低啊,搞个几百个代理或者肉鸡就能攻击别人了,其成本非常低,但效果比较明显,如果攻击者流量巨大的话,通过耗费带宽资源的方式 都可以进行攻击。但是,CC攻击也有明显的技术缺陷,就是攻击者的IP并不是海量的,通常就是几百数千的级别,并且是真实访问了网站页面,这就使得网站可 以通过程序过滤的方式,轻松获取到这些攻击者IP,批量进行屏蔽,那么这种CC攻击就会得到预防。 对于站长来说,通过程序来过滤CC攻击门槛较高,要有一定的编程技术,因此还是建议使用第三方网站提供的预防CC的服务,目前主要的网站有:360网站卫士、百度加速乐、安全宝等。

龙生   11 Sep 2014
View Details

ASP.NET Application_Error错误日志写入

一个web项目开发已完成,测试也通过,但是,bug是测不完的,特别是在一个大的网络环境下。那么,我们就应该记录这些错误,然后改正。这里,我的出错管理页面是在global.asax里面的,利用里面的Application_Error函数。 Global.asax代码: <%@ Application Language="C#" %> <script runat="server">     void Application_Start(object sender, EventArgs e)      {         // 在应用程序启动时运行的代码     }          void Application_End(object sender, EventArgs e)      {         //  在应用程序关闭时运行的代码     }              void Application_Error(object sender, EventArgs e)      {          // 在出现未处理的错误时运行的代码        // 在出现未处理的错误时运行的代码                      Exception objErr = Server.GetLastError().GetBaseException();             string error = string.Empty;             string errortime = string.Empty;             string erroraddr = string.Empty;             string errorinfo = string.Empty;             string errorsource = string.Empty;             string errortrace = string.Empty;             error += "发生时间:" + System.DateTime.Now.ToString() + "<br>";             errortime = "发生时间:" + System.DateTime.Now.ToString();             error += "发生异常页: " + Request.Url.ToString() + "<br>";             erroraddr = […]

龙生   10 Sep 2014
View Details

Windows防火墙开启ping

今天被这么一个问题困扰:当我通过本机ping另一台在同一局域网内(即在同一网段)的计算机时,发现,如果防火墙开启的话,无论如何也ping不通。一旦关闭防火墙就可以ping通了。这是为什么呢?究竟该怎么设置呢?    原因是这样的,现在的计算机系统,出于安全考虑,在默认情况下是不允许外部主机对其进行ping测试的。但在一个安全的局域网环境中,Ping测试又是管理员进行网络测试所必须的。如何更改设置呢?XP系统和WIN7系统有所不同:   Windows XP:     Windows防火墙 --> 高级 --> ICMP --> 设置 --> 把“允许传入回显请求”前打上勾 --> 确定 --> 大功告成。    Windows 7:     Windows防火墙 --> 高级设置 --> 入站规则 --> 在列表里找到“文件和打印机共享(回显请求 – ICMPv4-In)” --> 右击选择启用规则,并在其属性里设置为‘允许连接’-->  确定 --> 大功告成。 from:http://blog.csdn.net/zltianhen/article/details/7802191

龙生   10 Sep 2014
View Details

windows server 2012 r2上网慢解决方案,2008无法intel-windows server 2012 r2 slower internet solutions

最近家里和办公室新装 Windows Server 2012 R2 数据中心版操作系统,仍然非常脑残的两个设计:脑残的开始菜单、脑残的Win+Space切换输入法。除此之外还可以接受,当然我已将脑残的开始通过Start8解决掉了,另外说个关于Win2012R2网速痛苦的经历。 最近发现不管是家里还是办公室,打开有些网站都非常的慢,准确说是响应非常的慢,输入网址驾车后要等甚至8秒才得到响应打开网页,并且还不是所有网 站都这样,部分(包括手里维护的几个网站),以为是服务器问题于是将网站服务器重装了系统,最后发现我真二,没解决问题后才发现是我电脑的问题,远程了其 它两台不是2012的系统打开流畅的很,百度一下才发现问题出在Windows上。我不是这方面的专家只好转原文如下,灰常感谢网友的文章。 Windows Server 2012/2012 R2 上网非常慢的解决办法(转载): 装了个windows server 2012玩玩,发现效果真心不错,尤其是对负载的处理上,很少听到风扇的呼呼声了。但发现一个问题,在办公室上网,打开网页,总是要等2-3秒才显示出页 面内容,但回家后就没有这种问题了。折腾一整天,各种修复,各种改,防火墙、驱动、组策略、MTU、TTL,各种不好使。 本想装一个Wireshark抓下包分析一下,但发现winpcap装不上,坑爹。我就在想,难道服务器系统就这原因?网上没找到任何解决办法,连提出这个问题的人都没看到。 还是得抓包分析,安装了个Microsoft Network Manager,微软自家的抓包工具,终于好使了。分析TCP数据包,发现在单位,每打开一个网页,都会先向目标发送好几个TCP ECN(显式拥塞通知)数据包,然后等到2-3秒后,再与目标3次握手建立TCP连接;但是在家却没有发送TCP ECN数据包。 原来Windows server 2012默认打开了ECN功能(貌似从Windows server 2008之后都默认打开),个人操作系统却没有打开,而办公室网络的确拥塞不小,造成了这种效果。好了,执行“netsh int tcp set global ecn=disable”命令后,果断OK了。 很明确了,只需要CMD执行以下命令,网速马上恢复,我和小伙伴们都惊呆了: netsh int tcp set global ecn=disable 果然奏效,开心…灰常感谢:(http://blog.sina.com.cn/s/blog_475d6daf0101bxtn.html)http://blog.sina.com.cn/s/blog_475d6daf0101bxtn.html 关于这类命令及原理我也不是很清楚也不去深究了,以下还有类似网络流行的提高网速方法: 接收方缩放状态 : enabled 烟囱卸载状态 : automatic NetDMA 状态 : enabled 直接缓存访问(DCA) : enabled 接收窗口自动调谐级别 : normal 附加拥塞控制提供程序 : none ECN 功能 : disabled RFC 1323 时间戳 : enable 逐项输入命令: 接收方缩放状态:netsh int tcp set global rss=enabled 烟囱卸载状态 :netsh int tcp set global chimney=automatic NetDMA 状态:netsh int […]

龙生   10 Sep 2014
View Details
1 304 305 306 410