- Vite:下一代前端构建工具的革命
布兰妮甜
vitejavascript前端构建工具
Hi,我是布兰妮甜!在现代前端开发领域,构建工具的选择对开发体验和项目效率有着决定性影响。从早期的Grunt、Gulp到Webpack、Rollup,前端构建工具不断演进。而Vite的出现,则彻底改变了传统构建工具的工作模式,为开发者带来了前所未有的开发体验。本文将深入探讨Vite的设计哲学、核心特性、工作原理以及实际应用场景。文章目录一、什么是Vite?二、Vite的核心设计理念2.1利用浏览器
- 常见构建工具使用与原理浅析
1.初版构建工具1.1.GruntGrunt是前端第一个正式的构建工具,它基于Node.js开发。Grunt同样是基于插件实现功能拓展增强,但对于像Webpack上很多能力,如HMR、ScopeHoisting等都是不支持的,可以作为学习Webpack前的了解。Grunt更像是一种自动化的配置工具集,就如官方所说,Grunt是TheJavaScriptTaskRunner,每个Grunt任务通常必
- webpack配置
panda4919
webpack前端node.js
一.基础配置:1.为什么需要打包:开发时,我们会使用框架(React、Vue),ES6模块化语法,Less/Sass等css预处理器等语法进行开发。这样的代码要想在浏览器运行必须经过编译成浏览器能识别的JS、Css等语法,才能运行。所以我们需要打包工具帮我们做完这些事。除此之外,打包工具还能压缩代码、做兼容性处理、提升代码性能等。2.有哪些打包工具:GruntGulpParcelWebpackRo
- webpack es6 npm包_前端 Webpack 工程化的最佳实践
作者|阿里文娱前端开发专家芃苏责编|屠敏头图|CSDN下载自视觉中国引言▐前端构建工具的演变回想在2015-2016年的时候,开发者们开始渐渐把视线从大量使用TaskRunner的Grunt工具,转移到Gulp这种Pipeline形式的工具。Gulp还可以配合上众多个性化插件(如gulp-streamify),从而使得整个前端的准备工作链路,变得清晰易控,如刷新页面、代码的编译和压缩等等。自动化“
- Vite 及生态环境:新时代的构建工具
BitCat
前端工程化前端面试
前言前端构建工具的演进历程见证了Web开发从简单的文件处理到复杂的模块打包系统的转变。从早期的Grunt、Gulp,到Webpack、Parcel,再到如今的Vite,每一次工具迭代都反映了前端开发需求的变化与技术生态的进步。传统构建工具如Webpack在处理大型前端应用时存在启动缓慢、热更新延迟等痛点,这些问题随着项目规模增长愈发明显,严重影响体验和生产效率。Vite(法语中"快速"之意)作为新
- 极速开发!Vite:前端工程化与性能优化的巅峰之作
wylee
前端
在前端开发的洪流中,我们常常被工具链的复杂、构建过程的缓慢以及热更新的迟滞所困扰。从早期的Gulp、Grunt到如今的Webpack,每一次技术栈的演进都试图解决这些痛点,但往往也带来了更高的学习成本和更复杂的配置。当我们以为这已是常态时,一个划时代的项目横空出世,它以闪电般的速度颠覆了我们的认知,它就是——Vite。作为一名深耕前端多年的技术博主,我深知开发者对效率和体验的渴望。今天,我将带领大
- 前端组件库 - 搭建web app常用的样式/组件等收集列表(移动优先)
weixin_34014555
前端uijsonViewUI
0.前端自动化(Workflow)前端构建工具Webpack-modulebundlerYeoman-asetoftoolsforautomatingdevelopmentworkflowgulp-Thestreamingbuildsystemuse-gulpgrunt-theJavaScriptTaskRunnerF.I.S-前端集成解决方案WebStarterKit-一个Google提供的帮助
- 前端组件、插件汇总
弹琴弹琴
前端点滴知识前端汇总
0.前端自动化(Workflow)前端构建工具Webpack-modulebundlerYeoman-asetoftoolsforautomatingdevelopmentworkflowgulp-Thestreamingbuildsystemuse-gulpgrunt-theJavaScriptTaskRunnerF.I.S-前端集成解决方案WebStarterKit-一个Google提供的帮助
- SGLang:开源LLM加速引擎的新突破
步子哥
AGI通用人工智能人工智能
在人工智能的浪潮中,大型语言模型(LLM)的应用如雨后春笋般涌现。然而,这些模型的服务效率一直是一个棘手的问题。今天,让我们来探讨一下LMSYS.org团队开发的SGLangRuntime(SRT),这个令人兴奋的开源项目正在为LLM服务带来革命性的变化。引言:为什么我们需要更快的LLM服务?想象一下,你正在使用一个AI聊天机器人,等待它的回复就像是在等待一个慢吞吞的老旧电脑启动。烦人,对吧?这就
- 前端性能优化最佳实践和详细步骤
山川异域,代码同享
前端性能优化
前端网页优化方案旨在提高网页加载速度、提升用户体验、降低服务器压力,并有利于搜索引擎优化(SEO)。以下是一份详尽的前端网页优化方案及实施步骤:**1.**代码优化与压缩步骤:清理HTML:移除不必要的空白字符、注释和冗余标签。优化CSS:精简样式表,避免使用冗余或过时的属性,合理组织选择器以减少计算复杂度。压缩CSS、JS和HTML:使用工具(如Gulp、Webpack、Grunt)或在线服务对
- Unity3D引擎核心架构与设计哲学深度解析
晴空了无痕
引擎架构架构
——从模块化设计到运行时机制的全景透视一、Unity引擎的模块化架构设计1.1分层架构模型Unity采用经典的C++核心层+C#脚本层双栈架构:┌──────────────────────────────┐│EditorTools(C#/IMGUI)│├──────────────────────────────┤│ScriptingRuntime(Mono/IL2CPP)│├─────────
- 关于grunt
timelessmemoryli
gruntGrunt
Grunt中文网:http://www.gruntjs.net/getting-started其它参考:http://www.2cto.com/kf/201407/314975.html说明,大多数命令是在项目根目录运行1.安装node环境,因为grunt基于nodejs2.安装grunt-cli,npminstall-ggrunt-cli3.在根目录新建package.json,{"name":
- 红宝书第三十八讲:新手也能懂的构建自动化:Grunt vs Gulp
前端javascript
红宝书第三十八讲:新手也能懂的构建自动化:GruntvsGulp资料取自《JavaScript高级程序设计(第5版)》。查看总目录:红宝书学习大纲一、构建自动化是什么?将重复的开发任务自动执行,比如压缩代码、编译SASS等。类似于工厂的流水线,代码从开发到上线自动加工1。flowchartLR原始代码-->压缩JS-->编译SASS-->打包文件-->成品代码二、Grunt:配置驱动的老牌工具23
- Getting started with yoeman
zltion
TheYeomanworkflowiscomprisedofthreecoretoolsforimprovingyourproductivityandsatisfactionwhenbuildingawebapp.Thesetoolsare:yo-thescaffoldingtoolfromYeomanbower-thepackagemanagementtoolgrunt-thebuildtool
- A valid Gruntfile could not be found. Please see the getting started guide for more information on h
Shine_180418
前端开发笔记
报错:AvalidGruntfilecouldnotbefound.Pleaseseethegettingstartedguideformoreinformationonhowtoconfiguregrunt:http://gruntjs.com/getting-startedFatalerror:UnabletofindGruntfile.解决办法:在当前目录下添加一个Gruntfile.js文
- Getting started with gulp
aigouzz
前端node.js
StepasideGrunt,there'sanewtaskrunnerintown.Gulpisanintuitive,code-over-configuration,streamingbuildsystem.It'sfast.WhyshouldIbeinterested?Goodquestion.Gulp’scode-over-configurationmakesitnotonlyeasyto
- Android com.facebook.react:react-native:+ 版本问题
小铁-Android
reactnativeandroid
Executionfailedfortask':app:desugarBetaDebugAndroidTestFileDependencies'.>Couldnotresolveallfilesforconfiguration':app:betaDebugRuntimeClasspath'.>Failedtotransformreact-native-0.71.0-rc.0-debug.aar(c
- 前端工具链:Gulp和Grunt有什么区别?如何使用它们进行自动化构建?
破碎的天堂鸟
学习教程前端gulp自动化
Gulp和Grunt是前端开发中常用的自动化构建工具,它们都基于Node.js,但它们在设计理念、使用方式和性能表现上存在显著差异。以下将详细说明它们的区别以及如何使用它们进行自动化构建。Gulp与Grunt的区别1.设计理念Grunt:基于配置(Configuration-based)。Grunt通过定义任务配置文件(如Gruntfile.js)来完成任务,强调的是“配置优于代码”,即通过配置文
- 前端webpack 高薪企业必备面试真题16道 ---带答案(9)(20220415)
一染星辰
企业真实面试题前端webpack
目录1、什么是webpack(必会)2、webpack的优点是什么?(必会)3、webpack的构建流程是什么?从读取配置到输出文件这个过程尽量说全(必会)4、webpack与grunt、gulp的不同?(必会)1、三者之间的区别2、构建思路的区别3、从知识背景区别5、有哪些常见的Loader?他们是解决什么问题的?(必会)6、Loader和Plugin的不同?(必会)1、不同的作用2、不同的用法
- 前端主流构建工具
本文首发博客网站,由于图片和格式解析问题,可前往阅读原文随着前端开发复杂度的提升,构建工具在开发流程中扮演着越来越重要的角色。这些工具可以帮助开发者实现代码的打包、优化、转译、模块化处理等功能,从而提升开发效率和用户体验。本文将以当前主流的前端构建工具为核心,介绍它们的特点、适用场景及差异构建工具GruntGrunt是较早期的任务运行工具,主要通过任务(tasks)系统自动化完成前端开发的各种操作
- webpack与grunt、gulp的不同?
__爱吃香菜
前端webpackgulp前端
Grunt、Gulp是基于任务运行的工具:它们会自动执行指定的任务,就像流水线,把资源放上去然后通过不同插件进行加工,它们包含活跃的社区,丰富的插件,能方便的打造各种工作流。Webpack:是基于模块化打包的工具:自动化处理模块,webpack把一切当成模块,当webpack处理应用程序时,它会递归地构建一个依赖关系图,其中包含应用程序需要的每个模块,然后将所有的模块打包成一个或者多个bundle
- 介绍gruntwork模块服务和体系结构目录
weixin_26755331
pythonlinuxjava
Today,I’mexcitedtorevealthenewdesignoftheGruntworkInfrastructureasCodeLibrary(IaCLibrary):今天,我很高兴地将Gruntwork基础结构的新设计作为代码库(IaC库)予以揭示:TheGruntworkModuleCatalogBuildyourinfrastructurebymixing&matchinghun
- 深入思考:技术生态的繁荣与开发者的选择
艾米栗写代码
前端
作为一名前端开发者,我们是一直被两类问题困惑着的:1、技术生态中“轮子迭代”与“原理理解”的矛盾,2、业务开发与技术深度的平衡问题。这些问题本质上是开发者在不同阶段必然面临的挑战。我们可以从以下几个角度进一步探讨:一、为什么“轮子”永远在迭代?1.技术演进的必然性场景细化:早期工具(如Grunt、Gulp)解决的是通用构建问题,但随着前端复杂度提升,出现了更垂直的解决方案(如Vite专攻开发体验、
- 前端构建工具
arguments_zd
杂谈前端前端框架
一、什么是前端构建工具?前端构建工具就是在项目开发及编译阶段帮助我们完成那些需要反复重复的任务,比如代码压缩、编译等工作,构建工具能够大大提高我们的开发效率。常用构建工具:grunt(JavaScript世界的构建工具)、gulp(用自动化构建工具增强你的工作流程)、webpack(专注于构建模块化项目)、yeoman(强健的工具,库,及工作流程的组合)二、为什么需要构建工具?模块规范化产生,不同
- JavaScript 混淆工具 js-obfuscator 项目常见问题解决方案
傅爽业Veleda
JavaScript混淆工具js-obfuscator项目常见问题解决方案js-obfuscatorObfuscateJavaScriptfilesviahttp://javascriptobfuscator.com.ThisisalsoaGruntplugin.Informmeifthisplugindoesn'twork.项目地址:https://gitcode.com/gh_mirrors/
- Webpack | vite | Rollup | Gulp | Grunt 比较
前端阿彬
前端实用知识学习webpackgulp前端vite打包工具
前言模块化管理工具和自动化构建工具是不同的。两者主要体现在侧重点不一样。自动化构建工具侧重于前端开发的整个过程的控制管理(像是流水线)。而模块化管理工具更侧重于模块打包,当然我们可以把开发中的所有资源(图片、js文件、css文件等)都可以看成模块。Webpackwebpack可以说是当前最流行的模块化管理工具和打包工具。其通过loader的转换,可以将任何形式的资源视作模块。它还可以将各个模块通过
- mysql同步es
weixin_33824363
数据库大数据java
搭建测试环境,低版本es:下载elasticsearch2.3.3安装包。下载地址:download.elastic.co/elasticsear…安装elasticsearch-head插件,下载地址:github.com/mobz/elasti…插件安装head插件:brewinstallnodenpminstallgrunt--save-devnpminstallgrunt-contrib-
- 【Node.js 常用命令(第五篇)】揭秘Node.js:掌握这些常用命令,让你在开发路上风生水起!
雷神 Leo
经验分享类#前端后端node.js
目录前言30条常用的Node.js的命令(第1~120条在上一篇)121.gulp-流式自动化构建系统122.grunt-经典的任务运行器123.webpack-merge-合并Webpack配置124.node-gyp-Node.js原生扩展编译器125.socket.io-实时应用框架126.mongoose-MongoDB对象建模工具127.helmet-提升Express应用安全性128.
- 前端框架
苏金标
前端基础
前端组件库搭建webapp常用的样式/组件等收集列表(移动优先)0.前端自动化(Workflow)前端构建工具Yeoman–asetoftoolsforautomatingdevelopmentworkflowgulp–Thestreamingbuildsystemgrunt–theJavaScriptTaskRunnerF.I.S–前端集成解决方案前端模块管理器Bower–Apackageman
- windows 10安装elasticsearch-head-master
fyihdg
大数据
目录1.下载安装包2.安装依赖2.1安装node2.2安装grunt3.安装head1.下载安装包es环境是在这个链接安装的:CentOS7.9安装elasticsearch-8.3.1、kibana-8.3.1和window10安装elasticsearch-8.3.1、kibana-8.3.1_fyihdg的博客-CSDN博客CentOS7.9安装elasticsearch-8.3.1、kib
- PHP,安卓,UI,java,linux视频教程合集
cocos2d-x小菜
javaUIPHPandroidlinux
╔-----------------------------------╗┆
- 各表中的列名必须唯一。在表 'dbo.XXX' 中多次指定了列名 'XXX'。
bozch
.net.net mvc
在.net mvc5中,在执行某一操作的时候,出现了如下错误:
各表中的列名必须唯一。在表 'dbo.XXX' 中多次指定了列名 'XXX'。
经查询当前的操作与错误内容无关,经过对错误信息的排查发现,事故出现在数据库迁移上。
回想过去: 在迁移之前已经对数据库进行了添加字段操作,再次进行迁移插入XXX字段的时候,就会提示如上错误。
&
- Java 对象大小的计算
e200702084
java
Java对象的大小
如何计算一个对象的大小呢?
 
- Mybatis Spring
171815164
mybatis
ApplicationContext ac = new ClassPathXmlApplicationContext("applicationContext.xml");
CustomerService userService = (CustomerService) ac.getBean("customerService");
Customer cust
- JVM 不稳定参数
g21121
jvm
-XX 参数被称为不稳定参数,之所以这么叫是因为此类参数的设置很容易引起JVM 性能上的差异,使JVM 存在极大的不稳定性。当然这是在非合理设置的前提下,如果此类参数设置合理讲大大提高JVM 的性能及稳定性。 可以说“不稳定参数”
- 用户自动登录网站
永夜-极光
用户
1.目标:实现用户登录后,再次登录就自动登录,无需用户名和密码
2.思路:将用户的信息保存为cookie
每次用户访问网站,通过filter拦截所有请求,在filter中读取所有的cookie,如果找到了保存登录信息的cookie,那么在cookie中读取登录信息,然后直接
- centos7 安装后失去win7的引导记录
程序员是怎么炼成的
操作系统
1.使用root身份(必须)打开 /boot/grub2/grub.cfg 2.找到 ### BEGIN /etc/grub.d/30_os-prober ### 在后面添加 menuentry "Windows 7 (loader) (on /dev/sda1)" { 
- Oracle 10g 官方中文安装帮助文档以及Oracle官方中文教程文档下载
aijuans
oracle
Oracle 10g 官方中文安装帮助文档下载:http://download.csdn.net/tag/Oracle%E4%B8%AD%E6%96%87API%EF%BC%8COracle%E4%B8%AD%E6%96%87%E6%96%87%E6%A1%A3%EF%BC%8Coracle%E5%AD%A6%E4%B9%A0%E6%96%87%E6%A1%A3 Oracle 10g 官方中文教程
- JavaEE开源快速开发平台G4Studio_V3.2发布了
無為子
AOPoraclemysqljavaeeG4Studio
我非常高兴地宣布,今天我们最新的JavaEE开源快速开发平台G4Studio_V3.2版本已经正式发布。大家可以通过如下地址下载。
访问G4Studio网站
http://www.g4it.org
G4Studio_V3.2版本变更日志
功能新增
(1).新增了系统右下角滑出提示窗口功能。
(2).新增了文件资源的Zip压缩和解压缩
- Oracle常用的单行函数应用技巧总结
百合不是茶
日期函数转换函数(核心)数字函数通用函数(核心)字符函数
单行函数; 字符函数,数字函数,日期函数,转换函数(核心),通用函数(核心)
一:字符函数:
.UPPER(字符串) 将字符串转为大写
.LOWER (字符串) 将字符串转为小写
.INITCAP(字符串) 将首字母大写
.LENGTH (字符串) 字符串的长度
.REPLACE(字符串,'A','_') 将字符串字符A转换成_
- Mockito异常测试实例
bijian1013
java单元测试mockito
Mockito异常测试实例:
package com.bijian.study;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.when;
import org.junit.Assert;
import org.junit.Test;
import org.mockito.
- GA与量子恒道统计
Bill_chen
JavaScript浏览器百度Google防火墙
前一阵子,统计**网址时,Google Analytics(GA) 和量子恒道统计(也称量子统计),数据有较大的偏差,仔细找相关资料研究了下,总结如下:
为何GA和量子网站统计(量子统计前身为雅虎统计)结果不同?
首先:没有一种网站统计工具能保证百分之百的准确出现该问题可能有以下几个原因:(1)不同的统计分析系统的算法机制不同;(2)统计代码放置的位置和前后
- 【Linux命令三】Top命令
bit1129
linux命令
Linux的Top命令类似于Windows的任务管理器,可以查看当前系统的运行情况,包括CPU、内存的使用情况等。如下是一个Top命令的执行结果:
top - 21:22:04 up 1 day, 23:49, 1 user, load average: 1.10, 1.66, 1.99
Tasks: 202 total, 4 running, 198 sl
- spring四种依赖注入方式
白糖_
spring
平常的java开发中,程序员在某个类中需要依赖其它类的方法,则通常是new一个依赖类再调用类实例的方法,这种开发存在的问题是new的类实例不好统一管理,spring提出了依赖注入的思想,即依赖类不由程序员实例化,而是通过spring容器帮我们new指定实例并且将实例注入到需要该对象的类中。依赖注入的另一种说法是“控制反转”,通俗的理解是:平常我们new一个实例,这个实例的控制权是我
- angular.injector
boyitech
AngularJSAngularJS API
angular.injector
描述: 创建一个injector对象, 调用injector对象的方法可以获得angular的service, 或者用来做依赖注入. 使用方法: angular.injector(modules, [strictDi]) 参数详解: Param Type Details mod
- java-同步访问一个数组Integer[10],生产者不断地往数组放入整数1000,数组满时等待;消费者不断地将数组里面的数置零,数组空时等待
bylijinnan
Integer
public class PC {
/**
* 题目:生产者-消费者。
* 同步访问一个数组Integer[10],生产者不断地往数组放入整数1000,数组满时等待;消费者不断地将数组里面的数置零,数组空时等待。
*/
private static final Integer[] val=new Integer[10];
private static
- 使用Struts2.2.1配置
Chen.H
apachespringWebxmlstruts
Struts2.2.1 需要如下 jar包: commons-fileupload-1.2.1.jar commons-io-1.3.2.jar commons-logging-1.0.4.jar freemarker-2.3.16.jar javassist-3.7.ga.jar ognl-3.0.jar spring.jar
struts2-core-2.2.1.jar struts2-sp
- [职业与教育]青春之歌
comsci
教育
每个人都有自己的青春之歌............但是我要说的却不是青春...
大家如果在自己的职业生涯没有给自己以后创业留一点点机会,仅仅凭学历和人脉关系,是难以在竞争激烈的市场中生存下去的....
&nbs
- oracle连接(join)中使用using关键字
daizj
JOINoraclesqlusing
在oracle连接(join)中使用using关键字
34. View the Exhibit and examine the structure of the ORDERS and ORDER_ITEMS tables.
Evaluate the following SQL statement:
SELECT oi.order_id, product_id, order_date
FRO
- NIO示例
daysinsun
nio
NIO服务端代码:
public class NIOServer {
private Selector selector;
public void startServer(int port) throws IOException {
ServerSocketChannel serverChannel = ServerSocketChannel.open(
- C语言学习homework1
dcj3sjt126com
chomework
0、 课堂练习做完
1、使用sizeof计算出你所知道的所有的类型占用的空间。
int x;
sizeof(x);
sizeof(int);
# include <stdio.h>
int main(void)
{
int x1;
char x2;
double x3;
float x4;
printf(&quo
- select in order by , mysql排序
dcj3sjt126com
mysql
If i select like this:
SELECT id FROM users WHERE id IN(3,4,8,1);
This by default will select users in this order
1,3,4,8,
I would like to select them in the same order that i put IN() values so:
- 页面校验-新建项目
fanxiaolong
页面校验
$(document).ready(
function() {
var flag = true;
$('#changeform').submit(function() {
var projectScValNull = true;
var s ="";
var parent_id = $("#parent_id").v
- Ehcache(02)——ehcache.xml简介
234390216
ehcacheehcache.xml简介
ehcache.xml简介
ehcache.xml文件是用来定义Ehcache的配置信息的,更准确的来说它是定义CacheManager的配置信息的。根据之前我们在《Ehcache简介》一文中对CacheManager的介绍我们知道一切Ehcache的应用都是从CacheManager开始的。在不指定配置信
- junit 4.11中三个新功能
jackyrong
java
junit 4.11中两个新增的功能,首先是注解中可以参数化,比如
import static org.junit.Assert.assertEquals;
import java.util.Arrays;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runn
- 国外程序员爱用苹果Mac电脑的10大理由
php教程分享
windowsPHPunixMicrosoftperl
Mac 在国外很受欢迎,尤其是在 设计/web开发/IT 人员圈子里。普通用户喜欢 Mac 可以理解,毕竟 Mac 设计美观,简单好用,没有病毒。那么为什么专业人士也对 Mac 情有独钟呢?从个人使用经验来看我想有下面几个原因:
1、Mac OS X 是基于 Unix 的
这一点太重要了,尤其是对开发人员,至少对于我来说很重要,这意味着Unix 下一堆好用的工具都可以随手捡到。如果你是个 wi
- 位运算、异或的实际应用
wenjinglian
位运算
一. 位操作基础,用一张表描述位操作符的应用规则并详细解释。
二. 常用位操作小技巧,有判断奇偶、交换两数、变换符号、求绝对值。
三. 位操作与空间压缩,针对筛素数进行空间压缩。
&n
- weblogic部署项目出现的一些问题(持续补充中……)
Everyday都不同
weblogic部署失败
好吧,weblogic的问题确实……
问题一:
org.springframework.beans.factory.BeanDefinitionStoreException: Failed to read candidate component class: URL [zip:E:/weblogic/user_projects/domains/base_domain/serve
- tomcat7性能调优(01)
toknowme
tomcat7
Tomcat优化: 1、最大连接数最大线程等设置
<Connector port="8082" protocol="HTTP/1.1"
useBodyEncodingForURI="t
- PO VO DAO DTO BO TO概念与区别
xp9802
javaDAO设计模式bean领域模型
O/R Mapping 是 Object Relational Mapping(对象关系映射)的缩写。通俗点讲,就是将对象与关系数据库绑定,用对象来表示关系数据。在O/R Mapping的世界里,有两个基本的也是重要的东东需要了解,即VO,PO。
它们的关系应该是相互独立的,一个VO可以只是PO的部分,也可以是多个PO构成,同样也可以等同于一个PO(指的是他们的属性)。这样,PO独立出来,数据持