Nuxt / Vue JS 页面在桌面和连接 WiFi 的移动设备上渲染良好,但在 4G/5G 设备上却不行。知道如何解决这个问题吗?

Posted

技术标签:

【中文标题】Nuxt / Vue JS 页面在桌面和连接 WiFi 的移动设备上渲染良好,但在 4G/5G 设备上却不行。知道如何解决这个问题吗?【英文标题】:Nuxt / VueJS Page Rendering Fine on Desktop & WiFi-connected Mobile Devices, but not on devices on 4G/5G. Any idea how to fix this? 【发布时间】:2021-12-07 06:16:49 【问题描述】:

我遇到了一个奇怪的问题,页面渲染可以在移动设备上运行,但是当 WiFi 断开连接时,图像不再加载。我对此感到困惑,尽管我承认我不太熟悉 s-s-r/CR 最佳实践。

我什至安装了nuxt-user-agent 代理,试图减少加载的一些不必要的资源,因为我怀疑这是一种减少数据使用的移动设备机制。

现在我开始怀疑鼠标悬停/悬停的 javascript 注入是否在其中发挥了作用——但这并不能解释为什么它可以在连接到 WiFi 的设备上工作。

感谢您的所有帮助。相关代码:

组件:

    <vue-masonry-wall :items="projects" :options="options">

      <template v-slot:default="item">
        <div  v-if="$ua.isFromPc()" class="item cursor-pointer" v-on:click="changepage(item.url)">
          <img :src="item.image" @mouseover="item.image = item.hoverimg" @mouseout="item.image = item.originalimg" style="width:100%;"/>
        </div>
        <div v-else>
            <img :src="item.image" style="width:100%;" v-on:click="changepage(item.url)"/>
        </div>
      </template>
    </vue-masonry-wall>

数据:

    data() 
      return 
        projects: [
            url: '/app/#/video/1/', image: 'foo1.jpg', hoverimg: 'foo1.webp', originalimg: 'foo1.jpg' ,
            url: '/app/#/video/2/', image: 'foo2.jpg', hoverimg: 'foo2.webp', originalimg: 'foo2.jpg' ,
            url: '/app/#/video/3/', image: 'bar1.jpg', hoverimg: 'bar1.webp', originalimg: 'bar1.jpg' ,
            
            ...
        
            ]

已安装:

    async mounted () 
        this.$nextTick(() => 
            this.projects = this.projects
        )

Nuxt 配置(留在我认为可能相关的部分):

export default 
  s-s-r: false,
  router: 
    base: './',
    mode: 'hash'
  ,
  target: 'static',
  head: 
    meta: [
        charset: 'utf-8'
      ,
      
        name: 'viewport',
        content: 'width=device-width, initial-scale=1'
      ,
      
        hid: 'description',
        name: 'description',
        content: ''
      ,
      
        name: 'format-detection',
        content: 'telephone=no'
      
    ],

  ,

  plugins: [
    '~/plugins/vue-tooltips.js',
    '~/plugins/vue-masonry-wall.js',
    '~/plugins/vue-skeleton-loader.js'
  ],

  components: true,

  buildModules: [
    '@nuxtjs/tailwindcss',
  ],

  modules: [
    // https://go.nuxtjs.dev/axios
    '@nuxtjs/axios',
    '@nuxtjs/strapi',
    '@nuxtjs/markdownit',
    'nuxt-user-agent',
    ['@nuxtjs/proxy', 
      ws: false
    ]
  ],

  strapi: 
    entities: ['categories', 'projects', 'uploads'],
    url: 'theurlishere'
  

  build: 
    publicPath: 'https://mydomain.tld/app',
    postcss: 
      plugins: 
        'postcss-custom-properties': false
      
    
  

需要注意的一点 - 图像文件是从具有不同域的不同服务器中提取的(因此 CORS 目前已关闭。我认为)。显然这不是一个完整的生产版本,安全/强化很快就会到来。你可以看到我尝试为 Strapi 公共上传创建代理,但最终失败了,只是最终使用了 localhost 上的图像。

如果有人想了解一些调试工具:tinyurl.com/erzbh9m

另外,我很开放,实际上非常感谢任何提出更好做法的人,因为哦,伙计,自从 webdev 和景观发生了很大变化已经好几年了。

【问题讨论】:

如果我打开你分享的链接,我可以看到即使在桌面 Firefox 上也没有任何图像(从 api 加载)加载 啊!抱歉,我将假设它是 Strapi 的身份验证错误。让我尽快解决这个问题。 @MichalLevý 好吧,这很奇怪。很确定我向公众开放了上传/响应图像插件的身份验证,但我在 *** 浏览器上得到了 404。不过,在我的桌面上仍然可以 100% 正常工作。让我尝试调试一下,对此感到抱歉。 好吧,看起来我在 nginx 或 Strapi 端有一些严重的错误配置。 public/uploads 中的经过身份验证的用户肯定可以访问文件,但我现在正在努力弄清楚为什么未经身份验证的用户无法访问它——此外,我认为返回 404 错误很奇怪401 或至少 500 错误。 【参考方案1】:

感谢@Michal Levý 指出桌面浏览器上没有为他加载任何图像。

我觉得自己很蠢。

修复了 Nginx 反向代理配置的一些问题,一些中间件配置,以及将 ENV 设置为生产环境,以及在修复过程中的某个地方。真是头疼。

【讨论】:

如果可以,请随时接受这个答案!

以上是关于Nuxt / Vue JS 页面在桌面和连接 WiFi 的移动设备上渲染良好,但在 4G/5G 设备上却不行。知道如何解决这个问题吗?的主要内容,如果未能解决你的问题,请参考以下文章

(Nuxt.js/Vue.js) - 脚本只运行一次,更改路由/刷新页面后停止运行

nuxt - nuxtServerInit & 页面渲染前的store处理 & context

JS——Nuxt 基础知识

如何在 Vue.js/Nuxt.js 中为 RepositoryFactory 编写测试

使用 Nuxt/Vue.js 划桨

Nuxt.Js 将父页面重定向到索引