当前位置: 首页 > article >正文

关于 SSR,我承认我之前只是“会用”而已

SSR、Hydration 这些词在 Web 前端领域非常常见开发者经常能接触到这个概念。但是这些是什么为什么怎么用过去我都没有深究下去关于 SSR我承认我之前只是“会用”而已。一、区分 CSR 还是 SSR回顾自己做的一些小玩意发现自己大部分都是用 Vite React TS 来构建项目是 CSR采用的是 SPA 场景Vite 默认是 SPA。虽说也用 Next.js 写过项目属于 SSR 支持但没有深究过里面的内容。如何区分启动项目以后检查页面源代码SSR会看到完整的内容而不是空的div idrootCSR浏览器几乎拿到的就是空的 HTML特性SPASSR首屏速度慢等 JS 下载执行快直接返回 HTML页面切换极快局部刷新较慢可能重新请求SEO差好服务器压力小只传数据大需要渲染页面复杂度低高典型场景后台系统、工具类应用博客、电商、内容型网站什么场景适合 SSR 内容型 C 端产品电商、资讯、博客需要 SEO 和首屏速度比较适合强交互的后台系统、内部工具就没必要硬上 SSR 了。核心判断标准很简单首屏速度和 SEO 对业务价值有多大如果答案是“不大”SSR 就是过度设计。SEO搜索引擎优化是一种让网站在搜索引擎结果中更加清晰也帮助我们将搜索结果更靠前的过程。搜索引擎爬取网页跟随页面之间的链接并索引找到的内容。搜索时搜索引擎会显示索引内容。爬行者遵守规则。如果你在为网站进行搜索引擎优化时密切关注这些规则则会为网站提供最好的机会以便在首批结果中显示增加流量和可能的收入用于电子商务和广告。二、为什么用 Next.js “没感觉”我觉得搭建一个脚手架用 Next.js 实现 SSR 确实是没有难度的。框架本身封装了很多方法用起来比较傻瓜写代码的方式和写普通 React SPA 几乎一样所以我“没感觉”所以 Next.js 的使用没有很深刻的体会。Next.js 框架保护了我这样的猪头。它作为框架把 SSR 的工程化难题全解决了开箱即用。从设计哲学的角度来说Next.js是非常成功了。又也许是因为自己的 toy 项目没感到 SSR 的好处——体量都比较小没有太深的感受反而觉得有点重并不是太好用。SSR 的特点是什么SSR 的代表框架有 React 生态的 Next.js 和 Vue 生态的 Nuxt。它的优点是首屏加载快用户能很快看到内容同时 SEO 友好搜索引擎可以直接抓取到完整的 HTML缺点也很明显服务器压力更大因为每次请求都要重新渲染页面而且整体复杂度高需要处理水合Hydration、DOM 结构匹配等一系列问题。按照这些特点来看之前我的猜想是有道理的。toy项目没有必要SSR自然也就感受不到。那么SSR 的真正价值场景是什么呢SSR 常应用在首屏依赖大量异步数据比如电商详情页、资讯详情页、SEO 直接决定业务流量C 端内容产品、弱网环境下 HTML 比 JSONJS 更早到达的情况下。而我的小项目SEO 无所谓首屏慢 0.5 秒也没人投诉。这种场景强行上 SSR反而是用复杂度换不存在的问题。框架无好坏场景才决定选择。渲染模式其实是一个光谱不是简单的二选一。从纯静态 HTML 到 SSG、ISR、SSR、流式 SSR、CSR再到部分水合、群岛架构中间有很多种组合也就衍生到一个混合渲染的概念这在现代框架中其实是常见的。现代趋势混合方案现在很多框架Next.js、Nuxt允许按页面或按组件选择不需要 SEO 的后台页面 → 用 SPA 模式需要首屏快、SEO 好的营销页/博客 → 用 SSR 模式这就是所谓的混合渲染。例如 Next.js 的use client一开始我以为是“只在客户端运行”的意思。但它其实是水合边界的声明不是运行环境的切换——只有你显式标记的组件才会被水合。标记了use client的组件服务端照样会执行一次来生成 HTML只是客户端需要再次激活。所以它并不解决服务端没有window的问题你依然要用useEffect或动态导入来绕过。再看 Next.js 的 App Router它默认就是 React Server Components连 JS 都不发给客户端只有显式标记use client的组件才会被水合。这种“部分水合”的思路其实更接近 Astro 的群岛架构。三、SSR 到底是怎么工作的简单说流程是用户访问 → 服务器在服务端就把组件渲染成完整 HTML → 浏览器直接看到完整页面 → 再下载 JS 补充交互 Hydration水合。如果用 React 官方的底层 API 来理解核心就是renderToString或者更高级的renderToPipeableStream流式 SSR。服务端把App /变成 HTML 字符串浏览器拿到后先展示再用hydrateRoot把事件绑上去。把组件变成 HTML这一步其实和 React 在浏览器里做的事一模一样只是运行的地方不同。浏览器里CSR组件代码 → React 计算虚拟 DOM → 变成真实 DOM → 挂到 div idroot 里服务器上SSR组件代码 → React 计算虚拟 DOM → 变成 HTML 字符串 → 直接拼到响应里返回服务器上不需要挂载 DOM只需要输出字符串。React 提供了专门的 API 来做这件事renderToString()把一个组件变成 HTML 字符串renderToPipeableStream()流式输出边渲染边发送所以“在服务端把组件渲染成完整 HTML”这句话底层就是调了renderToString(App /)。hydrateRoot的作用已经有了 HTML 了服务端生成的现在 JS 加载完了React 需要在浏览器里接管这个页面。如果不做任何事页面看起来是好的但按钮点不了输入框没反应——因为事件监听器还没绑上去。如果用传统的renderReact 会把现有的 DOM 全部删掉重新创建一份再把事件绑上去。这样效率低而且用户可能会看到页面闪烁。hydrateRoot的做法检查现有的 DOM 结构不删除、不重建直接在已有的 DOM 节点上挂载事件监听器把内部状态初始化好打个比方你收到了一辆已经组装好的车服务端给的 HTML技师hydrateRoot不需要把车拆了重装只需要把方向盘、刹车、油门这些操控装置接上车就能开了。This will hydrate the server HTML inside the browser DOM node with the React component for your app. Usually, you will do it once at startup. If you use a framework, it might do this behind the scenes for you.这样可以将浏览器 DOM 节点内的服务器 HTML 与应用的 React 组件进行水合。通常你会在启动时做一次。如果你用框架它可能在幕后帮你做到这一点。To hydrate your app, React will “attach” your components’ logic to the initial generated HTML from the server. Hydration turns the initial HTML snapshot from the server into a fully interactive app that runs in the browser.为了给你的应用提供水合React 会把组件的逻辑“附加”到服务器最初生成的 HTML 上。Hydration 将服务器上的初始 HTML 快照转化为一个在浏览器中运行的完全交互式应用。这里只是介绍了一下react 框架对于 ssr的做法更多细节还是具体结合项目代码或者源码。建议读一读各个框架关于 SSR Hydration的官方介绍文档。hydrateRoot – 反应 — hydrateRoot – React服务器端渲染 (SSR) | Vue.js 框架Getting Started: Server and Client Components | Next.js用最简单的代码对比纯 CSR与SSR Hydration纯 CSRimport{createRoot}fromreact-dom/clientimportAppfrom./App// 创建一个新的根节点从头渲染constrootcreateRoot(document.getElementById(root))root.render(App/)SSR Hydrationimport{hydrateRoot}fromreact-dom/clientimportAppfrom./App// 不创建新节点而是复用已有的 HTMLhydrateRoot(document.getElementById(root),App/)区别就这一行createRoot→hydrateRoot其他代码一模一样。写到这里发现没感觉的真相自然水落石出——框架把这一切都隐藏了。用 Next.js 的时候不需要手动调用renderToString不需要手动调用hydrateRoot只管写组件框架帮你做了。这也就是我之前说的“框架保护了我这样的猪头”——好处是省事坏处是不知道底层发生了什么。React的最小示例server.jsimportexpressfromexpressimport{renderToString}fromreact-dom/serverimportAppfrom./App.jsxconstappexpress()app.get(/,(req,res){consthtmlrenderToString(App/)res.send(!DOCTYPE html html body div idroot${html}/div script src/client.js/script /body /html)})app.listen(3000)client.jsimport{hydrateRoot}fromreact-dom/clientimportAppfrom./App.jsxhydrateRoot(document.getElementById(root),App/)页面是服务端生成的右键查看源代码能看到完整内容水合成功后页面可以交互如果 App 组件里写了Date.now()会报水合错误看到第三点也许会有疑问了为什么会报错误呢接下来就说说水合。四、关于 Hydration水合1. 服务端生成静态骨架 (Server-Side Rendering)动作当用户访问页面时服务器会快速获取数据将你的框架代码如 React、Vue渲染成一段完整的 HTML 字符串。结果用户浏览器接收到的是立即可见的完整 HTML 页面解决了传统 SPA 应用“白屏”和 SEO 难的问题。2. 客户端注入灵魂与交互 (Hydration)动作浏览器显示 HTML 后会加载 JS 文件。框架如 React 的hydrateRoot开始工作它不会重新创建整个 DOM那样会浪费性能而是找到现有的 DOM 节点在上面挂载事件监听器如onClick和绑定内部状态。结果原本“静态”的页面瞬间“活”了变成了一个可点击、可交互的完整单页应用SPA。一个生动的比喻水合就像给一辆已经组装好的顶级跑车静态 HTML安装发动机和方向盘JS 逻辑。你在展厅里第一眼就能看到它炫酷的外形快速首屏但只有技师把操控系统装进去后你才能真正点火开走它。一开始我以为水合就是给 DOM 挂上事件监听器后来发现没那么简单。水合时 React 到底在比什么不是比内容文本而是比 DOM 树结构。服务端生成的 HTML 结构必须和客户端第一次 render 生成的虚拟 DOM 结构完全一致。如果不一致React 会直接报错Text content did not match。更麻烦的后果水合失败后React 不会尝试修复而是直接丢弃服务端渲染的 HTML在客户端重新渲染整棵子树。降级为 CSR 行为。这意味着你付出了 SSR 的成本服务端渲染 网络传输却没有得到首屏收益甚至比纯 CSR 更慢。常见的水合失败场景代码级// ❌ 危险时间戳不一致functionBadComponent(){returndiv{Date.now()}/div}// ❌ 危险条件判断不一致functionBadComponent(){returndiv{typeofwindowobject?客户端:服务端}/div}// ✅ 安全把依赖浏览器的逻辑放到 useEffectfunctionGoodComponent(){const[timestamp,setTimestamp]useState(null)useEffect(()setTimestamp(Date.now()),[])returndiv{timestamp}/div}React 18 的选择性水合新版本支持用Suspense包裹组件优先激活用户正在交互的部分而不是等全部水合完成。这对大型页面很实用。五、Modern.js 与新生态了解 SSR 原理后我们来看看新一代框架是如何优化这个过程的。前段时间才发现字节 2021 年开源的 Modern.js 框架。可以列表对比一下这两个框架。技术Next.jsModern.js打包工具Webpack / TurbopackRspack (基于 Rust速度更快)转译工具Babel / SWCSWC 默认路由自研App Router / Pages RouterReact Router 7 约定式路由服务端框架自研Hono.js轻量高性能本人在构建了许多许多次 Express 框架以后才认识到 Express 确实比较老了但对于新手学习成本低生态也传统而稳定。我最近才了解到 Hono、Bun 等较新的生态更多构建工具相关的 Rsbuild、Rspack 等内容对我来说全是新的值得学一学拓展一下知识面。RspackWebpack 的 Rust 替代品API 兼容但构建速度快很多。解决大型项目 Webpack 构建慢的痛点。目前生态还不够成熟插件支持不如 Webpack。Hono轻量级 Web 框架跨运行时原生 Promise 支持。比 Express 更适合现代 JavaScript 生态。这些“新东西”解决了什么问题我发现一个规律从 Webpack 到 Rspack从 Express 到 Hono本质都是用编译型语言Rust/Go重写 JS 工具链。这不是卷也许也是哈哈哈是因为 JS 做构建工具已经到天花板了——单线程、动态类型、运行时开销大。Rspack 用 Rust 实现多线程并行编译在大型项目上构建速度能提升 5-10 倍。Hono 比 Express 强在哪跨运行时Node、Deno、Bun、Cloudflare Workers 都能跑原生 Promise 支持TypeScript 一等公民。Express 设计于 2010 年那时候还没有async/await异步中间件的处理方式现在看起来确实有点别扭。Modern.js 的定位它更像一个“全家桶”方案不仅仅是 SSR 框架还内置了 BFF 一体化、国际化、Monorepo 支持等。和 Next.js 的“轻核心 社区生态”走的是两条路。字节内部大规模验证过国内场景优化比如 Ant Design 按需加载做得更细致。六、小结回过头看SSR 和 CSR 没有绝对的好坏更多是场景驱动的选择。Next.js 让我“无感”恰恰说明它封装得足够好而 Express 虽老却依然适合新手入门。技术世界变化很快新生态、新框架、新概念总是日新月异。但好奇心永远是最好的导航。这些新东西不需要全都学但了解它们解决了什么问题或许能帮我们在合适的场景做出更好的选择。限于个人写作文中若有疏漏还请不吝赐教。参考文档React SSR 水合Hydration详解SEO - MDN Web 文档术语表Web 相关术语的定义 | MDNhydrateRoot – 反应 — hydrateRoot – React服务器端渲染 (SSR) | Vue.js 框架Getting Started: Server and Client Components | Next.js

