V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX  ›  ahhtree  ›  全部回复第 1 页 / 共 14 页
回复总数  270
1  2  3  4  5  6  7  8  9  10 ... 14  
128 天前
回复了 ahhtree 创建的主题 职场话题 后端老鸟耍不要脸
@bkdlee 我一开始也没有要求什么统一返回值,结果他接口状态码字段都用的不一样的,害我改整个项目代码(也怪我一开始没统一封装请求); leader 满脑子上线,不给时间; 关于您回复中的第三点,能否说下原因??
128 天前
回复了 ahhtree 创建的主题 职场话题 后端老鸟耍不要脸
@kuituosi 我现在做的事情就是努力让我的能力跟上我的野心。而现实需要一步一步来,我需要解决这个问题。
128 天前
回复了 ahhtree 创建的主题 职场话题 后端老鸟耍不要脸
@0xsui 组织架构确实是根本问题
128 天前
回复了 ahhtree 创建的主题 职场话题 后端老鸟耍不要脸
@0xsui 实际业务需求是:一张表中 1000 万多的数据,每次查询需要扫描全表逐个计算过滤,拿到通过的数据,按结果排序后,前端分页展示。
128 天前
回复了 ahhtree 创建的主题 职场话题 后端老鸟耍不要脸
@lrh3321

这家公司组织结构不完善是导致现在问题的根本;

我认定工作本来就是为了简历;

之所以放在应用层是因为那个计算函数最初放在了数据库里面,是一个数据库函数。

他不会节省数据库资源,因为数据库缓存 已经因为查询慢而调大了,但还是慢。

利用缓存这个方案他后来也提出过,但就是不用。

他是出于维护成本高才不用?我觉得不是,以下两点纯属我个人臆测。

第一,如果他用了说明我的方案一开始方向就是对的,他面子挂不住;

第二,他太懒了,连个 token 错误的校验都不写,他会做架构升级?
128 天前
回复了 ahhtree 创建的主题 职场话题 后端老鸟耍不要脸
@kkwa56188 我只向 leader 提出了我的方案,具体谁来实现取决于 leader 。 我可以独自实现、也可以作为协助者协助后端实现。

关键一点在于实现这一方案需要时间,而 leader 总认为没有那么多时间而因此要求改进现有实现,因此其实也浪费了很多时间。
128 天前
回复了 ahhtree 创建的主题 职场话题 后端老鸟耍不要脸
@happy32199 理由是什么?
128 天前
回复了 ahhtree 创建的主题 职场话题 后端老鸟耍不要脸
@ahhtree “尽管” 两个字去掉
128 天前
回复了 ahhtree 创建的主题 职场话题 后端老鸟耍不要脸
对于第二个问题:

他的解决方案:在数据库从新建一个表,这个表只有两个字段:id 和另一个用于计算的关键信息,利用 PostgreSQL 内部的数据库函数进行计算;

我的解决方案:id 和另一个关键信息放在缓存中(如 redis ),把数据库函数转换为外部程序函数,利用多线程计算。

该场景尽管需要按照计算结果 排序后 分页显示,似乎全表扫描计算是不可避免的。
我用的是那种带尼龙扣的护腕,能起到限制手腕大幅活动的作用
134 天前
回复了 ahhtree 创建的主题 程序员 status 200 empty response
@clue 额。。前端没有做日志,但是 nginx 有访问日志;对于同一个请求 nginx 有日志,后端却没有收到请求。
134 天前
回复了 ahhtree 创建的主题 程序员 status 200 empty response
@NessajCN 是的,建好了; i18n\locales\en\xxx.json i18n\locales\zh\xxx.json 文件结构类似这种
134 天前
回复了 ahhtree 创建的主题 程序员 status 200 empty response
page:

export async function generateStaticParams() {
return Languages.map((lang) => ({ lang }));
}

export default function Page({
params: { lang },
}: {
params: { lang: LanguageType };
}) {
const router = useRouter();
const [values, setValues] = useState(["", ""]);
const setContentArray = useSearchContentArrayStore(
(state) => state.setContentArray
);

const handleSearch = useCallback(() => {
setContentArray(values);
router.push(
`/${lang}/search?value1=${encodeURIComponent(
values[0]
)}&value2=${encodeURIComponent(values[1])}`
);
}, [values, router, lang, setContentArray]);

return (
<div>
{/* <Bubbles /> */}

<SearchBar
isRow={false}
values={values}
setValues={setValues}
handleSearch={handleSearch}
/>
</div>
);
}
134 天前
回复了 ahhtree 创建的主题 程序员 status 200 empty response
layout:

<code>
export async function generateStaticParams() {
return Languages.map((lang) => ({ lang }));
}

export default async function RootLayout({
children,
params: { lang },
}: {
children: React.ReactNode;
params: { lang: LanguageType };
}) {
return (
<html lang={lang.includes("zh") ? "zh-CN" : "en-US"}>
<body className={inter.className}>
<main className="relative w-full h-screen flex flex-col">
<Header lang={lang} />
{/* <ContentWrapper childNodes={children} lang={lang} /> */}
<div className="relative grow w-full flex flex-col items-center justify-center">
{children}
</div>
<Toaster />
<Footer lang={lang} />
</main>
<InitRDKit />
</body>
</html>
);
}
</code>


