Прочитайте программные проекты ты используешь
Я проводил некоторое время за последние несколько недель, выбирая некоторые программные проекты, которые я использую и пытаюсь написать небольшие простые версии из них. Это был довольно аккуратный способ узнать, как или особенно почему некоторые вещи работают так, как они делают.
Самый большой пример программного проекта, который я использовал профессионально в течение многих лет, выражен. Я использовал Express для практически любого веб-проекта, который я построил с узлом, и шансы вы тоже его использовали, если вы используете Dev. Может быть, иногда вы сомневали, как работает все промежуточное программное обеспечение даже работает, или почему вы должны вызвать функцию обратного вызова вместо того, чтобы вернуть обещание продвинуться на следующую функцию промежуточного программного обеспечения. Может быть, вы вошли через ваше веб-приложение, и вы оказываетесь в Node_Modules/Express/lib/marriter/index.js И вы можете увидеть матрицу и как-то теперь вы знаете кунг-фу. Завершивание в файле Node_Modules может быть в своем роде пугающим, но если вы посмотрите немного дальше, вы можете понять, что этот код модуля достаточно прост или достаточно легкий или достаточно маленький для вас, чтобы понять, если вы возьмете немного времени, чтобы прочитать его Отказ
Например, у эксплуатации имеет только 12 файлов для всех запросов, ответа, маршрутизации, представления рендеринга, гнездования и функциональности цепочки цепи и промежуточной программы. Полностью можно прочитать через экспресс в выходные дни. Вы, вероятно, не поймете все это сразу, но вы узнаете некоторые аккуратные детали реализации, и вы всегда можете делать заметки о том, что вы не совсем понимаете, чтобы вернуться к позже. В первый раз, когда я читал через логику маршрутизатора, я наткнулся на эту странную деталь, где, если вы зарегистрированы функцию промежуточного программного обеспечения, которая имеет более трех аргументов, экспресс только молча пропускает его и перемещается на следующую функцию промежуточного программного обеспечения. Они не пишут отладочную сообщение, если вы находитесь в режиме разработки, или даже вызовите функцию, зная, что четвертый аргумент просто должен быть неопределенный
(который звучит как больше JavaScript-Y, чтобы сделать со мной). Вы бы сделали это по-другому, если вы пишете библиотеку приложений? До этого момента, я читал по источнику и глядя на это как ” Да, я думаю, что имеет смысл «или« оо крутой, я бы не подумал об этом », но это был первый случай, когда я думал, что я предпочел бы сделать что-то по-другому. Что приводит меня к моей следующей точке …
Переписать программные проекты, которые вы используете (ака делает дерьмовые версии из них)
Я считаю, что чтение прочитала программные проекты и библиотеки, которые вы используете, полезно, чтобы лучше понять, как работает все приложение, но я думаю, что следующий шаг в этом путешествии – выбирать некоторые небольшие библиотеки и сделать действительно простые или дерьмовые версии из них Отказ Продолжаясь с экспрессным примером, вы можете сделать экспресс-клон, который только реализует app.use
Отказ Делать только что дает вам конечный продукт, где вы можете обрабатывать все маршрутизацию и рендеринг вне структуры. Чтобы добраться до этого момента, вы должны быть в состоянии создать объект приложения, который может иметь зарегистрированные промежуточные программы, вы должны решить, как вы хотите хранить промежуточное программное обеспечение, как цепить каждый из функций вместе и пройти в следующей функции, которая будет в конечном итоге вызовите следующую промежуточное программное обеспечение. Вам также потребуется выяснить, как запустить HTTP-сервер для получения объектов/потоков запроса и ответа, которые вы передадите ваше зарегистрированное промежуточное программное обеспечение. В качестве следующего шага, может быть, вы можете добавить несколько функций промежуточного программного обеспечения по умолчанию, такие как Express, предназначена для обработки паразирования строки запроса и разборки тела. Вы хотите создать функциональность для автоматического анализа тела JSON Project или вы оставляете это до пользователя? Это полностью ваш звонок. Может быть, вы можете анализировать строку запросов и позволить пользователю доступить в него как SearchParams экземпляр вместо простого старого объекта. То, что вы можете стремиться, – это воспроизвести интерфейс библиотеки, а затем попробуйте бросить его в проект, который использует эталонную реализацию. Вы можете получить много понимания из падения тестирования и посмотреть, какие части разбиваются или еще не реализованы. Я пробую это с Rapid , экспресс-клон. Это собирается заменить экспресс? Конечно нет. Я собираюсь использовать его вместо Express для всех моих личных проектов? Возможно нет. Это было весело до сих пор, и есть много дополнительных функциональных возможностей, чтобы добавить или воссоздать. Также, если вы хотите сделать PR на быстрых, они более чем приветствуются.
Не просто переписать проекты дословно. Скопируйте интерфейс, но попробуйте внедрение для себя, возможно, вы получите возможность прибыть на то же решение Crossroads оригинальные реализующие сделали. Вы можете в конечном итоге делать разные выбора или, по крайней мере, оценив различные способы, которые вы можете решить проблему. Вы всегда можете пойти проверять свою работу по ссылке впоследствии и улучшить его, если ссылка имеет лучшее решение. Это, вероятно, будет, если это большой проект, как Express, но, возможно, вы придумаете лучшее решение! Большие проекты можно обременено со сложностью от поддержания обратной совместимости для функций, которые вам могут не понадобиться или заботиться о.
Еще один классной проект для воссоздания DataLoader Отказ DataLoader – это инструмент для пакетной нагрузки и ресурсов кэша. Вы делаете экземпляр этого, построив его с помощью пакетной функции, которая принимает некоторые ключи и возвращает обещание, которое разрешится к значениям, к которым относятся эти клавиши. Пакетная функция может запустить запрос SQL или ударить API для отдыха или некоторых других источников данных. Пользователь взаимодействует с экземпляром, вызывая нагрузка
Функция с одним ключом и возвращает обещание, которое будет разрешено к значению ключа, когда функция пакетной функции успешно загружает данные. Прохладная часть заключается в том, что DataLoader расписан пакетной функцией для запуска после текущего кадра выполнения, используя некоторые узловые асинхронные примитивы и кэширует результаты. Если вы запрашиваете тот же ресурс несколько раз на протяжении всей вашей веб-запроса с жизненным циклом, DataLoader загрузит только один раз. Также вы можете попросить отдельных ресурсов на протяжении всего запроса LifeCycle EndaDer и DataLoader загрузит их в конце каждого кадра выполнения.
Реализация DataLoader является только одним файлом (исключая тесты), и есть даже YouTube видео от одного из создателей, которые охватывают весь источник. Написание собственной реализации этого означает, что вам придется охватывать концепции, такие как создание обещаний, кэширования, используя такие вещи, как Процесс.nextTick
Для асинхронных операций и решить, как обрабатывать ошибки от недействительных пользовательских записей, таких как плохие пакетные функции.
Надеюсь, это оставило вам некоторые проекты, имеющие в виду, что вы часто используете, но на самом деле не понимаете, как они работают под капотом. Если у вас есть какие-либо другие рекомендации проекта, что было бы интересно прочитать или переписать, не стесняйтесь твитнуть меня в @copperwall Отказ
Оригинал: “https://dev.to/copperwall/make-shitty-versions-of-software-libraries-you-use-2he2”