相关文章:

关于 SSR,我承认我之前只是“会用”而已

SSR、Hydration 这些词在 Web 前端领域非常常见,开发者经常能接触到这个概念。但是,这些是什么?为什么?怎么用?过去我都没有深究下去,关于 SSR,我承认我之前只是“会用”而已。 一、区分 CSR 还…...

Z-Image-Turbo-辉夜巫女高性能部署:Xinference量化加载+Gradio并发优化实测

Z-Image-Turbo-辉夜巫女高性能部署:Xinference量化加载Gradio并发优化实测 1. 项目简介 Z-Image-Turbo-辉夜巫女是基于Z-Image-Turbo模型的Lora版本,专门用于生成高质量的辉夜巫女风格图片。这个镜像通过Xinference框架实现了高效的模型部署&#xff0…...

Ollama小白入门:从零开始使用Yi-Coder-1.5B,体验AI写代码

Ollama小白入门:从零开始使用Yi-Coder-1.5B,体验AI写代码 1. 为什么你需要Yi-Coder-1.5B 作为一个开发者,你是否经常遇到这些情况: 知道要实现什么功能,但写不出具体代码需要快速生成一些模板代码来节省时间学习新编…...

前端设计融合:忍者像素绘卷:天界画坊生成UI/UX素材实战

