Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/271.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 我的html标记应该在客户端生成吗?_Php_Javascript_Jquery_Performance - Fatal编程技术网

Php 我的html标记应该在客户端生成吗?

Php 我的html标记应该在客户端生成吗?,php,javascript,jquery,performance,Php,Javascript,Jquery,Performance,我有一些服务器端代码,它输出一个项目的,用户可以编辑这些项目并将更改发布回服务器。我现在正在开发一个“添加新”功能,它向添加一个新项目,并在单击“保存更改”按钮时将其发回服务器 当用户单击“添加新”按钮时,我执行附加标记的客户端代码(与我的服务器端代码生成的标记相同) 让我烦恼的是裁员。这意味着,如果我要更改标记,我必须同时打开php和js文件才能进行更改 为了消除冗余,我是否应该只从服务器输出数据,让客户端代码生成标记?像这样的概念对性能的影响是什么?理论上,您可以毫无问题地添加新的。但是,对

我有一些服务器端代码,它输出一个项目的
,用户可以编辑这些项目并将更改发布回服务器。我现在正在开发一个“添加新”功能,它向
添加一个新项目,并在单击“保存更改”按钮时将其发回服务器

当用户单击“添加新”按钮时,我执行附加
  • 标记的客户端代码(与我的服务器端代码生成的标记相同)

    让我烦恼的是裁员。这意味着,如果我要更改
  • 标记,我必须同时打开php和js文件才能进行更改


    为了消除冗余,我是否应该只从服务器输出
    数据,让客户端代码生成标记?像这样的概念对性能的影响是什么?

    理论上,您可以毫无问题地添加新的
  • 。但是,对于大多数使用,您会希望服务器保存主副本,从而为每个更新重新提供整个


    如果您使用的是
    .ajax()
    ,这将是一个几乎无法测量的加载时间差异。

    让我建议第三种方法:复制现有元素,并根据需要更改其属性和/或内容

    jQuery有
    .clone()
    ,但也可以使用普通DOM或任何其他库来完成


    这样,您就不会增加不必要的延迟,并且可以使客户端代码相对独立于您可能必须进行的任何标记更改。这意味着,如果您添加或更改任何与JS需要执行的操作无关的标记(例如添加
    class=”“
    或内部
    ),并且您的JS具有足够的通用性(例如获取要克隆的元素以及要从属性编辑其文本的元素)然后您就不需要更新它了。

    您可以使用JQuery
    .clone()
    方法进行混合

    您的后端代码在创建初始代码时可以生成
  • 元素的结构,然后,如果用户想要添加新的
  • ,您可以抓住现有的元素作为模板,
    .clone()
    它,使用来自用户的新数据更新克隆的值,然后将其附加到

    唯一的问题是页面加载中可能没有任何
  • 元素,因此
    .clone()
    调用将没有任何可引用的内容。但是,如果这是一个问题,有一些方法可以解决(例如,您想要使用的
  • 格式的JS
    字符串
    模板,可以这样使用:
    var newLI=$(liTemplateString)
    。同样,此模板可以由后端上的相同代码创建,该代码将在页面加载时创建实际的
  • 元素……它也将创建一个JS变量

    除此之外,这将允许您立即将
  • 更新到页面,然后使用Ajax将更新发送到后端,以更新“主”版本,而无需用户等待该过程


    最后,我个人的偏好是让后端尽可能多地进行处理,只有您的客户端代码来处理后端无法完成的事情,因此如果后端在创建页面时能够完成,我会避免转储数据,让前端处理创建列表。

    我喜欢这个答案!哟你提出了一个关于可能的空列表的重要观点。模板字符串非常适合这种情况。非常感谢!LOL…没问题。很乐意帮忙。:)