mip-project / mip

MIT License
11 stars 1 forks source link

我认为目前存在的问题。。。 #1

Open xiaoiver opened 6 years ago

xiaoiver commented 6 years ago

我昨天想了一下,相比 mip 1.0 我们无法修改的:

开发方式。这里也分开发页面 和 开发组件两种情况

开发页面

首先是开发页面。这一点已经和 Vue Polymer 这些前端框架不同了,写 Vue 的时候根本不用关心 HTML 模板,留一个空的挂载点就行了,都是 JS 生成的嘛,开发页面 = 开发组件。

而开发 mip 页面的时候,由于要求使用 mip 标准化标签,所以开发者必须在他自己的后端模板上直接开发。 比如你让他用像 Vue 一样的单文件方式组织?本来站长就有他自己的后端模板需要维护,现在开发的时候又多了这么多模板片段,而且他自己后端模板逻辑还有可能混在里面。

<template>
    <% php...
    <div>
</template>
<script>
</script>

所以对站长来说,开发页面 = 开发后端模板,只能在 HTML 文件里直接堆砌 mip 标签,这个方式是没法改的。 不用想着提供开发页面时的调试环境之类的了,不现实。

开发组件

再说开发组件,mip 1.0 里大量 DOM API,想改成数据驱动? mip 1.0 已经有数据绑定了。要想数据驱动,先得有数据。。。而数据是在站长那儿的,必须要求直接输出到页面上。 比如这是 mip-data 的用法,这是抄 amp 的,但是 amp 还支持异步获取数据:

<mip-data>
  <script type="application/json">
    站长自己的模板语法:
    <% php.....
    输出数据:
      {
          "price": 20,
          "count": 2
      }
  </script>
</mip-data>
<div m-text="price"></div>
<button on="tap:MIP.setData({price:'30'})">30</button>

语法非常奇怪是哇(amp 也是这样),而且这是在 HTML 模板里,不能写 JS,所以你所有的事件处理逻辑都只能挤在 <button on=""> 里面,不能写方法名。 所以我觉得,最多就修改下绑定语法,更贴近 Vue:

<mip-data>
  <script type="application/json">
  ...
  </script>
</mip-data>
<div>{{price}}</div>
<button @click="price=30" />
</script>

最后是我认为目前存在最关键的一个问题,大家可以看看是不是这么回事。

组件由开发者开发?

为啥 amp 没有自定义组件?开发者只要使用已有组件就够了?

为啥 amp 只要提供一个 amp-list 就行? 而 mip-list 连数据接口字段名都要规定?导致 mip-taobao-list mip-jd-list。。。。

所以我觉得,在 amp/mip 这种开发页面的模式下,根本就不应该让用户自定义组件。 我们要做的,是像 amp 一样,提供优秀的组件。最多优化一下开发者使用我们提供组件的语法。

easonyq commented 6 years ago

所以我觉得,在 amp/mip 这种开发页面的模式下,根本就不应该让用户自定义组件。 我们要做的,是像 amp 一样,提供优秀的组件。最多优化一下开发者使用我们提供组件的语法。

我比较同意这一点。

现在的 MIP 组件没有模板文件,所以在 JS 中频繁操作 DOM,或修改或 createElement。此外 <mip-list> 还要求接口返回特定名称的数据,也是不合理的。

如果我们能够为现有的组件提供模板,一来减少 DOM 操作,至少 createElement 可以去掉,也避免 HTML 写在字符串里面;其次模板中的变量名是开发者自己提供的,那么可以实现不修改接口就能直接使用,毕竟如果接口不受控,再多加一层后端来转接口变量名,既影响效率,更影响代码美观。

当然现有的第一方案:组件改数据绑定并且全部重写,也还可以。既然决定了,就做完看效果吧。

PengXing commented 6 years ago

这个如会上所说,还是取决于我们对于MIP 2.0 的定位,在 2.0 中,我们定义 MIP(Mobile Instant Page) => MIA(Mobile Instant Application),打造的是全站的体验

如果我们明确了目标是全站的体验,那么我们提供的通用组件并不能满足所有开发者的需求,所以,我们在做到 MIP 组件速度、性能、体验和安全可控的基础上,开放自定义组件

只是提供一级模板和数据绑定还是不够的,只能完成比较简单的需求