前端设计融合:忍者像素绘卷:天界画坊生成UI/UX素材实战 1. 像素艺术在前端设计中的独特价值 像素艺术作为一种复古又现代的设计风格,近年来在前端设计领域重新焕发生机。不同于传统设计工具需要手动绘制每个像素点,忍者像素绘卷…...

cv_unet_image-colorization实战案例:退役军人事务局荣誉影像AI修复工程

cv_unet_image-colorization实战案例:退役军人事务局荣誉影像AI修复工程 1. 项目背景与意义 在退役军人事务局的档案库中,保存着大量珍贵的历史照片。这些黑白影像记录着军人的荣誉时刻,但由于年代久远和技术限制,很多照片已经褪…...

科研助手实战:OpenClaw+Phi-3-vision自动整理文献图表数据

科研助手实战:OpenClawPhi-3-vision自动整理文献图表数据 1. 为什么需要自动化文献整理 作为一名经常需要阅读大量论文的研究者,我发现自己花费在整理文献数据上的时间越来越长。每次下载几十篇PDF,手动截图关键图表、复制数据表格、整理参…...

Filter下固定块半导体设备PP精密加工案例 | 莱图加工程师实录

本次案例来自一家半导体微电子设备制造企业的委托加工需求,零件为Filter下固定块,作为莱图加承接的半导体设备零件加工项目之一,该零件在湿法工艺设备、晶圆清洗设备或化学液过滤系统中承担Filter组件的下部固定与支撑功能。Filter下固定块&a…...

