洋葱Blog

Blog

  • 再见了Win10!微软确认终极正式版,系统不再更新

    再见了Win10!微软确认终极正式版,系统不再更新

    距离Windows 11已经推出一年半多了。

    本周四,微软确认,已经没有为Windows 10发布功能更新的计划了。

    这意味着当前的22H2版本(Build 19045)将为Windows 10画上句号,直至2025年10月14日结束全部支持之时。

    目前距离Windows 10退出历史舞台还有一年半,微软建议企业和用户都尽快过渡到Windows 11,避免届时遇到其他问题。

    当然,微软承诺,还会继续为Win10操作系统分发月度安全补丁。

    其中Windows 10 LTSB/LTSC版本身依然有超长的支持周期,可以继续用到至少2027年。

    资料显示,自2015年上市以来,Windows 10除了每月的安全更新外,还会不断收到“新版本”。

    但自Windows 11发布以来,Windows 10的版本更新就非常少了。

    此前22H2版本就并没有提供新功能,而是集中在BUG修复、稳定性改善等。

    所以,22H2将是Win10终极正式版的说法早已有之。

    此外,今年1月份,微软停止了Win10数字版下载和售卖。

    显然,该公司已经将更多精力聚焦Windows 11和预计2024年推出的Windows 12。

    不过,根据Valve今年3月的调查,和StatCounter的Windows市场份额统计数据显示,目前还是有超过73%的Windows计算机仍在运行Windows 10 。

    届时估计会有许多用户将需要购买一台新PC才能有资格使用Windows 11 或更高版本了。

    你愿意升级到Windows 11吗?

  • 超牛的油猴脚本,让你的GPT无比丝滑!

    超牛的油猴脚本,让你的GPT无比丝滑!

    ChatGPT的官网最近几天报错越来越频繁了,相信大家都发现了。

    一旦你离开页面时间比较久,再度返回跟它进行对话,就会出现如下报错:

    虽然这个报错信息以前也出现过,但现在的频率确实过高,对于每天需要使用 ChatGPT 处理大量任务的用户来说,这种体验实在是不够友好。

    实际上,我们有两个方案来解决这个问题。

    方案一:使用 OpenAI API Key 访问 ChatGPT

    如果你正在使用 GPT-3.5,那么我建议你寻找一些开源客户端来使用 ChatGPT,并配置你的 OpenAI API Key。

    通过这种方式使用 ChatGPT,稳定性通常会得到很大提升。

    然而,唯一的缺点是每个 Key 都有使用限额,额度用完后需要绑定信用卡并充值才能继续使用。而在 ChatGPT 官网上,你可以无限次地使用 AI 聊天功能。

    如果你已经开通了 ChatGPT Plus 会员,那么你可能更依赖官网。Plus 会员的优势在于拥有 GPT-4 访问权限,但前提是只能在官网上使用,不能调用 API。

    今天,我们将重点讨论第二种方案。

    方案二:安装 Chrome 插件,让报错永远消失!

    ChatGPT 除了在使用过程中可能出现“Something went wrong”的错误信息外,还存在其他需要解决的问题。

    今天,我要为大家推荐一个近期在 GitHub 上颇受欢迎的 ChatGPT 插件,它可以让你一劳永逸地摆脱 ChatGPT 频繁出现的报错信息。

    这款能让你畅享 ChatGPT 体验的插件名为 KeepChatGPT。

    开源项目链接:GitHub:https://github.com/xcanwin/KeepChatGPT/

    KeepChatGPT 主要用于解决以下问题:

    修复报错:“Something went wrong. If this issue persists please contact us through our help center at help.openai.com.”

    取消后台检测审计:使你能够访问更多由 ChatGPT 提供的内容;

    让交流更加顺畅,无需频繁刷新网页;

    解决在复制答案时,会将用户名一并复制的误操作问题;

    兼容移动端使用。

    接下来是教大家如何安装

    插件 & 脚本安装

    在使用这个插件之前,你需要先安装 Tampermonkey(油猴脚本)。

    Tampermonkey 是一款非常受欢迎的浏览器扩展,目前已有超过 1000 万用户在使用。

    它的主要作用是让你在不同网页上运行各类脚本,实现许多网站原本未提供的功能。

    Tampermonkey 上托管着众多实用的脚本,而我们本次介绍的 KeepChatGPT 便是其中之一。

    安装过程非常简单,只需按照以下指引操作即可。

    访问 Tampermonkey 官网:https://www.tampermonkey.net/

    选择适合你当前浏览器的版本,然后跳转到对应的浏览器商店进行安装。

    这里拿Chrome浏览器举例

    插件安装成功后,打开 KeepChatGPT 脚本地址:https://greasyfork.org/zh-CN/scripts/462804-keepchatgpt

    访问 ChatGPT 官方网站,确认是否可以正常使用:https://chat.openai.com/

    如果你在页面左上角看到了 KeepChatGPT 的图标,那么说明该插件已经成功安装。安装成功后请重启浏览器再使用。

  • 深浅拷贝 | CV战士!你真的懂拷贝吗?

    深浅拷贝 | CV战士!你真的懂拷贝吗?

    在 JavaScript 中,深浅拷贝都是对对象或数组进行复制,以便在对原始对象进行更改时不会影响到已复制的对象。浅拷贝只复制对象的一层,而深拷贝会复制整个对象的所有层次。

     使用场景

    1. 表单数据处理

    在前端开发中,表单处理是一个非常常见的场景。当用户在表单中输入数据时,我们需要将这些数据保存到一个对象中,然后将对象发送到服务器。但是,由于表单中可能包含嵌套的对象和数组,因此我们需要使用深拷贝来复制整个表单数据,确保数据完整无误地发送到服务器上。

    2. Redux 状态管理

    在使用 Redux 进行状态管理时,由于 Redux 的状态通常是一个对象或包含对象的数组,因此深拷贝也经常会用到。在 Redux 中,当我们需要修改状态时,我们通常会复制整个状态对象,然后对副本进行修改,以避免修改原始状态。使用深拷贝可以确保我们复制的状态对象是完全独立的,从而保持应用程序的稳定性和可维护性。

    3. 对象的缓存和比

    在前端开发中,当我们需要缓存某些对象时,我们需要使用深拷贝来复制对象并将其存储在缓存中。这样可以确保缓存中的对象与原始对象完全独立,从而避免意外的修改。此外,当我们需要比较两个对象是否相等时,也可以使用深拷贝来比较它们的值,以避免引用相等和值相等的混淆。

    4. 数据结构的变换

    在前端开发中,有时我们需要对一个复杂的数据结构进行变换,例如将一个嵌套的对象转换为数组或将一个数组转换为嵌套的对象。在这种情况下,我们可以使用深拷贝来复制原始数据,并使用适当的算法对副本进行变换,以避免修改原始数据。

    总之,在前端开发中,深拷贝是非常常见的场景,可以帮助我们处理复杂的数据结构,并保持代码的稳定性和可维护性。

     浅拷贝

    浅拷贝是对对象或数组进行浅层复制,只复制对象的一层属性,当复制的对象中有引用类型的属性时,复制出来的对象和原对象会共享引用类型的属性。

    这意味着,如果原对象中的引用类型属性被修改,复制出来的对象也会受到影响。因此,浅拷贝只适用于一些简单的数据类型的对象。

    以下是实现浅拷贝的几种方式:

    1. Object.assign()

    Object.assign() 方法用于将所有可枚举属性的值从一个或多个源对象复制到目标对象。返回目标对象。Object.assign() 会覆盖目标对象中与源对象属性名相同的属性值。通过传入一个空对象,可以很容易地实现浅拷贝。

    const obj = { a: 1, b: 2 };
    const copy = Object.assign({}, obj);
    console.log(copy); // { a: 1, b: 2 }
    

    2. Spread operator

    Spread operator 可以将一个对象或数组展开为多个参数,也可以用于浅拷贝。通过展开一个对象,可以将其属性复制到新的对象中。

    const obj = { a: 1, b: 2 };
    const copy = { ...obj };
    console.log(copy); // { a: 1, b: 2 }
    

    3. Array.slice()

    Array.slice() 方法返回一个从开始索引到结束索引(不包括结束索引)的新数组。如果不传入任何参数,将返回一个原数组的浅拷贝。可以使用该方法对数组进行浅拷贝。

    const arr = [1, 2, 3];
    const copy = arr.slice();
    console.log(copy); // [1, 2, 3]
    

    4. Array.concat()

    Array.concat() 方法用于将一个或多个数组与原数组合并,并返回新的数组。如果不传入任何参数,将返回一个原数组的浅拷贝。可以使用该方法对数组进行浅拷贝。

    const arr = [1, 2, 3];
    const copy = [].concat(arr);
    console.log(copy); // [1, 2, 3]
    

     深拷贝

    深拷贝是对对象或数组进行递归复制,复制整个对象的所有层次,这样就可以避免对象中的引用类型的属性共享的问题。深拷贝可以完全复制原始对象,并生成一个新的独立的对象。但是,深拷贝的性能比浅拷贝要

    以下是实现深拷贝的几种方式:

    1. JSON.parse() 和 JSON.stringify()

    可以使用 JSON.parse() 和 JSON.stringify() 方法实现深拷贝。通过将原对象转换为 JSON 字符串,然后将其再转换回对象,可以实现一个新的独立的对象。

    const obj = { a: { b: 1 } };
    const copy = JSON.parse(JSON.stringify(obj));
    console.log(copy); // { a: { b: 1 } }
    

    但是,需要注意的是,这种方法只能用于序列化可以转换为 JSON 的数据类型,例如对象、数组、字符串、数字、布尔值和 null。不能用于序列化函数、正则表达式和日期等非 JSON 标准的数据类型。而且,这种方法也不能处理循环引用的对象,因为 JSON.stringify() 在处理循环引用时会抛出异常。

    2. 递归实现

    递归是实现深拷贝的一种常用方法。递归可以在对象或数组的每一层进行复制,并生成一个新的独立的对象。可以使用 typeof 操作符来判断一个属性是不是一个对象或数组,如果是,则对其进行递归复制。

    function deepCopy(obj) {
      if (typeof obj !== 'object' || obj === null) {
        return obj;
      }
    
      const copy = Array.isArray(obj) ? [] : {};
    
      Object.keys(obj).forEach(key => {
        copy[key] = deepCopy(obj[key]);
      });
    
      return copy;
    }
    
    const obj = { a: { b: 1 } };
    const copy = deepCopy(obj);
    console.log(copy); // { a: { b: 1 } }
    

    深浅拷贝是 JavaScript 中常用的操作,用于复制对象和数组。浅拷贝只复制对象的一层,而深拷贝会复制整个对象的所有层次。浅拷贝的实现方式有 Object.assign()、Spread operator、Array.slice() 和 Array.concat(),而深拷贝的实现方式有 JSON.parse() 和 JSON.stringify() 和递归实现。需要根据具体的场景选择适合的方法。

  • 什么是模块化?为什么要进行模块化开发?

    什么是模块化?为什么要进行模块化开发?

    模块化是一种软件开发的设计模式,它将一个大型的软件系统划分成多个独立的模块,每个模块都有自己的功能和接口,并且能够与其他模块独立地工作。

    步入正文

    import axios from '../utils/request'
    import md5 from 'md5'
    
    // 登录
    export const login = async (params)=>{
      let {data} = await axios.post('users/login',{params})
      if(data.success){
        // 在浏览器缓存中存储token
        sessionStorage.setItem('token',data.token)
      }
      return data
    }
    // 修改密码
    export const resetPwd = async (params)=>{
      // 要对密码加密
      let {data} = await axios.post('users/resetPwd',params)
      return data
    }
    //...other business

    示例,goods.js

    export const getDetail = async (id)=> {
      let {data} =  axios.get(`/goods/detail/${id}`);
      return data
    }
    
    export const getCategory = async () =>{
      let {data} =  axios.get('/categories');
      return data
    }
    
    export const search = (params) =>{
      let {data} =  axios.get('/search', { params });
      return data
    }

    每个js(模块)都有自己的相关的代码,代码之间互不影响

    如下代码所示,所有的请求都放到一个文件中,不分模块

    import axios from '../utils/request'
    import md5 from 'md5'
    
    // 登录
    export const login = async (params)=>{
      let {data} = await axios.post('users/login',{params})
      if(data.success){
        // 在浏览器缓存中存储token
        sessionStorage.setItem('token',data.token)
      }
      return data
    }
    //查询商品
    export const search = (params) =>{
      let {data} =  axios.get('/search', { params });
      return data
    }
    
    // 修改密码
    export const resetPwd = async (params)=>{
      // 要对密码加密
      let {data} = await axios.post('users/resetPwd',params)
      return data
    }
    //商品详情
    export const getDetail = async (id)=> {
      let {data} =  axios.get(`/goods/detail/${id}`);
      return data
    }
    //获取商品分类
    export const getCategory = async () =>{
      let {data} =  axios.get('/categories');
      return data
    }
    
    //...other business

    是不是很乱,这只是一点点业务,如果大一点业务系统,里面有百十个接口,如果不能按照模块划分,代码就会是一座屎山,多人协作会出问题、代码维护无从下手

    场景二:大家都知道单页面应用程序,他的最大优势就是不用切换页面,对用户体验极好。例如vue常见的页面是头、尾、菜单不动,只有内容区域动,在dom中扣去一块旧的,换一块新的,这样看来,每一块都应该是独立存在的,也就是咱们常见的.vue文件,使用webpack将.vue文件转为.js文件,这个js就是一个模块化的文件,通过路由把页面和名字进行关联,扣掉和换上新的都需要操作路由来完成

    总结一下,模块化其实就是分门别类

    附加几种模块化语法

    不管哪种语法,只是一种固定的写法,重点了解两个概念,一个导出(暴露当前模块),一个导入(用那个模块)

    CommonJS

    CommonJS 是一种用于服务器端 JavaScript 的模块化规范,使用 require 和 module.exports 导出和引入模块。例如:

    // math.js
    const add = (a, b) => a + b;
    const subtract = (a, b) => a - b;
    const hello = () => '洋葱,你好';
    
    module.exports = {
      add,
      subtract,
      hello
    };
    
    // app.js
    const math = require('./math');
    
    console.log(math.add(2, 3)); // 输出 5
    console.log(math.subtract(3, 2)); // 输出 1
    console.log(math.hello); // 输出洋葱,你好

    AMD

    AMD(Asynchronous Module Definition,异步模块定义)是用于浏览器端 JavaScript 的模块化规范,使用 define 定义模块,通过 require 异步加载模块。例如:

    // math.js
    //define第一个参数表示当前模块所依赖的模块,可以是一个字符串数组,也可以是一个函数
    // 定义一个名为 "math" 的模块,依赖于 "jquery" 和 "underscore" 两个模块
    define(['jquery', 'underscore'], function($, _) {
      // 定义模块的功能
      const add = function(a, b) {
        return a + b;
      };
      const multiply = function(a, b) {
        return a * b;
      };
      const test = ()=>{
        var arr = ['foo', 'bar', 'qfedu'];
        var arrUpper = _.map(arr, function(str) {
          return str.toUpperCase();
        });
        return  arrUpper;
      }
      
      // 导出模块的功能
      return {
        add: add,
        multiply: multiply,
        test:test
      };
    });
    
    // app.js
    require(['./math'], function(math) {
      console.log(math.add(2, 3)); // 输出 5
      console.log(math.subtract(3, 2)); // 输出 1
      console.log(math.test())//输出 ["FOO", "BAR", "QFEDU"]
    });

     ES6 模块

    ES6 模块是 JavaScript 的官方模块化规范,使用 import 和 export 导入和导出模块。例如:

    // math.js
    export const add = (a, b) => a + b;
    export const subtract = (a, b) => a - b;
    
    // app.js
    import { add, subtract } from './math';
    
    console.log(add(2, 3)); // 输出 5
    console.log(subtract(3, 2)); // 输出 1

    UMD

    UMD(Universal Module Definition,通用模块定义)是一种支持多种模块化规范的通用模块化方案,它既支持 CommonJS,又支持 AMD 和全局变量。例如:

    (function (root, factory) {
      if (typeof define === 'function' && define.amd) {
        define(['exports'], factory);
      } else if (typeof module === 'object' && module.exports) {
        factory(module.exports);
      } else {
        factory((root.myModule = {}));
      }
    }(typeof self !== 'undefined' ? self : this, function (exports) {
      const add = (a, b) => a + b;
      const subtract = (a, b) => a - b;
    
      exports.add = add;
      exports.subtract = subtract;
    }));

  • 电脑系统怎么选?Win?MacOS?Linux?

    电脑系统怎么选?Win?MacOS?Linux?

    学什么操作系统呢?是MacOS,还是Windows,或者是Linux或者其他!那我们今天就来说说MacOS系统和Windows系统的优缺点,也介绍一下其他的系统。让你心里有底!

    Windows

     

    首先当然是Windows系统,这是国内用户最多,也是安装次数最多的系统。老牌操作系统了,大部分的人的第一部电脑基本都是Windows系统。


    Windows的软件生态非常丰富,一大部分人选择的Windows就是因为这个,软件极其丰富,或者说是游戏极其丰富,这个我们也是深有体会的。无论是办公,休闲,娱乐,电影,音乐,游戏总有那么几款软件适合您!
    甚至我们可以“强人所难”用一些本来不让用,不能用的软件,也很方便,懂的都懂。

     

    这同时也是Windows最致命的问题,Windows的软件虽然丰富,但是质量却参差不齐,你在网页随意下载的软件都可以安装,但是能不能用,有没有毒,那可就不好说了!在杀毒软件横行的时代,每下载一个游戏就会附赠5个浏览器,10个桌面快捷方式,无数个弹窗广告。而且弹窗广告总是在游戏最激情的时候弹出。曾经的木马病毒,QQ号被盗,应该很多人都经历过。


    当我们写完了文档,或者做完了图片,剪完了视频,准备收工的时候,突然蓝屏上一个哭脸,告诉你电脑遇到了一些问题,可以在它收集完信息之后重启电脑。这时候真的无f**k说。为什么Windows电脑总是能在我们最不想死机的时候死机?
    另一个令人难受的就是Windows仿佛一直在更新,随着系统的更新,除了把我的软件更新得不能用了,我也不知道它到底更新了什么!

     

    对于要编程的Windows系统来说,安装编程环境比较麻烦,刚开始的Python,Java可能还好。但是后边到了docker,消息队列,跑开源项目的时候,你就知道有多麻烦了,先不提虚拟机,wsl啦!小白们真的不太想搞。而且硬件还要允许!


    Windows定制性差,到了编程服务,系统安全的时候,要修改系统设置时很难找到对应的入口,还要反复重启电脑,才能修改成功。竟无语凝噎.

    MacOS

     

    绕不开的Mac生态系统,如果你是个果粉,各个设备之间同步数据,联动,非常的方便,除去系统本身,苹果电脑的屏幕和设计本身就是牛的,国产的电脑也都纷纷效仿。系统稳定,即使一直不关机也不会死机。


    对于编程来说,MacOS是基于Unix操作系统的,而且自带了很多开发工具, 尤其是终端,很多命令和企业开发常用的Linux系统类似,便于我们搭建环境,和学习命令行的使用。在同等配置环境下,Mac开发的流畅度和开发软件的打开速度会更快,开发效率拉满,所以你会发现,互联网大厂的员工都是清一色苹果电脑。
    此外,近几年苹果电脑发展迅猛,M1,M2芯片的电脑,也更是的受到业内人士的一致认可。

     

    缺点:
    软件相比Windows系统比较少,很多软件的使用是需要花钱的。白嫖党不是很友好。而且软件数量较少。很多在Windows上好用的软件在macOS上是没有替代品的。绝大多数的游戏不能玩。这也是很多人不选择Mac电脑的原因。
    致命缺点:贵,一时间我竟不知,这到底是他的错还是我的错。

    Linux

     

    对于程序员来说, Linux是必须会的系统。因为大部分企业项目都是部署在 Linux服务器上。而且 Linux是开源,可定制的,可以根据项目的不同需求打造更安全,更高效,更简洁的操作系统。程序员兄弟们,一般都是选择Windows作为自己的电脑,游戏打的,开发做的,软件也很多。集美们颜值控,经济条件也允许,喜欢Mac的话,安排一个也无可厚非!

     

    当然还是要基于自己的实际需求,你需要的软件,你追求的效率,你喜欢的颜值都可以是你选择系统的理由。如果你是前端开发,设计,用Mac体验会更好,如果你是学习系统底层开发的,安全方向的同学,要掌握Linux就多一些,你身边的人都是Windows,软件,文件都是 Windows的,那就用Windows。如果都是Mac,那你最好也是,搭环境,传文件也会很方便。

     

    如果你是学编程已经开始了,那就不要纠结什么系统了,咱们把重心放在学习上。

     

  • qzdy(后台相关设置)

    后台登录相关设置

    nn

    网站后台登录背景图片

    n

    为空默认为乳白色-可自定义设置背景图片

    n

    n

    网站后台登录logo(可显示后台登录页logo显示)

    n

    n

    n

    n

    后台登录模板

    n

    默认就行-

    n

    n

  • qzdy(主题基础设置)

    这篇是教大家怎么配置:主题基础设置

    n

    首页分类排除分类:

    nn

    nn首页分类排除分类(ID)n

    首页的最新文章里不显示这些分类的文章,多个用半角英文逗号隔开,例如:-1,-3,-12。

    n

    n

    n

    排除分类(ID)后首页不会显示此文章

    n

    n

    首页与分类文章设置

    n

    n

    首页文章数量和分类文章数量设置:例:首页文章数量设置20,分类文章数量设置10

    n

    分页加载方式

    n

    n

    默认就好  不用设置

    n

    手机端侧边栏登录模式

    n

    设置开启就好没什么可说的

    n

    n

    n

    全站公告设置

    n

    默认就行 需开启公告 自行开启

    n

    n

    文章页面代码框设置

    n

    n

    n

    代码框最大高度

    n

    请带单位如:600px,如不需限制高度填入:auto,即可

    n

    n

    n

    全站网页最大宽度

    n

    n

    网页最大宽度(默1200px),不能为空

    n

    n

    默认就行 不需要修改

    n

    n

    n

    n

  • Qzdy主题(导航相关设置)

    Qzdy主题(导航相关设置)

    n

    导航相关设置:

    n

    导航后面全宽图片选择-导航栏背后的图片

    n

    开启效果:

    n

    n

    关闭效果:

    n

    n

    n

    导航栏滚动隐藏

    n

    网页向下滚动自动隐藏 -这个就不给大家演示了 页面 滑动导航菜单隐藏

    n

    n

    导航栏滚动隐藏

    n

    网页向下滚动自动隐藏

    n

    n

    导航栏颜色选择

    n

    n

    n

    默认毛坯玻璃就好,另外俩种,根据自己喜好设置

    n

    网站背景图片与特效

    n

    网页背景/图片/颜色

    n

    n

    根据自己喜好自行设置!

    nn

    网站背景图片

    n

    网站全局背景图

    n

    背景图可根据自己的需求进行上传设置

    n

    n

    -----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

    n

    彩色线条特效

    n

    网页菱形运动

    n

    n

    默认开启就好,不喜欢可关闭特效

    n

    n

    选择飘落特效

    n这个就很好理解了吧-我就不做演示图了nn根据自己开启或关闭nnn

    搜索按钮

    nnn演示图例:nnnn这个功能默认就好nn

    n

    此页面教程就到这里了,敬请收关下一篇

    nn

    n

    n

  • 免费在线砸壳IPA工具网站-Decrypt IPA Store

    免费在线砸壳IPA工具网站-Decrypt IPA Store

    Decrypt IPA Store是一个免费在线砸壳IPA工具网站。如果您想在A12或更高的设备上运行未签名的iOS应用程序,那么您需要先将其解密,该网站提供了免费的ipa砸壳服务。它可以通过直接搜索软件名称、App ID或者App Store链接来找到所需的资源,非常便捷。需要注意的是,这类砸壳应用需要自行签名。如果您感兴趣,可以去网站上尝试使用这个工具。

    Decrypt IPA Store网址:

    [hidecontent type="reply"]

    Decrypt IPA Store网址:https://ipa.decrypt.day/

    [/hidecontent]
  • WordPress如何开启 memcached 进行优化加速

    WordPress如何开启 memcached 进行优化加速

    memcached介绍

    Memcached是一个自由开源的,高性能,分布式内存对象缓存系统。

    Memcached是以LiveJournal旗下Danga Interactive公司的Brad Fitzpatric为首开发的一款软件。现在已成为mixi、hatena、Facebook、Vox、LiveJournal等众多服务中提高Web应用扩展性的重要因素。

    Memcached是一种基于内存的key-value存储,用来存储小块的任意数据(字符串、对象)。这些数据可以是数据库调用、API调用或者是页面渲染的结果。

    Memcached简洁而强大。它的简洁设计便于快速开发,减轻开发难度,解决了大数据量缓存的很多问题。它的API兼容大部分流行的开发语言。

    本质上,它是一个简洁的key-value存储系统。

    一般的使用目的是,通过缓存数据库查询结果,减少数据库访问次数,以提高动态Web应用的速度、提高可扩展性。

    使用教程

    说明:本来我想用MemcacheD Is Your Friend这款插件实现的,但是上篇文章用了水煮鱼的WPJAM那就不折腾了

    • PHP中安装Memcached

    然后把wp-content/plugins/wpjam-basic/template中的object-cache.php放在wp-content

    测试图例如下

随便看看