WordPress在加載眾多插件和請求的情況下加載速度很慢,而且沒有靜態頁面緩存,用了插件really static效果還是不怎麼樂觀,只能自己寫個頁面緩存了。
頁面緩存的原理就是,用戶通過客戶端訪問網站頁面時,如果沒有靜態頁面緩存則生成靜態頁面緩存,然後加載靜態頁面,有則直接加載靜態頁面。
继续阅读 »
你的问题在于读书太少,想的太多 —— 杨绛
昨天惊闻杨绛先生去世,突然想到了几年前看到的杨绛先生的这句话。我觉得在计算机领域理论知识更是尤为重要,现在某乎上盛行的计算机理论知识(尤指算法)无用论当真特别可悲。在这里我觉得讨论科班非科班的人都是别有用心的,重要的问题在于这些基础的训练,而不是科班非科班,我们知道很多大神都不是计算机相关专业的,但是他们的基础的深厚程度,确是很多科班出身的人无法能及的,所以说一切的问题还是要积累知识。
这学期一直在学编译原理的课程,我实实在在的感觉到了这个课程和相关内容的有趣。尤其是我在学习之前试着自己不借助任何的理论去写一个解释器,竟然也命中了不少的知识,这让
继续阅读 »
你可能听说过Rails、Sinatra这些Ruby Web框架,也可能尝试过其中一、两个,但如果你还不了解Rack甚至根本没听说过它,那么你的Ruby Web开发还停留在表面:Ruby Rack是前面这些Ruby Web框架的基础,Rails和Sinatra都建立在它之上;不了解Rack的原理就无法真正理解你的Ruby Web应用的架构与工作机制、对一些复杂的问题也无能无力。任何一个正经的Ruby Web开发者都应该了解、掌握Rack。
继续阅读 »
delete 操作符用于删除对象的属性。
似乎很多同学(包括我)对 delete 操作符都是似是而非,为什么有的属性可以被删除,有的却不能被删除?为什么能够删除对象的属性却不能删除变量或函数?在 eval 和 严格模式下,delete 操作符又有哪些特性?等等。。
本文将从基本概念到 ECMPScript 内部原理来学习 delete 操作符。
语法
表达式
javascript
delete object.property // 点操作符方式,常用方式
delete object['property'] // 字符串属性名方式
参数
object - 对象名称,或者返回一个对象的表达式
property -
继续阅读 »
算法原理
冒泡排序(Bubble Sort,台湾译为:泡沫排序或气泡排序)是一种简单的排序算法。它重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。这个算法的名字由来是因为越小的元素会经由交换慢慢“浮”到数列的顶端。
冒泡排序算法的流程如下:
1. 比较相邻的元素。如果第一个比第二个大,就交换他们两个。
2. 对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对。在这一点,最后的元素应该会是最大的数。
3. 针对所有的元素重复以上的步骤,除了最后一个。
4. 持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需
继续阅读 »
算法原理
先上一张堆排序动画演示图片:
1. 不得不说说二叉树
要了解堆首先得了解一下二叉树,在计算机科学中,二叉树是每个节点最多有两个子树的树结构。通常子树被称作“左子树”(left subtree)和“右子树”(right subtree)。二叉树常被用于实现二叉查找树和二叉堆。
二叉树的每个结点至多只有二棵子树(不存在度大于 2 的结点),二叉树的子树有左右之分,次序不能颠倒。二叉树的第 i 层至多有 2i - 1 个结点;深度为 k 的二叉树至多有 2k - 1 个结点;对任何一棵二叉树 T,如果其终端结点数为 n0,度为 2 的结点数为 n2,则n0 = n2 + 1。
树和二叉树的三个主要差别:
- 树的结
继续阅读 »
原文连接:Intro to Aspect Oriented Programming
本文简单地介绍了 AOP 的原理,以及 AOP 与其他方式的异同,并没有涉及太多的复杂逻辑,另外推荐下面两篇文章,这些文章中都间接或直接提及了 AOP:
用 AOP 改善 JavaScript 代码
使用 JavaScript 拦截和跟踪浏览器中的 HTTP 请求
面向切面编程(AOP)是一种非侵入式扩充对象、方法和函数行为的技术。通过 AOP 可以从“外部”去增加一些行为,进而合并既有行为或修改既有行为。
虽然有很多技术可以用来增加和合并行为,例如继承、组合、委托,然而,在很多情况下,AOP 被证明是更灵活和更少侵入的方式,非常值得将其纳入我
继续阅读 »
Ruby Rack及其应用(上)对Rack的定义、基本原理和构建方法做了介绍,并且提到Rails、Sinatra等web框架都是在Rack之上构建的。现在让我们来看几个Rack作为中间件的典型例子,包括Auth、Session以及Log。
继续阅读 »
原文链接:Make Your Own AngularJS, Part 1: Scopes And Digest
Angular 是一个成熟和功能强大的 JavaScript 框架,也是一个庞大的框架,要正真有效地使用它,需要掌握许多新概念。在 Web 开发人员涌向 Angular 的同时,许多人都面临着同样的疑问:Digest 到底是做什么的?可以有哪些不同的方式来定义一个指令(directive)?service 和 provider 之间有些什么区别?
Angular官方文档是非常好的学习资源,并且还有越来越多的第三方资源,不过,想要深入了解一个新的框架,没有比分解它,然后研究其内部运作原理更加有效。
在本系列文章中,
继续阅读 »
《编程珠玑》第 32 页,提到:“尽管第一个二分查找程序于1946年就已经公布了,但是第一个没有 bug 的二分查找程序在 1962 年才出现。”还说参加课堂测试的专业程序员中, 90% 写的二分查找程序都有 bug 。
真的有那么难吗?我心血来潮,动手写起了快排(不要问为什么不是二分查找)。隐约记得快排的原理如下:
继续阅读 »