【开源】从设计文档到可交付技术交底书:专利.Skill

【开源】从设计文档到可交付技术交底书:专利.Skill 摘要 设计文档、代码都有了,专利点却还没梳清?交底书既要系统框图与流程图,又要代理人能直接改的 Word,多轮补材料还不能覆盖旧稿?本文介绍开源仓库 pat…...

深入解析dify中的TF-IDF与余弦相似度在RAG重排序中的应用

1. 理解RAG中的重排序问题 在检索增强生成(RAG)系统中,重排序(rerank)是一个关键环节。想象一下你在图书馆用搜索引擎找资料:系统先找到100本可能相关的书,但真正对你有用的可能只有前3本。重排…...

比迪丽LoRA LoRA融合技巧:与RealisticVision/AnimePastel等底模协同出图效果

比迪丽LoRA融合技巧:与RealisticVision/AnimePastel等底模协同出图效果 1. 引言:当比迪丽遇见不同画风 如果你用过比迪丽(Videl)这个LoRA模型,可能会发现一个有趣的现象:有时候生成的比迪丽特别“动漫风”…...

重型设备预测性维护:时序数据的摄取与治理架构

重型设备预测性维护:时序数据的摄取与治理架构在工业 4.0 的演进路线中,制造企业对生产设备的管理正在经历深刻的范式转移。传统的“定期维护(Preventive Maintenance)”往往会造成零部件的过度替换与运维人力的浪费;而…...