settings:

<code>
export type LanguageType = "en" | "zh";
export const FallbackLng: LanguageType = "en";
export const Languages: LanguageType[] = [FallbackLng, "zh"];
export const CookieLocaleName = "i18next";
export const defaultNS = "home";

export function getOptions(lng: LanguageType = FallbackLng, ns = defaultNS) {
return {
debug: process.env.NODE_ENV === "development",
supportedLngs: Languages,
fallbackLng: FallbackLng,
lng,
fallbackNS: defaultNS,
defaultNS,
ns,
};
}
</code>


i18n 服务端配置:

<code>
const initI18next = async (lng: LanguageType, ns: string) => {
const i18nInstance = createInstance({});
await i18nInstance
.use(initReactI18next)
.use(
resourcesToBackend(
(language: string, namespace: string) =>
import(`./locales/${language}/${namespace}.json`)
)
)
.init({
...getOptions(lng, ns),
detection: {
order: ["path", "htmlTag", "navigator"],
// lookupCookies: "",
cookieOptions: {
sameSite: "lax",
path: `/${lng}`,
},
lookupCookie: CookieLocaleName,
caches: ["localStorage"],
excludeCacheFor: ["cookie"],
},
});
return i18nInstance;
};

export async function serverTranslation(
lng: LanguageType,
ns: string,
options = {}
) {
const i18nextInstance = await initI18next(lng, ns);
return {
t: i18nextInstance.getFixedT(lng, Array.isArray(ns) ? ns[0] : ns),
i18n: i18nextInstance,
};
}

</code>

i18n 客户端 配置:

<code>
const runsOnServerSide = typeof window === "undefined";

const languageDetector = new LanguageDetector();
languageDetector.init({ useCookies: false });

//
i18next
.use(initReactI18next)
.use(languageDetector)
.use(
resourcesToBackend(
(language: string, namespace: string) =>
import(`./locales/${language}/${namespace}.json`)
)
)
.init({
...getOptions(),
lng: undefined, // let detect the language on client side
preload: runsOnServerSide ? Languages : [],
detection: {
order: ["path", "htmlTag", "navigator"],
// lookupCookies: "",
cookieOptions: {
sameSite: "lax",
},
caches: ['localStorage'],
},
});

export function useTranslation(
lng: string,
ns: string,
options?: UseTranslationOptions<any>
) {
const [done, setDone] = useState(false);
const [cookies, setCookie] = useCookies([CookieLocaleName]);
const ret = useTranslationOrg(ns, options);
const { i18n } = ret;
if (runsOnServerSide && lng && i18n.resolvedLanguage !== lng) {
i18n.changeLanguage(lng);
} else {
// debugger
// eslint-disable-next-line react-hooks/rules-of-hooks
const [activeLng, setActiveLng] = useState(i18n.resolvedLanguage);

// eslint-disable-next-line react-hooks/rules-of-hooks
useEffect(() => {
if (activeLng !== lng) {
setActiveLng(lng);
i18n.changeLanguage(lng);
}
}, [activeLng, lng, i18n]);

// eslint-disable-next-line react-hooks/rules-of-hooks
useEffect(() => {
if (cookies[CookieLocaleName] === lng) return;
setCookie(CookieLocaleName, lng, { sameSite: "lax", path: `/${lng}` });
}, [lng, cookies, setCookie]);

useEffect(() => {
setDone(true);
}, []);
}
return ret;
}

</code>
134 天前
回复了 ahhtree 创建的主题 程序员 status 200 empty response
@ahhtree 如果开启 i18n 中的 debug 服务端是可以打印的; https 使用的 nginx 进行代理
134 天前
回复了 ahhtree 创建的主题 程序员 status 200 empty response
@NessajCN i18n 主要是参考这篇文章配置的: https://locize.com/blog/next-app-dir-i18n/
134 天前
回复了 ahhtree 创建的主题 程序员 status 200 empty response
相应 -> 响应
134 天前
回复了 ahhtree 创建的主题 程序员 status 200 empty response
请问 v2 上的各位大佬,有没有遇见过这种问题?如何解决的?(不小心点击了发送...。💦)
161 天前
回复了 RenoYoo 创建的主题 问与答 想配一副新眼镜,镜框和镜片怎么选
散光度数大于等于 200 个人建议线下;
否则等双十一买蔡司镜片(提前验好光)
1  2  3  4  5  6  7  8  9  10 ... 14  
关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   3712 人在线   最高记录 6543   ·     Select Language
创意工作者们的社区
World is powered by solitude
VERSION: 3.9.8.5 · 31ms · UTC 10:39 · PVG 18:39 · LAX 03:39 · JFK 06:39
Developed with CodeLauncher
♥ Do have faith in what you're doing.