PHP内存耗尽错误分析

最近有人跟我反映主机上一个wordpress插件的使用过程中经常会出现错误,打开了php的dispaly_error功能之后,发现其报“Fatal error: Allowed memory size of 35389440 bytes exhausted(tried to allocate 1406507 bytes) in xxxxxx on line xxx”,意思是致命错误,内存被耗尽了。Google上搜索了一下,网上有很多这样的问题,答案也都一样,更改php的内存限制,把php.ini中的memory_limit改为更大的数值。

但是这里有一个很大的问题,php允许访问的内存大小是35389440字节,而实际要分配的只有1406507字节。为什么要分配的内存比实际允许访问的内存小还会引发致命错误呢?

PHP内存耗尽错误 …阅读更多>>

PHP输出缓冲及其应用

缓冲(buffer)是为了协调吞吐速度相差很大的设备之间数据传送而采用的技术,用来存放缓冲数据的区域叫缓冲区,在计算机科学领域,当数据从一个地方传送到另一个地方时,缓冲区被用来临时存储数据。与缓冲相似的一个技术是缓存(cache),它们都是为了解决数据存储和传输速度不同而带来的问题,不同的是,缓冲主要在写时使用,而缓存主要用来在读时使用。

PHP缓冲

如上图,是一个简易的缓冲区模拟图,左端入口的数据具有单个输入体积小,速度快,数量多,但右端输出数据具有体积大,速度慢的特点。如果没有缓冲区,很容易造成数据堵塞,有了缓冲区之后,当数据填满缓冲区,再统一输出,则可以大大减少系统负担。 …阅读更多>>

HTML5中defer和async的比较

在网站页面中,通常需要引入外部js资源,然而外部的js资源可能导致DOM阻塞,影响页面加载速度。通过异步或者延迟执行js,可以做到引用外部js资源而不阻塞DOM的目的。用法是直接在script标签中使用defer和async,那么它们两个有什么区别呢?

从字面上来理解,defer是延迟,而async则是异步(Asynchronous)。w3c上这样解释defer和async:defer属性是一个布尔值的属性,当存在这个属性时,它指定的脚本将在页面解析之后执行1; async也是一个布尔值的属性,当存在这个属性时, 只要脚本是可用的它将异步执行2。更详细的可见火狐开发者中心对script标签的讲解…阅读更多>>

博客的响应式主题上线了

移动设备的普及越来越广,传统的网站需要不断进步来适应各种设备的浏览需求,这不仅仅对用户友好,搜索引擎评价一个网站的优劣也会逐渐加入网站是否支持移动设备浏览的指标(谷歌已经在行动,大部分不支持移动网站浏览的站长都在谷歌管理员工具里接收到了相应邮件)。

本站采用自制wordpress主题,原来不支持响应式,新主题在原来的基础上增加了其它设备的支持,也做了一些优化,抛弃了requirejs和jQuery,使用了原生JS,加快网站展示速度。新主题使用了较多HTML5和CSS3的技术,不再支持IE9以下的浏览器。新主题还有很多地方没有完善,将在以后一步一步改进,需要的也可以联系我获取主题代码。

响应式网站建设中的像素和宽度问题

在《图像和展示》一文中,我们提到了现在各种移动设备可能会拥有比PC更高的分辨率,例如iPhone 6S的分辨率为1920 x 1080,屏幕尺寸只有5.5英寸,而MacBook Pro Renta的分辨率为2560 x 1600,屏幕尺寸为13.3英寸。按照上一片文章的理解,当我们建设一个980px宽的网站时,在iPhone等这些高分辨率,小尺寸的设备上岂不是会显示得非常小?我们知道,实际的展示的样式并不是这样,但这其中是什么样的原理呢?本文试图一探究竟。

说到这个问题,不得不说说高清屏的发展,在智能手机刚刚被研发出来时候,是没有高清屏的,例如iPhone3的分辨率是320 x 480,而iPhone4的分辨率则为640 x 960。按照理解,一个320像素宽的网站,在iphone4上将缩小一半,这样很多网站将不兼容iPhone4。显然苹果是聪明的,为了保持和旧版iPhone的兼容性,当CSS指定宽度为320px时,网站依旧铺满全屏,用两个像素点渲染一个CSS像素。这里涉及到了两个概念,一个是CSS像素,一个是devicePixelRatio. …阅读更多>>