高效电源芯片ASP3605性能优化全解析,使用Django从零开始构建一个个人博客系统。

ASP3605电源芯片的基本特性 ASP3605是一款高效同步降压DC-DC转换器芯片,输入电压范围通常在4.5V至18V之间,输出电流能力可达5A。其开关频率可调节(300kHz至2MHz),支持轻载高效模式(如PFM)&#…...

深化产教融合|河北建筑工程学院到访卓翼智能,共探低空人才培养新路径

近日,河北建筑工程学院机械工程学院院长王占英、实验室中心主任戴美魁,信息工程学院院长麻振华、副院长司亚超,以及河北建筑工程学院北京校友会会长刘德利一行莅临北京卓翼智能科技有限公司(以下简称“卓翼智能”)考察…...

C#开发者紧急通告:Blazor 2026正式版插件兼容性断崖预警(附72小时热修复方案)

第一章:C#开发者紧急通告:Blazor 2026正式版插件兼容性断崖预警(附72小时热修复方案) Blazor 2026正式版已于2026年4月1日全球发布,但微软官方同步披露:所有基于.NET 7及更早运行时构建的第三方组件库&…...

Vivado里给UltraScale FPGA的MGT分时钟,为啥隔壁SLR的Bank死活不认?

Vivado调试手记:破解UltraScale FPGA跨SLR时钟共享难题 第一次在Vivado里看到"ERROR: [DRC 23-20] GT_COMMON placement violation"这个红色报错时,我盯着屏幕愣了三分钟——明明在7系列FPGA上运行良好的参考时钟共享方案,怎么换到…...

仅限首批200名开发者获取:PHP低代码表单引擎v1.0内测版+商业授权白名单通道(含Figma组件库+Swagger自动文档生成)

第一章:PHP低代码表单引擎v1.0内测版概览与接入指南 PHP低代码表单引擎v1.0内测版是一款面向中小规模Web应用的轻量级表单构建与渲染框架,基于原生PHP 8.1开发,不依赖Composer自动加载,支持零配置快速嵌入现有项目。引擎核心由表单…...

二次元创作神器体验:沉浸式漫画分镜界面,快速产出火影同人作品

二次元创作神器体验:沉浸式漫画分镜界面,快速产出火影同人作品 1. 创作工具概览 「忍者绘卷:通灵之术」是一款专为二次元创作者设计的AI绘画工具,基于Tongyi-MAI Z-Image Turbo模型深度优化。这款工具最大的特色是采用了创新的漫…...

DeepSeek-OCR-2部署教程:如何在多卡服务器上分配显存并行处理批量文档

DeepSeek-OCR-2部署教程:如何在多卡服务器上分配显存并行处理批量文档 1. 项目概述 DeepSeek-OCR-2是一个基于多模态视觉大模型的智能文档解析系统,能够将图像中的文档内容转换为结构化的Markdown格式。与传统OCR技术相比,它不仅能够识别文…...

MedGemma-X参数详解:top_k=50在避免幻觉与保持临床相关性间的平衡

MedGemma-X参数详解:top_k50在避免幻觉与保持临床相关性间的平衡 1. 引言:智能影像诊断的新挑战 在医疗AI领域,我们面临着一个关键挑战:如何在保持模型创造力的同时,确保输出的临床准确性。MedGemma-X作为新一代多模…...

OpenClaw+千问3.5-9B社交媒体管理:定时发布与智能互动

OpenClaw千问3.5-9B社交媒体管理:定时发布与智能互动 1. 为什么选择OpenClaw管理社交媒体 去年我开始尝试运营技术类社交媒体账号时,每天要花2-3小时手动处理内容发布和粉丝互动。直到发现OpenClaw这个能直接操控我电脑的AI助手,配合千问3.…...

