>  기사  >  PHP 프레임워크  >  Thinkphp 번역 인터페이스의 사용 및 최적화

Thinkphp 번역 인터페이스의 사용 및 최적화

咔咔
咔咔원래의
2020-08-19 16:53:442687검색

이 기사는 시간이 있으면 시도해 볼 수 있습니다.

서문

프로젝트가 필요하다 언어패키지를 작성하는 사람들은 수백년 동안 변하지 않은 데이터와 같지만, 프로젝트를 진행하면서 계속해서 바뀌는 데이터 종류가 있다.

이러한 데이터를 언어 패키지로 작성하는 것은 분명히 부적절하므로 필요를 충족하려면 번역 인터페이스를 사용해야 합니다.

1. 번역 인터페이스에 대한 간략한 소개

먼저 사진을 보시죠! 우리 프로젝트에서 이 번역 인터페이스가 어떻게 사용되는지 살펴보겠습니다.

Thinkphp 번역 인터페이스의 사용 및 최적화
여기에 그림 설명 삽입

이 인터페이스에는 총 4개의 매개변수(a, f, t, w)가 있습니다.

이 네 가지 매개변수의 의미는 a가 고정된 값, 즉 fy라는 것입니다.

f는 번역 언어를 의미합니다.

t는 우리에게 필요한 언어로 번역되어야 한다는 뜻입니다.

w는 번역이 필요한 데이터를 의미합니다.

2. 프로젝트 실제 전투

프로젝트 요구 사항은 왼쪽 박스에서 언어를 전환한 후 언어 변경을 따르는 것입니다. 우선 위의 글은 직접 작성한 것이 아니며, html 파일도 존재하지 않는다는 점을 먼저 말씀드리겠습니다. 이는 데이터베이스 주석에 구성됩니다.

아래 그림은 데이터베이스 생성을 보여줍니다. 이렇게 만든 이유와 이렇게 만들면 어떤 이점이 있는지는 팀마다 아이디어가 다르기 때문에 언급하지 않겠습니다.

그럼 메인 주제로 넘어갑니다

이것이 사용된 코드입니다. 인터페이스 주소는 위의 postman의 주소입니다. 나중에 번역해야 할 데이터 부분만 전송하면 됩니다.

본 글에서 구현한 데이터는 위 그림의 왼쪽에 있는 텍스트입니다. 즉, 특정 규칙에 따라 추가하거나 수정할 때 데이터베이스에서 설명을 읽은 후 해당 이름을 직접 열로 사용합니다.

그런 다음 이 설명을 번역 인터페이스 뒷면에 직접 추가하기만 하면 됩니다. 컬 요청을 시작하기 위한 PHP용 코드 제공

