当前位置:首页>鸿蒙APP>开源鸿蒙服务管理进程:Samgr

开源鸿蒙服务管理进程:Samgr

  • 2026-08-10 18:06:10
开源鸿蒙服务管理进程:Samgr
国际惯例,先来一段废话:
时光飞逝啊,记得那是2024年,开始接触鸿蒙系统开发,转眼过去已经是三年前的事情了。OpenHarmony的版本也是迅速迭代,来到了今天的7.0时代,我打算基于市场上发行的6.1 release 版本做一轮新的探索,发现变化还挺大。

你装杯带你废,带你霍霍源代码~ 大家好我是控哥,本期给大家带来的是:OpenHarmony中的ServiceManager。

喜欢的朋友顺手点个关注,您的关注是我创作的动力!

OpenHarmony 服务管理框架 (Samgr) 全流程梳理

一、整体架构概览

OpenHarmony的服务管理框架(Samgr)是系统级服务管理的核心,负责管理所有System Ability(SA)的生命周期。

二、服务管理开机启动流程

2.1 Samgr 进程启动

文件: [main.cpp]
(foundation/systemabilitymgr/samgr/services/samgr/native/source/main.cpp)
intmain(int argc, char *argv[]){    // 1. 创建SystemAbilityManager单例    sptr<SystemAbilityManager> manager = SystemAbilityManager::GetInstance();    // 2. 初始化Samgr核心模块    manager->Init();    // 3. 将Samgr自身注册为IPC上下文对象    sptr<IRemoteObject> serv = manager->AsObject();    IPCSkeleton::SetContextObject(serv);    // 4. 将Samgr自己加入能力映射表(saId=0)    manager->AddSamgrToAbilityMap();    // 5. 设置启动完成参数    SetParameter("bootevent.samgr.ready""true");    // 6. 启动DFX定时上报    manager->StartDfxTimer();    // 7. 进入IPC工作线程循环    IPCSkeleton::JoinWorkThread();    return -1;}

2.2 Init() 核心初始化流程

文件: [system_ability_manager.cpp]
(foundation/systemabilitymgr/samgr/services/samgr/native/source/system_ability_manager.cpp#L150-L171)
void SystemAbilityManager::Init(){    // 1. 初始化死亡通知接收者    abilityDeath_ = sptr<IRemoteObject::DeathRecipient>(new AbilityDeathRecipient());    systemProcessDeath_ = sptr<IRemoteObject::DeathRecipient>(new SystemProcessDeathRecipient());    // ...    // 2. 创建工作线程handler    workHandler_ = make_shared<FFRTHandler>("workHandler");    // 3. 创建设备状态收集管理器    collectManager_ = sptr<DeviceStatusCollectManager>(new DeviceStatusCollectManager());    // 4. 创建SA状态调度器    abilityStateScheduler_ = std::make_shared<SystemAbilityStateScheduler>();    // 5. 初始化SA配置文件(核心步骤)    InitSaProfile();    // 6. 创建DFX上报定时器    reportEventTimer_ = std::make_unique<Utils::Timer>("DfxReporter", -1);    // 7. 触发按需加载优化    OndemandLoadForPerf();    // 8. 注册SA状态监听器    SamgrUtil::InvalidateSACache();    SamgrUtil::RegisterSAListener();}

2.3 InitSaProfile() - SA配置加载

文件: [system_ability_manager.cpp]
(foundation/systemabilitymgr/samgr/services/samgr/native/source/system_ability_manager.cpp#L308-L343)
voidSystemAbilityManager::InitSaProfile(){    // 1. 获取所有profile配置文件(按优先级排序)    std::vector<std::string> fileNames;    SamgrUtil::GetFilesByPriority(PREFIX, fileNames);  // PREFIX="profile"    // 2. 解析所有profile文件    auto parser = std::make_shared<ParseUtil>();    for (const auto& file : fileNames) {        if (file.find(".json") == std::string::npos ||             file.find("_trust.json") != std::string::npos) {            continue;        }        parser->ParseSaProfiles(file);  // 解析每个SA配置    }    // 3. 获取解析结果并初始化状态调度器    std::list<SaProfile> saInfos = parser->GetAllSaProfiles();    abilityStateScheduler_->Init(saInfos);  // 初始化SA状态上下文    collectManager_->Init(saInfos);         // 初始化事件收集器    // 4. 构建SA配置映射表,标记按需加载SA    for (const auto& saInfo : saInfos) {        SamgrUtil::FilterCommonSaProfile(saInfo, saProfileMap_[saInfo.saId]);        if (!saInfo.runOnCreate) {            onDemandSaIdsSet_.insert(saInfo.saId);  // 标记为按需加载        }    }}

2.4 ParseSaProfiles() - 配置文件解析

文件: [parse_util.cpp]
(foundation/systemabilitymgr/samgr/services/common/src/parse_util.cpp#L235-L250)
bool ParseUtil::ParseSaProfiles(const string& profilePath){    string realPath = GetRealPath(profilePath);    if(!CheckPathExist(realPath.c_str())) {        return false;    }    if(Endswith(realPath, ".json")) {        return ParseJsonFile(realPath);  // 解析JSON格式配置    }    return false;}
SAProfileJSON结构:
{    "process""my_service",    "systemability": [        {            "name"1001,            "libpath""/system/lib/libmy_service.z.so",            "run-on-create"true,            "auto-restart"true,            "distributed"false,            "bootphase""BootStartPhase",            "start-on-demand": { ... },            "stop-on-demand": { ... }        }    ]}
关键字段说明:

字段

含义

process

SA所属进程名

name

SA ID(唯一标识)

libpath

SA动态库路径

run-on-create

是否开机自动启动

auto-restart

崩溃后是否自动重启

distributed

是否支持跨设备调用

bootphase

启动阶段(BootStart/CoreStart/Other)

start-on-demand

按需启动触发条件

stop-on-demand

按需停止触发条件

2.5 SystemAbilityStateScheduler::Init() - 状态上下文初始化

文件: [system_ability_state_scheduler.cpp]
(foundation/systemabilitymgr/samgr/services/samgr/native/source/schedule/system_ability_state_scheduler.cpp#L60-L73)
void SystemAbilityStateScheduler::Init(const std::list<SaProfile>& saProfiles){    // 1. 初始化进程和SA状态上下文    InitStateContext(saProfiles);    // 2. 创建状态机和事件处理器    stateMachine_ = std::make_shared<SystemAbilityStateMachine>(listener);    stateEventHandler_ = std::make_shared<SystemAbilityEventHandler>(stateMachine_);    processHandler_ = std::make_shared<FFRTHandler>("ProcessHandler");}
InitStateContext() 核心逻辑:
voidSystemAbilityStateScheduler::InitStateContext(const std::list<SaProfile>& saProfiles){    for (auto& saProfile : saProfiles) {        // 创建进程上下文        if (processContextMap_.count(saProfile.process) == 0) {            auto processContext = std::make_shared<SystemProcessContext>();            processContext->processName = saProfile.process;            processContextMap_[saProfile.process] = processContext;        }        // 创建SA上下文        auto abilityContext = std::make_shared<SystemAbilityContext>();        abilityContext->systemAbilityId = saProfile.saId;        abilityContext->isAutoRestart = saProfile.autoRestart;        abilityContext->delayUnloadTime = saProfile.stopOnDemand.delayTime;        abilityContext->ownProcessContext = processContextMap_[saProfile.process];        abilityContextMap_[saProfile.saId] = abilityContext;    }}

2.6 开机启动流程总结

三、服务注册流程

3.1 服务注册入口

服务注册分为两个层面:
进程注册:系统进程向Samgr注册自身
SA注册:SA向Samgr注册自身

3.2 AddSystemProcess() - 进程注册

文件: [system_ability_manager.cpp]
(foundation/systemabilitymgr/samgr/services/samgr/native/source/system_ability_manager.cpp#L1096-L1137)
int32_tSystemAbilityManager::AddSystemProcess(const u16string& procName,    const sptr<IRemoteObject>& procObject){    // 1. 参数校验    if (procName.empty() || procObject == nullptr) {        return ERR_INVALID_VALUE;    }    // 2. 将进程加入进程映射表    {        lock_guard<samgr::mutex> autoLock(systemProcessMapLock_);        systemProcessMap_[procName] = procObject;    }    // 3. 注册进程死亡通知    if (systemProcessDeath_ != nullptr) {        procObject->AddDeathRecipient(systemProcessDeath_);    }    // 4. 记录进程启动耗时    int64_t duration = GetTickCount() - iterStarting->second;    // 5. 通知状态调度器进程已启动    ProcessInfo processInfo = {procName, callingPid, callingUid};    abilityStateScheduler_->SendProcessStateEvent(processInfo,         ProcessStateEvent::PROCESS_STARTED_EVENT);    return ERR_OK;}

3.3 AddSystemAbility() - SA注册

文件: [system_ability_manager.cpp]
(foundation/systemabilitymgr/samgr/services/samgr/native/source/system_ability_manager.cpp#L1039-L1084)
int32_tSystemAbilityManager::AddSystemAbility(int32_t systemAbilityId,     const sptr<IRemoteObject>& ability, const SAExtraProp& extraProp){    // 1. 参数校验    if (!CheckInputSysAbilityId(systemAbilityId) || ability == nullptr) {        return ERR_INVALID_VALUE;    }    // 2. 刷新监听器状态    RefreshListenerState(systemAbilityId);    // 3. 一致性校验:isDistributed必须与profile一致    if (extraProp.isDistributed != IsDistributedSystemAbility(systemAbilityId)) {        return ERR_INVALID_VALUE;    }    // 4. 将SA加入能力映射表    {        unique_lock<samgr::shared_mutex> writeLock(abilityMapLock_);        SAInfo saInfo = { ability, extraProp.isDistributed };        abilityMap_[systemAbilityId] = std::move(saInfo);    }    // 5. 取消加载超时检查    RemoveCheckLoadedMsg(systemAbilityId);    // 6. 如果是分布式SA,注册到DBinder    RegisterDistribute(systemAbilityId, extraProp.isDistributed);    // 7. 注册SA死亡通知    if (abilityDeath_ != nullptr) {        ability->AddDeathRecipient(abilityDeath_);    }    // 8. 更新状态调度器    abilityStateScheduler_->UpdateLimitDelayUnloadTime(systemAbilityId);    abilityStateScheduler_->SendAbilityStateEvent(systemAbilityId,         AbilityStateEvent::ABILITY_LOAD_SUCCESS_EVENT);    // 9. 通知所有订阅者    SendSystemAbilityAddedMsg(systemAbilityId, ability);    return ERR_OK;}

3.4 注册流程总结

四、服务发现流程

4.1 GetSystemAbility() - 获取服务(阻塞方式)

文件: [system_ability_manager.cpp]
(foundation/systemabilitymgr/samgr/services/samgr/native/source/system_ability_manager.cpp#L487-L490)
sptr<IRemoteObject> SystemAbilityManager::GetSystemAbility(int32_t systemAbilityId){    return CheckSystemAbility(systemAbilityId);}

4.2 CheckSystemAbility() - 检查服务(非阻塞方式)

文件: [system_ability_manager.cpp]
(foundation/systemabilitymgr/samgr/services/samgr/native/source/system_ability_manager.cpp#L519-L536)
sptr<IRemoteObject> SystemAbilityManager::CheckSystemAbility(int32_t systemAbilityId){    // 1. 参数校验    if (!CheckInputSysAbilityId(systemAbilityId)) {        return nullptr;    }    // 2. 更新SA使用频率    UpdateSaFreMap(IPCSkeleton::GetCallingUid(), systemAbilityId);    // 3. 从abilityMap_查找    shared_lock<samgr::shared_mutex> readLock(abilityMapLock_);    auto iter = abilityMap_.find(systemAbilityId);    if (iter != abilityMap_.end()) {        return iter->second.remoteObj;  // 找到直接返回    }    // 4. 未找到返回nullptr    return nullptr;}

4.3 CheckSystemAbility(saId, isExist) - 带按需加载的查找

文件: [system_ability_manager.cpp]
(foundation/systemabilitymgr/samgr/services/samgr/native/source/system_ability_manager.cpp#L713-L733)
sptr<IRemoteObject> SystemAbilityManager::CheckSystemAbility(int32_t systemAbilityId, bool& isExist){    if (!CheckInputSysAbilityId(systemAbilityId)) {        return nullptr;    }    // 1. 检查是否正在卸载    if (abilityStateScheduler_->IsSystemAbilityUnloading(systemAbilityId)) {        return nullptr;    }    // 2. 先尝试直接获取    sptr<IRemoteObject> abilityProxy = CheckSystemAbility(systemAbilityId);    if (abilityProxy != nullptr) {        isExist = true;        return abilityProxy;    }    // 3. 如果未找到,触发按需加载    abilityStateScheduler_->HandleLoadAbilityEvent(systemAbilityId, isExist);    return nullptr;}

4.4 HandleLoadAbilityEvent() - 按需加载处理

文件: [system_ability_state_scheduler.cpp]
(foundation/systemabilitymgr/samgr/services/samgr/native/source/schedule/system_ability_state_scheduler.cpp#L258-L281)
int32_t SystemAbilityStateScheduler::HandleLoadAbilityEvent(int32_t systemAbilityId, bool& isExist){    std::shared_ptr<SystemAbilityContext> abilityContext;    if(!GetSystemAbilityContext(systemAbilityId, abilityContext)) {        isExist = false;        return ERR_INVALID_VALUE;    }    // 检查进程状态    if(abilityContext->ownProcessContext->state == SystemProcessState::NOT_STARTED) {        isExist = false;        return ERR_INVALID_VALUE;    }    // 如果进程已启动且SA未加载,触发按需加载    if(abilityContext->ownProcessContext->state == SystemProcessState::STARTED &&        abilityContext->state == SystemAbilityState::NOT_LOADED) {        bool result = SystemAbilityManager::GetInstance()->DoLoadOnDemandAbility(systemAbilityId, isExist);        if(result) {            return stateMachine_->AbilityStateTransitionLocked(abilityContext,                 SystemAbilityState::LOADING);        }    }    return ERR_OK;}

4.5 DoLoadOnDemandAbility() - 执行按需加载

文件: [system_ability_manager.cpp]
(foundation/systemabilitymgr/samgr/services/samgr/native/source/system_ability_manager.cpp#L735-L756)
boolSystemAbilityManager::DoLoadOnDemandAbility(int32_t systemAbilityId, bool& isExist){    // 1. 再次检查是否已存在    sptr<IRemoteObject> abilityProxy = CheckSystemAbility(systemAbilityId);    if (abilityProxy != nullptr) {        isExist = true;        return true;    }    // 2. 检查是否正在启动    auto iter = startingAbilityMap_.find(systemAbilityId);    if (iter != startingAbilityMap_.end() && iter->second.state == AbilityState::STARTING) {        isExist = true;        return true;    }    // 3. 查找按需加载映射    auto onDemandIter = onDemandAbilityMap_.find(systemAbilityId);    if (onDemandIter == onDemandAbilityMap_.end()) {        isExist = false;        return false;    }    // 4. 记录启动事件并启动SA    auto& abilityItem = startingAbilityMap_[systemAbilityId];    abilityItem.event = {INTERFACE_CALL, "get"""};    // 5. 调用启动逻辑    return StartOnDemandAbilityLocked(systemAbilityId, isExist) == ERR_OK;}

4.6 StartOnDemandAbilityInner() - 启动SA内部逻辑

文件: [system_ability_manager.cpp]
(foundation/systemabilitymgr/samgr/services/samgr/native/source/system_ability_manager.cpp#L615-L635)
int32_tSystemAbilityManager::StartOnDemandAbilityInner(const std::u16string& procName,     int32_t systemAbilityId, AbilityItem& abilityItem){    // 1. 获取进程的ILocalAbilityManager代理    sptr<ILocalAbilityManager> procObject =        iface_cast<ILocalAbilityManager>(GetSystemProcess(procName));    if (procObject == nullptr) {        return ERR_INVALID_VALUE;    }    // 2. 通过IPC调用进程内的StartAbility    procObject->StartAbility(systemAbilityId, eventStr);    // 3. 更新状态    abilityItem.state = AbilityState::STARTING;    return ERR_OK;}

4.7 服务发现流程总结

五、服务使用流程

5.1 ServiceRegistry 客户端接口

文件: [service_registry.cpp]
(foundation/systemabilitymgr/samgr/services/samgr/native/source/service_registry.cpp)
// 服务注册单例获取sptr<IServiceRegistry> ServiceRegistry::GetInstance(){    static sptr<IServiceRegistry> registryInstance;    std::lock_guard<std::mutex> lock(serviceRegistryLock_);    if (registryInstance == nullptr) {        // 获取Samgr的IPC上下文对象        sptr<IRemoteObject> registryObject = IPCSkeleton::GetContextObject();        registryInstance = iface_cast<IServiceRegistry>(registryObject);    }    return registryInstance;}// 获取服务(带重试机制)sptr<IRemoteObject> ServiceRegistryProxy::GetService(const std::u16string& name){    sptr<IRemoteObject> service = CheckService(name);    if (service != nullptr) {        return service;    }    // 最多重试10次,每次间隔1秒    int32_t retry = RETRY_TIMES;    while (retry--) {        sleep(SLEEP_TIME);        service = CheckService(name);        if (service != nullptr) {            return service;        }    }    return nullptr;}

5.2 SystemAbilityManagerClient 客户端封装

文件: [service_registry.cpp]
(foundation/systemabilitymgr/samgr/services/samgr/native/source/service_registry.cpp#L173-L195)
SystemAbilityManagerClient& SystemAbilityManagerClient::GetInstance(){    static auto instance = new SystemAbilityManagerClient();    return *instance;}sptr<ISystemAbilityManager> SystemAbilityManagerClient::GetSystemAbilityManager(){    std::lock_guard<std::mutex> lock(systemAbilityManagerLock_);    if (systemAbilityManager_ != nullptr) {        return systemAbilityManager_;    }    // 获取Samgr的IPC上下文对象    sptr<IRemoteObject> registryObject = IPCSkeleton::GetContextObject();    systemAbilityManager_ = iface_cast<ISystemAbilityManager>(registryObject);    return systemAbilityManager_;}

5.3 服务使用代码示例

典型使用流程:
// 1. 获取Samgr代理sptr<ISystemAbilityManager> samgr =     SystemAbilityManagerClient::GetInstance().GetSystemAbilityManager();// 2. 获取目标SA(同步阻塞方式)sptr<IRemoteObject> saProxy = samgr->GetSystemAbility(SA_ID);// 3. 转换为具体接口代理sptr<IMyService> myService = iface_cast<IMyService>(saProxy);// 4. 调用服务方法myService->DoSomething();
异步加载方式:
// 1. 实现加载回调class MyLoadCallback : public ISystemAbilityLoadCallback {    voidOnLoadSystemAbilitySuccess(int32_t systemAbilityId,         const sptr<IRemoteObject>& remoteObject) override {        // 加载成功,使用服务    }    voidOnLoadSystemAbilityFail(int32_t systemAbilityId)override{        // 加载失败处理    }};// 2. 异步加载sptr<ISystemAbilityLoadCallback> callback = new MyLoadCallback();samgr->LoadSystemAbility(SA_ID, callback);

5.4 服务订阅方式

文件: [system_ability_manager.cpp]
(foundation/systemabilitymgr/samgr/services/samgr/native/source/system_ability_manager.cpp#L904-L938)
int32_tSystemAbilityManager::SubscribeSystemAbility(int32_t systemAbilityId,    const sptr<ISystemAbilityStatusChange>& listener){    // 1. 参数校验    if (!CheckInputSysAbilityId(systemAbilityId) || listener == nullptr) {        return ERR_INVALID_VALUE;    }    // 2. 检查是否已订阅    {        lock_guard<samgr::mutex> autoLock(listenerMapLock_);        auto& listeners = listenerMap_[systemAbilityId];        for (const auto& itemListener : listeners) {            if (listener->AsObject() == itemListener.listener->AsObject()) {                return ERR_OK;  // 已存在            }        }        // 3. 检查订阅数量限制(每个进程最多256个)        if (subscribeCountMap_[callingPid] >= MAX_SUBSCRIBE_COUNT) {            return ERR_PERMISSION_DENIED;        }        // 4. 添加监听器并注册死亡通知        listeners.emplace_back(listener, callingPid);        listener->AsObject()->AddDeathRecipient(abilityStatusDeath_);    }    // 5. 如果SA已存在,立即通知    CheckListenerNotify(systemAbilityId, listener);    return ERR_OK;}

六、关键数据结构

6.1 SAInfo - SA信息

struct SAInfo {    sptr<IRemoteObject> remoteObj;   // SA的远程对象代理    bool isDistributed;              // 是否分布式能力};

6.2 SaProfile - SA配置

struct SaProfile {    std::u16string process;          // 所属进程名    int32_t saId;                    // SA ID    std::string libPath;             // 动态库路径    bool runOnCreate;                // 开机自动启动    bool autoRestart;                // 自动重启    bool distributed;                // 分布式    uint32_t bootPhase;              // 启动阶段    StartOnDemand startOnDemand;     // 按需启动配置    StopOnDemand stopOnDemand;       // 按需停止配置    // ...};

6.3 SystemAbilityContext - SA状态上下文

struct SystemAbilityContext {    int32_t systemAbilityId;         // SA ID    SystemAbilityState state;        // 当前状态    bool isAutoRestart;              // 是否自动重启    int32_t delayUnloadTime;         // 延迟卸载时间    std::shared_ptr<SystemProcessContext> ownProcessContext;  // 所属进程    // ...};

6.4 SA状态枚举

enum SystemAbilityState {    NOT_LOADED,    // 未加载    LOADING,       // 加载中    LOADED,        // 已加载    UNLOADABLE,    // 可卸载(空闲)    UNLOADING      // 卸载中};

七、关键代码路径汇总

阶段

文件

核心函数

Samgr启动

[main.cpp](foundation/systemabilitymgr/samgr/services/samgr/native/source/main.cpp)

main()

核心初始化

[system_ability_manager.cpp](foundation/systemabilitymgr/samgr/services/samgr/native/source/system_ability_manager.cpp#L150-L171)

Init()

配置加载

[system_ability_manager.cpp](foundation/systemabilitymgr/samgr/services/samgr/native/source/system_ability_manager.cpp#L308-L343)

InitSaProfile()

配置解析

[parse_util.cpp](foundation/systemabilitymgr/samgr/services/common/src/parse_util.cpp#L235-L250)

ParseSaProfiles()

状态初始化

[system_ability_state_scheduler.cpp](foundation/systemabilitymgr/samgr/services/samgr/native/source/schedule/system_ability_state_scheduler.cpp#L102-L130)

InitStateContext()

进程注册

[system_ability_manager.cpp](foundation/systemabilitymgr/samgr/services/samgr/native/source/system_ability_manager.cpp#L1096-L1137)

AddSystemProcess()

SA注册

[system_ability_manager.cpp](foundation/systemabilitymgr/samgr/services/samgr/native/source/system_ability_manager.cpp#L1039-L1084)

AddSystemAbility()

服务发现

[system_ability_manager.cpp](foundation/systemabilitymgr/samgr/services/samgr/native/source/system_ability_manager.cpp#L519-L536)

CheckSystemAbility()

按需加载

[system_ability_manager.cpp](foundation/systemabilitymgr/samgr/services/samgr/native/source/system_ability_manager.cpp#L735-L756)

DoLoadOnDemandAbility()

SA启动

[system_ability_manager.cpp](foundation/systemabilitymgr/samgr/services/samgr/native/source/system_ability_manager.cpp#L615-L635)

StartOnDemandAbilityInner()

服务订阅

[system_ability_manager.cpp](foundation/systemabilitymgr/samgr/services/samgr/native/source/system_ability_manager.cpp#L904-L938)

SubscribeSystemAbility()

客户端接口

[service_registry.cpp](foundation/systemabilitymgr/samgr/services/samgr/native/source/service_registry.cpp#L173-L195)

SystemAbilityManagerClient::GetSystemAbilityManager()

八、核心设计要点

设计点

说明

单例模式

SystemAbilityManager是全局单例,通过GetInstance()获取

IPC通信

基于Binder机制,Samgr作为服务端,其他进程作为客户端

状态机管理

SA生命周期由SystemAbilityStateScheduler统一调度

按需加载

通过on-demand配置实现SA的延迟加载和自动回收

死亡通知

注册DeathRecipient监听SA/进程死亡,自动清理资源

分布式支持

通过DBinder实现跨设备SA调用

并发安全

使用shared_mutex、lock_guard等保证线程安全

欢迎大佬们提出指正,以上就是OpenHarmony服务管理框架(Samgr)的完整代码流程梳理。好了,又学废了吧,学废点赞加关注哦,哈哈哈。
九、挖到一款三用小工具,完全没有硬广套路,自用分享不踩雷

安卓小众宝藏 APP!灵动岛 + 流动文字表白墙,每天零钱可直接提现

灵动岛美化 安卓专属灵动常驻窗口,听歌、电量、网速等自定义样式,手机瞬间变精致,操作便利不卡顿。

全屏流动文字表白墙:三连击灵动岛可进入设置全屏滚动流动文字,不单用于告白,留联系电话、展示标语、心愿短句都适配,字体配色滚动速度随心调,摆摊、告白都好用。

无门槛赚钱提现:日常使用就能攒红包,无最低提现门槛,无提现上限,每日均可微信提现,亲测不到一个月累计微信到账 118.86 元。零碎时间买点零食,美汁儿汁儿~

实测零碎时间看广告,每小时红包预计可以拿到手5块,真实靠谱。

填写邀请码 CEAF62A3,双方解锁红包福利,我升级 VIP,你额外多拿收益。 安装包很小,下载无捆绑,感兴趣直接点链接体验:

下载入口:

https://qcnvld5ujs4p.feishu.cn/file/PwlwbwRfSoIPYlxSAfFcaAqMnmd

最新文章

随机文章

基本 文件 流程 错误 SQL 调试
  1. 请求信息 : 2026-08-21 20:38:11 HTTP/2.0 GET : https://c.mffb.com.cn/a/501146.html
  2. 运行时间 : 0.288884s [ 吞吐率:3.46req/s ] 内存消耗:4,380.85kb 文件加载:140
  3. 缓存信息 : 0 reads,0 writes
  4. 会话信息 : SESSION_ID=768a3a8d419d12249f0d00f9873fc6cd
  1. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/public/index.php ( 0.79 KB )
  2. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/autoload.php ( 0.17 KB )
  3. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/composer/autoload_real.php ( 2.49 KB )
  4. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/composer/platform_check.php ( 0.90 KB )
  5. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/composer/ClassLoader.php ( 14.03 KB )
  6. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/composer/autoload_static.php ( 4.90 KB )
  7. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/think-helper/src/helper.php ( 8.34 KB )
  8. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/think-validate/src/helper.php ( 2.19 KB )
  9. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/think-orm/src/helper.php ( 1.47 KB )
  10. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/think-orm/stubs/load_stubs.php ( 0.16 KB )
  11. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/framework/src/think/Exception.php ( 1.69 KB )
  12. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/think-container/src/Facade.php ( 2.71 KB )
  13. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/symfony/deprecation-contracts/function.php ( 0.99 KB )
  14. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/symfony/polyfill-mbstring/bootstrap.php ( 8.26 KB )
  15. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/symfony/polyfill-mbstring/bootstrap80.php ( 9.78 KB )
  16. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/symfony/var-dumper/Resources/functions/dump.php ( 1.49 KB )
  17. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/think-dumper/src/helper.php ( 0.18 KB )
  18. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/symfony/var-dumper/VarDumper.php ( 4.30 KB )
  19. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/framework/src/think/App.php ( 15.30 KB )
  20. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/think-container/src/Container.php ( 15.76 KB )
  21. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/psr/container/src/ContainerInterface.php ( 1.02 KB )
  22. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/app/provider.php ( 0.19 KB )
  23. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/framework/src/think/Http.php ( 6.04 KB )
  24. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/think-helper/src/helper/Str.php ( 7.29 KB )
  25. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/framework/src/think/Env.php ( 4.68 KB )
  26. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/app/common.php ( 0.03 KB )
  27. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/framework/src/helper.php ( 18.78 KB )
  28. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/framework/src/think/Config.php ( 5.54 KB )
  29. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/config/app.php ( 0.95 KB )
  30. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/config/cache.php ( 0.78 KB )
  31. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/config/console.php ( 0.23 KB )
  32. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/config/cookie.php ( 0.56 KB )
  33. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/config/database.php ( 2.48 KB )
  34. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/framework/src/think/facade/Env.php ( 1.67 KB )
  35. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/config/filesystem.php ( 0.61 KB )
  36. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/config/lang.php ( 0.91 KB )
  37. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/config/log.php ( 1.35 KB )
  38. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/config/middleware.php ( 0.19 KB )
  39. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/config/route.php ( 1.89 KB )
  40. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/config/session.php ( 0.57 KB )
  41. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/config/trace.php ( 0.34 KB )
  42. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/config/view.php ( 0.82 KB )
  43. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/app/event.php ( 0.25 KB )
  44. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/framework/src/think/Event.php ( 7.67 KB )
  45. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/app/service.php ( 0.13 KB )
  46. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/app/AppService.php ( 0.26 KB )
  47. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/framework/src/think/Service.php ( 1.64 KB )
  48. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/framework/src/think/Lang.php ( 7.35 KB )
  49. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/framework/src/lang/zh-cn.php ( 13.70 KB )
  50. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/framework/src/think/initializer/Error.php ( 3.31 KB )
  51. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/framework/src/think/initializer/RegisterService.php ( 1.33 KB )
  52. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/services.php ( 0.14 KB )
  53. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/framework/src/think/service/PaginatorService.php ( 1.52 KB )
  54. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/framework/src/think/service/ValidateService.php ( 0.99 KB )
  55. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/framework/src/think/service/ModelService.php ( 2.04 KB )
  56. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/think-trace/src/Service.php ( 0.77 KB )
  57. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/framework/src/think/Middleware.php ( 6.72 KB )
  58. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/framework/src/think/initializer/BootService.php ( 0.77 KB )
  59. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/think-orm/src/Paginator.php ( 11.86 KB )
  60. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/think-validate/src/Validate.php ( 63.20 KB )
  61. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/think-orm/src/Model.php ( 23.55 KB )
  62. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/think-orm/src/model/concern/Attribute.php ( 21.05 KB )
  63. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/think-orm/src/model/concern/AutoWriteData.php ( 4.21 KB )
  64. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/think-orm/src/model/concern/Conversion.php ( 6.44 KB )
  65. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/think-orm/src/model/concern/DbConnect.php ( 5.16 KB )
  66. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/think-orm/src/model/concern/ModelEvent.php ( 2.33 KB )
  67. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/think-orm/src/model/concern/RelationShip.php ( 28.29 KB )
  68. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/think-helper/src/contract/Arrayable.php ( 0.09 KB )
  69. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/think-helper/src/contract/Jsonable.php ( 0.13 KB )
  70. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/think-orm/src/model/contract/Modelable.php ( 0.09 KB )
  71. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/framework/src/think/Db.php ( 2.88 KB )
  72. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/think-orm/src/DbManager.php ( 8.52 KB )
  73. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/framework/src/think/Log.php ( 6.28 KB )
  74. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/framework/src/think/Manager.php ( 3.92 KB )
  75. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/psr/log/src/LoggerTrait.php ( 2.69 KB )
  76. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/psr/log/src/LoggerInterface.php ( 2.71 KB )
  77. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/framework/src/think/Cache.php ( 4.92 KB )
  78. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/psr/simple-cache/src/CacheInterface.php ( 4.71 KB )
  79. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/think-helper/src/helper/Arr.php ( 16.63 KB )
  80. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/framework/src/think/cache/driver/File.php ( 7.84 KB )
  81. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/framework/src/think/cache/Driver.php ( 9.03 KB )
  82. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/framework/src/think/contract/CacheHandlerInterface.php ( 1.99 KB )
  83. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/app/Request.php ( 0.09 KB )
  84. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/framework/src/think/Request.php ( 55.78 KB )
  85. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/app/middleware.php ( 0.25 KB )
  86. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/framework/src/think/Pipeline.php ( 2.61 KB )
  87. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/think-trace/src/TraceDebug.php ( 3.40 KB )
  88. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/framework/src/think/middleware/SessionInit.php ( 1.94 KB )
  89. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/framework/src/think/Session.php ( 1.80 KB )
  90. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/framework/src/think/session/driver/File.php ( 6.27 KB )
  91. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/framework/src/think/contract/SessionHandlerInterface.php ( 0.87 KB )
  92. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/framework/src/think/session/Store.php ( 7.12 KB )
  93. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/framework/src/think/Route.php ( 23.73 KB )
  94. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/framework/src/think/route/RuleName.php ( 5.75 KB )
  95. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/framework/src/think/route/Domain.php ( 2.53 KB )
  96. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/framework/src/think/route/RuleGroup.php ( 22.43 KB )
  97. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/framework/src/think/route/Rule.php ( 26.95 KB )
  98. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/framework/src/think/route/RuleItem.php ( 9.78 KB )
  99. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/route/app.php ( 1.72 KB )
  100. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/framework/src/think/facade/Route.php ( 4.70 KB )
  101. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/framework/src/think/route/dispatch/Controller.php ( 4.74 KB )
  102. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/framework/src/think/route/Dispatch.php ( 10.44 KB )
  103. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/app/controller/Index.php ( 4.81 KB )
  104. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/app/BaseController.php ( 2.05 KB )
  105. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/think-orm/src/facade/Db.php ( 0.93 KB )
  106. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/think-orm/src/db/connector/Mysql.php ( 5.44 KB )
  107. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/think-orm/src/db/PDOConnection.php ( 52.47 KB )
  108. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/think-orm/src/db/Connection.php ( 8.39 KB )
  109. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/think-orm/src/db/ConnectionInterface.php ( 4.57 KB )
  110. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/think-orm/src/db/builder/Mysql.php ( 16.58 KB )
  111. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/think-orm/src/db/Builder.php ( 24.06 KB )
  112. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/think-orm/src/db/BaseBuilder.php ( 27.50 KB )
  113. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/think-orm/src/db/Query.php ( 15.71 KB )
  114. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/think-orm/src/db/BaseQuery.php ( 45.13 KB )
  115. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/TimeFieldQuery.php ( 7.43 KB )
  116. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/AggregateQuery.php ( 3.26 KB )
  117. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/ModelRelationQuery.php ( 20.07 KB )
  118. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/ParamsBind.php ( 3.66 KB )
  119. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/ResultOperation.php ( 7.01 KB )
  120. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/WhereQuery.php ( 19.37 KB )
  121. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/JoinAndViewQuery.php ( 7.11 KB )
  122. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/TableFieldInfo.php ( 2.63 KB )
  123. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/Transaction.php ( 2.77 KB )
  124. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/framework/src/think/log/driver/File.php ( 5.96 KB )
  125. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/framework/src/think/contract/LogHandlerInterface.php ( 0.86 KB )
  126. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/framework/src/think/log/Channel.php ( 3.89 KB )
  127. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/framework/src/think/event/LogRecord.php ( 1.02 KB )
  128. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/think-helper/src/Collection.php ( 16.47 KB )
  129. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/framework/src/think/facade/View.php ( 1.70 KB )
  130. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/framework/src/think/View.php ( 4.39 KB )
  131. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/framework/src/think/Response.php ( 8.81 KB )
  132. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/framework/src/think/response/View.php ( 3.29 KB )
  133. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/framework/src/think/Cookie.php ( 6.06 KB )
  134. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/think-view/src/Think.php ( 8.38 KB )
  135. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/framework/src/think/contract/TemplateHandlerInterface.php ( 1.60 KB )
  136. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/think-template/src/Template.php ( 46.61 KB )
  137. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/think-template/src/template/driver/File.php ( 2.41 KB )
  138. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/think-template/src/template/contract/DriverInterface.php ( 0.86 KB )
  139. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/runtime/temp/cefbf809ba1a84190cb04b0cb7abcf79.php ( 11.98 KB )
  140. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/think-trace/src/Html.php ( 4.42 KB )
  1. CONNECT:[ UseTime:0.000983s ] mysql:host=127.0.0.1;port=3306;dbname=c_mffb;charset=utf8mb4
  2. SHOW FULL COLUMNS FROM `fenlei` [ RunTime:0.001525s ]
  3. SELECT * FROM `fenlei` WHERE `fid` = 0 [ RunTime:0.000798s ]
  4. SELECT * FROM `fenlei` WHERE `fid` = 63 [ RunTime:0.001058s ]
  5. SHOW FULL COLUMNS FROM `set` [ RunTime:0.001612s ]
  6. SELECT * FROM `set` [ RunTime:0.005415s ]
  7. SHOW FULL COLUMNS FROM `article` [ RunTime:0.001699s ]
  8. SELECT * FROM `article` WHERE `id` = 501146 LIMIT 1 [ RunTime:0.007075s ]
  9. UPDATE `article` SET `lasttime` = 1787315891 WHERE `id` = 501146 [ RunTime:0.027158s ]
  10. SELECT * FROM `fenlei` WHERE `id` = 66 LIMIT 1 [ RunTime:0.000677s ]
  11. SELECT * FROM `article` WHERE `id` < 501146 ORDER BY `id` DESC LIMIT 1 [ RunTime:0.001186s ]
  12. SELECT * FROM `article` WHERE `id` > 501146 ORDER BY `id` ASC LIMIT 1 [ RunTime:0.001118s ]
  13. SELECT * FROM `article` WHERE `id` < 501146 ORDER BY `id` DESC LIMIT 10 [ RunTime:0.027803s ]
  14. SELECT * FROM `article` WHERE `id` < 501146 ORDER BY `id` DESC LIMIT 10,10 [ RunTime:0.018365s ]
  15. SELECT * FROM `article` WHERE `id` < 501146 ORDER BY `id` DESC LIMIT 20,10 [ RunTime:0.009537s ]
0.294630s