Shell脚本中的算术运算:let、(())、expr三种方式全解析(附避坑指南)

Shell脚本算术运算深度指南:从基础到高阶实战 在自动化脚本编写和数据处理中,算术运算是最基础却最容易出错的部分。Shell作为字符串处理起家的脚本语言,其数值计算有着独特的语法规则和陷阱。本文将彻底解析三种主流算术运算方式&#xff0c…...

OpenClaw版本升级:Qwen2.5-VL-7B兼容性测试与迁移指南

OpenClaw版本升级:Qwen2.5-VL-7B兼容性测试与迁移指南 1. 升级前的准备工作 上周我在本地开发环境遇到了一个棘手问题——现有的OpenClaw版本无法正确调用新部署的Qwen2.5-VL-7B多模态模型。这促使我开始了这次版本升级之旅,过程中积累了不少实战经验想…...

从沙漏到矿机:聊聊离散元法DEM是怎么‘算’出颗粒世界的(附Rocky/EDEM软件对比与学习资源)

从沙漏到矿机:离散元法DEM如何重构颗粒世界的数字镜像 沙漏里的细沙流淌时,每一粒沙子都在重力和碰撞中演绎着独特的运动轨迹。这种看似简单的物理现象背后,隐藏着一个复杂的多体动力学问题——如何精确描述成千上万颗粒之间的相互作用&#…...

解码AMD EPYC CPU命名规则:从数字到性能的全面解析

1. AMD EPYC CPU命名规则入门指南 第一次看到AMD EPYC处理器的型号时,我完全被那一串数字字母搞懵了。EPYC 7763、EPYC 75F3、EPYC 7313P...这些看似随机的组合其实藏着重要信息。就像汽车型号能看出排量和配置一样,EPYC的命名规则也能让我们快速判断处理…...

CLIP-GmP-ViT-L-14从零开始:国产昇腾910B芯片ACL适配部署实践

CLIP-GmP-ViT-L-14从零开始:国产昇腾910B芯片ACL适配部署实践 1. 项目概述 CLIP-GmP-ViT-L-14是一个经过几何参数化(GmP)微调的CLIP模型,在ImageNet和ObjectNet数据集上达到了约90%的准确率。这个模型结合了视觉和语言理解能力,能够计算图像…...

Jetson Nano 平台YOLO目标检测优化详细设计方案

Jetson Nano 平台YOLO目标检测优化详细设计方案 1. 项目概况与设计目标 Jetson Nano 作为 NVIDIA 推出的入门级边缘 AI 计算平台,虽然在计算能力上相比高端 GPU有所限制,但在功耗控制和成本效益方面表现优异,特别适合对功耗敏感的边缘部署场景…...

Wan2.2-I2V-A14B镜像免配置:内置模型权重42GB,节省下载与校验时间

Wan2.2-I2V-A14B镜像免配置:内置模型权重42GB,节省下载与校验时间 1. 镜像概述与核心优势 Wan2.2-I2V-A14B是一款专为文生视频任务优化的私有部署镜像,针对RTX 4090D 24GB显存显卡进行了深度优化。这个镜像最大的特点是内置了完整的42GB模型…...

嵌入式轻量级RPC框架:串口远程调用与调试技术

1. RPC库技术解析:面向嵌入式系统的轻量级远程过程调用框架1.1 设计背景与工程定位RPC(Remote Procedure Call)在嵌入式系统中并非传统服务器场景下的高吞吐通信协议,而是一种面向调试、配置与现场维护的低带宽、高语义、强交互性…...

LightOnOCR-2-1B作品分享:多语言识别效果实测,支持中日英法等

LightOnOCR-2-1B作品分享:多语言识别效果实测,支持中日英法等 1. 引言:多语言OCR的现实需求 在全球化的商业环境中,企业每天需要处理来自不同国家的文档、票据和表单。传统OCR工具往往面临两大挑战:一是对多语言混合…...

【SAP CO】3.产品成本-4.Costing Sheet成本核算单

目录 一、 Costing Sheet成本核算单简介 二、定义Calculation Bases计算基准 三、定义Overhead Rates间接费用率 四、定义Credits贷方 五、定义Costing Sheet成本核算单 一、 Costing Sheet成本核算单简介 库房、质量控制等成本中心,虽然没有直接参加生产&…...