Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Анатолий Буров

FrontFest
November 21, 2017

Анатолий Буров

FrontFest

November 21, 2017
Tweet

More Decks by FrontFest

Other Decks in Programming

Transcript

  1. Сейчас 6500 посещений в день 5 запросов в секунду 5000

    символов в запросе 1 сек в среднем на запрос
  2. Бэк Дебиан Nginx Питон 3 и Джанго 1.11 MySQL Redis

    Система контроля версий и деплоя:
 Меркуриал + хуки
  3. jQuery → React за 5 минут Шаг 0 class Glavred

    extends React.Component { render() { <div class="root"></div> } componentDidMount() { $('.root').glavred() } }
  4. class Glavred extends React.Component { render() { <div class="root"></div> }

    componentDidMount() { $('.root').glavred() } } jQuery → React за 5 минут Шаг 1
  5. class Glavred extends React.Component { render() { return <div className="root"></div>

    } componentDidMount() { $('.root').glavred() } } jQuery → React за 5 минут Шаг 2
  6. class Glavred extends React.Component { render() { return <div className="root"></div>

    } componentDidMount() { $('.root').glavred() } } jQuery → React за 5 минут Шаг 3
  7. class Glavred extends React.Component { render() { return <div className="root"></div>

    } componentDidMount() { $('.root').glavred() } } jQuery → React за 5 минут Готово
  8. < text % lexema % grammar > мои Тип 2.

    Суперегекспы мой APRO=им, APRO, им, мн Правило: < % % APRO >
  9. < text % lexema % grammar > мой мои Тип

    2. Суперегекспы APRO=им, APRO, им, мн Правило: < % % APRO >
  10. 1. Синтаксис 1.1. Повторения 1.2. Группировка 1.3. Альтернативы 1.4. Начало

    и конец 2. Синтаксис описания слова 2.1. Полная форма 2.2. Сокращенные формы 2.3. Строгое условие 3. Синтаксис грамматических помет 3.1. Базовые штуки 3.2. Комбинации Тип 2. Суперегекспы
  11. !function(){var e=function(e,t){function n(e){return{status:"error",code:e,message:c[e]}}function r(e){var t="";for(var n in e)if(e.hasOwnProperty(n)){var r;for(r=e[n]instanceof Array?e[n]:[e[n]],i=0;i<r.length;i+

    +)t.length>0&&(t+="&"),t+=encodeURIComponent(n)+"="+encodeURIComponent(r[i])}return t}function o(e,t,n,o,a){var s=new XMLHttpRequest;return s.open("POST",encodeURI(e)),s.setRequestHeader("Content-Type","application/x-www- form-urlencoded"),s.onload=function(){var e=s.responseText;try{e=JSON.parse(e)}catch(t){}200==s.status? n&&n(e):o&&o(e),a&&a(e)},s.send(r(t)),s}function a(e){for(var t,n=5e4,r=[],o=/[\.?!](\s*\r|\s*\n|\s*(<\/em>)| \s*(?=<)|\s+(?=[A-ZА-Я]))/g,a=0;null!==(t=o.exec(e))&&(end=o.lastIndex,! (end>n));)r.push({text:e.slice(a,end),start:a,end:end}),a=end;return e.length<n&&r.push({text:e.slice(a),start:a,end:e.length}),r}function s(e){for(var t={status:"ok",score: 0,fragments:[]},n=[],r=0;r<e.length;r++){for(var o=e[r],a=g[o.text],s=[],u=0;u<a.length;u++){var i=a[u],f={start:o.start+i.start,end:o.start+i.end,url:"https://glvrd.ru/? text="+encodeURIComponent(o.text),hint:p[i.hint]};t.fragments.push(f),s.push(f)} n.push({text:o.text,fragments:s})}return t.score=v.getScore(n),t}var u="https://api.glvrd.ru/ v1/",f={status:u+"status/",proofread:u+"proofread/"},c={unreadable_response:"Пришел непонятный ответ от сервера",failed_request:"Запрос неудачен"},l=null,d=!1,h=/[А-Яа-яA-Za-z0-9-]+([^А-Яа-яA-Za-z0-9-]+)?/ g,g={},p={},v={getStatus:function(r){o(f.status,{key:e,token:t},function(e){r(void 0===e.status? n("unreadable_response"):e)},function(){r(n("failed_request"))})},abortProofreading:function(){l&&(d=! 0,l.abort(),l=null)},proofread:function(r,u){for(var i={},c=a(r),h=[],v=[],m=0;m<c.length;m++){var x=c[m],r=x.text;g[r]?i[r]=g[r]:(h.push(x),v.push(r))}if(0==h.length){var w=s(c);return void u(w)} l=o(f.proofread,{key:e,token:t,chunks:v},function(e){if(void 0===e.status)return void u(n("unreadable_response"));if(e.fragments.length!=h.length)return void u(n("unreadable_response"));for(var t in e.hints)p[t]=e.hints[t];for(var r=0;r<e.fragments.length;r++)i[h[r].text]=e.fragments[r];g=i,u(s(c))},function() {d?d=!1:u(n("failed_request"))},function(){l=null})},getScore:function(e){for(var t=0,n=0,r=0,o=0;o<e.length;o+ +){var a=e[o].text.trim();t+=a?a.replace(h,".").length:0;for(var s=e[o].fragments,u=0;u<s.length;u++){var i=s[u];i.hint.penalty&&(n+=i.hint.penalty),r+=i.hint.weight/100}}return 0==t?0:(score=Math.floor(100*Math.pow(1- r/t,3))-n,score=Math.min(Math.max(score,0),100),score%10==0?score/=10:score=(score/ 10).toFixed(1),score)}};return v};window.glvrd=e("","1507381067:yyzNgTG-NznZsTopih90mmGq4Vs")}(); v1. glvrd.js