<span style="display: block; background: url(https://my-wechat.mdnice.com/point.png); height: 30px; width: 100%; background-size: 40px; background-repeat: no-repeat; background-color: #272822; margin-bottom: -7px; border-radius: 5px; background-position: 10px 10px;"></span><code class="hljs" style="overflow-x: auto; padding: 16px; color: #ddd; display: -webkit-box; font-family: Operator Mono, Consolas, Monaco, Menlo, monospace; font-size: 12px; -webkit-overflow-scrolling: touch; letter-spacing: 0px; padding-top: 15px; background: #272822; border-radius: 5px;"><span class="hljs-keyword" style="color: #f92672; font-weight: bold; line-height: 26px;">public</span> <span class="hljs-function" style="line-height: 26px;"><span class="hljs-keyword" style="color: #f92672; font-weight: bold; line-height: 26px;">function</span> <span class="hljs-title" style="color: #a6e22e; font-weight: bold; line-height: 26px;">translateRequest</span><span class="hljs-params" style="line-height: 26px;">($url, $data=array<span class="hljs-params" style="line-height: 26px;">()</span>)</span></span>{<br/><br/>        $ch = curl_init();<span class="hljs-comment" style="color: #75715e; line-height: 26px;">//初始化</span><br/>        <span class="hljs-comment" style="color: #75715e; line-height: 26px;">//curl_setopt();//设置</span><br/>        <span class="hljs-comment" style="color: #75715e; line-height: 26px;">//设置</span><br/>        curl_setopt($ch,CURLOPT_URL,$url);   <span class="hljs-comment" style="color: #75715e; line-height: 26px;">//需要获取的 URL 地址</span><br/>        curl_setopt($ch,CURLOPT_HEADER,<span class="hljs-number" style="line-height: 26px;">0</span>);          <span class="hljs-comment" style="color: #75715e; line-height: 26px;">//启用时会将头文件的信息作为数据流输出, 此处禁止输出头信息</span><br/>        curl_setopt($ch,CURLOPT_RETURNTRANSFER,<span class="hljs-number" style="line-height: 26px;">1</span>);  <span class="hljs-comment" style="color: #75715e; line-height: 26px;">//获取的信息以字符串返回,而不是直接输出</span><br/>        curl_setopt($ch,CURLOPT_CONNECTTIMEOUT,<span class="hljs-number" style="line-height: 26px;">30</span>); <span class="hljs-comment" style="color: #75715e; line-height: 26px;">//连接超时时间</span><br/>        curl_setopt($ch, CURLOPT_ENCODING, <span class="hljs-string" style="color: #a6e22e; line-height: 26px;">&#39;gzip&#39;</span>);<br/><br/>        <span class="hljs-comment" style="color: #75715e; line-height: 26px;">//避免https 的ssl验证</span><br/>        curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, <span class="hljs-keyword" style="color: #f92672; font-weight: bold; line-height: 26px;">false</span>);<br/>        curl_setopt($ch, CURLOPT_SSLVERSION, <span class="hljs-keyword" style="color: #f92672; font-weight: bold; line-height: 26px;">false</span>);<br/>        curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, <span class="hljs-keyword" style="color: #f92672; font-weight: bold; line-height: 26px;">false</span>);<br/><br/>        <span class="hljs-keyword" style="color: #f92672; font-weight: bold; line-height: 26px;">if</span>($data){<br/>            curl_setopt($ch, CURLOPT_POST, <span class="hljs-number" style="line-height: 26px;">1</span>);          <span class="hljs-comment" style="color: #75715e; line-height: 26px;">//post请求</span><br/>            curl_setopt($ch, CURLOPT_POSTFIELDS, $data);<span class="hljs-comment" style="color: #75715e; line-height: 26px;">//post参数</span><br/>        }<br/><br/>        <span class="hljs-comment" style="color: #75715e; line-height: 26px;">//执行</span><br/>        $data = curl_exec($ch);<span class="hljs-comment" style="color: #75715e; line-height: 26px;">//执行   不输出  内容返回给它</span><br/>        <span class="hljs-comment" style="color: #75715e; line-height: 26px;">//判断是否请求成功</span><br/><br/>        <span class="hljs-keyword" style="color: #f92672; font-weight: bold; line-height: 26px;">if</span>(curl_errno($ch)){<span class="hljs-comment" style="color: #75715e; line-height: 26px;">//错误码</span><br/>            <span class="hljs-keyword" style="color: #f92672; font-weight: bold; line-height: 26px;">echo</span> <span class="hljs-string" style="color: #a6e22e; line-height: 26px;">&#39;curl error: &#39;</span>.curl_error($ch);<span class="hljs-comment" style="color: #75715e; line-height: 26px;">//错误信息</span><br/>        }<br/><br/>        $response = curl_getinfo($ch);<br/><br/>        <span class="hljs-keyword" style="color: #f92672; font-weight: bold; line-height: 26px;">switch</span>($response[<span class="hljs-string" style="color: #a6e22e; line-height: 26px;">&#39;http_code&#39;</span>]){<br/>            <span class="hljs-keyword" style="color: #f92672; font-weight: bold; line-height: 26px;">case</span> <span class="hljs-number" style="line-height: 26px;">200</span>:<br/>                <span class="hljs-keyword" style="color: #f92672; font-weight: bold; line-height: 26px;">return</span> $data;<br/>                <span class="hljs-keyword" style="color: #f92672; font-weight: bold; line-height: 26px;">break</span>;<br/>            <span class="hljs-keyword" style="color: #f92672; font-weight: bold; line-height: 26px;">default</span>:<br/>                <span class="hljs-keyword" style="color: #f92672; font-weight: bold; line-height: 26px;">exit</span>(<span class="hljs-string" style="color: #a6e22e; line-height: 26px;">&#39;程序异常&#39;</span>);<br/>        }<br/><br/>        curl_close($ch);<span class="hljs-comment" style="color: #75715e; line-height: 26px;">//关闭</span><br/>    }<br/></code>

테스트 후 효과가 나타나는지 확인하세요. 비공개로 시도해 볼 수도 있습니다! 한 묶음의 데이터를 번역할 때는 속도가 괜찮은데, 여러 개의 데이터를 번역할 때는 속도가 좀 느립니다.

추가된 페이지를 여는 데 3~5초 정도 걸리는데 이는 절대 불가능하므로 이 문제를 해결할 수 있는 방법을 생각해 보아야 합니다. Thinkphp 번역 인터페이스의 사용 및 최적화

3. 번역 속도 최적화

두 번째 단계에서 Kaka는 마침내 번역 속도가 약간 느리고 필드가 많을 때 훨씬 더 느리다는 것을 발견했습니다. 그래서 카카는 한 가지 방법을 생각했습니다.

이 데이터는 이전에 하나씩 번역되었으므로 한 번에 모두 번역한 다음 직접 데이터를 조립할 수 있나요? Thinkphp 번역 인터페이스의 사용 및 최적화

이 아이디어로 구현을 시작했습니다.

이 코드 줄이 궁극적으로 달성하는 것은 모든 필드 주석을 하나로 묶고 ","로 구분하는 것입니다. Thinkphp 번역 인터페이스의 사용 및 최적화인쇄된 데이터를 보면 out 필드가 실제로 번역된 데이터가 아닙니다. 6개 번역보다 확실히 빨리 번역해야 한다는 생각을 해야 합니다.

그런 다음 이 데이터 세트를 가져와서 배열로 변환하고 원래 데이터로 다시 조립하세요. Thinkphp 번역 인터페이스의 사용 및 최적화여기에 작은 질문이 있습니다. 함께 주목해 보세요. 중국어로 인쇄된 것이 원본 데이터이고, 영어로 인쇄된 것이 가공된 데이터입니다.

반환된 영어 결과가 원본 데이터와 일치하지 않는 것은 명백합니다. Thinkphp 번역 인터페이스의 사용 및 최적화여기서 처리하는 방법도 비교적 간단합니다. 더 나은 해결책이 있으면 주석 영역에서 확인하세요.

처리 방법은 데이터베이스 필드의 중국어 주석을 얻기 전에 해당 인덱스를 $needkey에 저장하는 것입니다. 그런 다음 fanal의 인덱스가 needkey의 v와 같고 해당 값은 결과[k of needkey]

이러한 사용 번역 인터페이스가 완료되고 프로젝트 스크린샷이 표시되지 않습니다. 하!

번역 속도를 높이기 위해 여러 번역을 하나의 번역으로 변경하는 것은 결국 다른 사람에게 무언가를 요청하는 것이므로 스스로 데이터를 재구성하는 것만큼 빠르지는 않습니다.

배움에 대한 끈기, 블로그에 대한 끈기, 공유에 대한 끈기는 카카가 경력 이후부터 늘 지켜온 신념입니다. 누오다 인터넷에 올라온 카카의 글이 여러분께 조금이나마 도움이 되기를 바랍니다.

위 내용은 Thinkphp 번역 인터페이스의 사용 및 최적화의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.