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?
我 运行 遇到了一个奇怪的问题,页面呈现在移动设备上可以正常工作,但当 WiFi 断开连接时,图像就不再加载。我对此感到困惑,尽管不可否认我不太熟悉 SSR/CR 最佳实践。
我什至安装了 nuxt-user-agent
代理试图减少加载的一些不必要的资源,因为我怀疑这是一种减少数据使用的移动设备机制。
现在我开始怀疑 mouseover/hover 输出的 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 {
ssr: 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 暂时关闭.. 我认为)。显然这不是完整的生产版本,security/hardening 很快就会出现。您可以看到我尝试为 Strapi public 上传创建代理,但最终失败了,只是最终使用了本地主机上的图像。
如果有人想看看一些调试工具:tinyurl。com/erzbh9m
此外,我对任何提出更好实践建议的人持开放态度,实际上非常感谢,因为哦,伙计,自从 webdev 以来已经有很多年了,情况发生了很大变化。
感谢@Michal Levý 指出 none 的图像是在桌面浏览器上为他加载的。
我觉得自己很蠢。
修复了 Nginx 反向代理配置的一些问题,一些中间件配置的问题,并将 ENV 设置为生产环境,并在某些地方修复了问题。真让人头疼。
我 运行 遇到了一个奇怪的问题,页面呈现在移动设备上可以正常工作,但当 WiFi 断开连接时,图像就不再加载。我对此感到困惑,尽管不可否认我不太熟悉 SSR/CR 最佳实践。
我什至安装了 nuxt-user-agent
代理试图减少加载的一些不必要的资源,因为我怀疑这是一种减少数据使用的移动设备机制。
现在我开始怀疑 mouseover/hover 输出的 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 {
ssr: 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 暂时关闭.. 我认为)。显然这不是完整的生产版本,security/hardening 很快就会出现。您可以看到我尝试为 Strapi public 上传创建代理,但最终失败了,只是最终使用了本地主机上的图像。
如果有人想看看一些调试工具:tinyurl。com/erzbh9m
此外,我对任何提出更好实践建议的人持开放态度,实际上非常感谢,因为哦,伙计,自从 webdev 以来已经有很多年了,情况发生了很大变化。
感谢@Michal Levý 指出 none 的图像是在桌面浏览器上为他加载的。
我觉得自己很蠢。
修复了 Nginx 反向代理配置的一些问题,一些中间件配置的问题,并将 ENV 设置为生产环境,并在某些地方修复了问题。真让人头疼。